I started building this after discussing the idea with a mate who works in pharma. As the author of CellScript, I kept coming back to the same question:
When a batch becomes “released,” what exactly did someone approve—and can another participant check it without asking the original application for its verdict?
I built Lineage to work through that question. It follows a batch through evidence collection, quality review, release, and a later correction. There is a working interface, signed records, an export you can verify offline, and a release predicate executed locally in CKB-VM through CellScript.
These screenshots come from the browser acceptance run. The organizations, people, samples, and reports are explicitly synthetic. The uploaded bytes, signatures, VM execution, and rejected operations are real. A fresh installation starts empty.
In an autologous cell therapy, the starting cells come from the patient who will receive the treatment. A sponsor, contract manufacturer, testing lab, logistics provider, and hospital may each hold part of the record. Chain of identity concerns whose material it is; chain of custody concerns who had it.
I am interested in the handoff between existing systems: which report version was relied on, which process applied, who assessed the evidence, and what happens if a record changes after approval.
A quality owner approves a versioned policy. A batch binds to that policy, a sample reference, and a process version. Lab and manufacturing members upload files and sign declarations covering identity, potency, sterility, viability, manufacturing, and deviations.
The distinction I care about is ready for review versus approved for release. Having all the required records does not make the quality decision for you.
All six required declarations are present. The batch still needs an accountable approval.
Each declaration binds the exact document hash to the batch, sample, process, policy, category, assessment, and issuer. At approval, the server checks the active evidence, issuer permissions, holds, and revision. It executes the CellScript predicate, then checks again before committing the decision.
The predicate itself is intentionally small:
required evidence is present
AND required assessments pass
AND required declarations pass attribution checks
AND no hold is active
AND the batch revision still matches
The signed release records the evidence manifest, policy, revision, approver, and execution receipt. That gives the later reader a specific decision to inspect.
The next part matters more to me than the green badge. Export the source bytes, declarations, policy, approvals, and signed history, then verify them locally in the browser or Node CLI. Browser verification uses Web Crypto without uploading the package. The acceptance test exercises it offline.
Verification checks the records inside the package. The public trust directory still needs to be authenticated independently.
Changing the exported evidence produces a rejection:
I also wanted to follow the uncomfortable case. A report used in a release is later revoked. The batch goes on hold. Resolving the hold returns it to evidence collection; replacement evidence needs another approval. The earlier release remains in the history, with the evidence it originally relied on.
The verifier reconstructs the exported batch state from signed events and checks retained approvals against their own manifests. A valid old export remains a snapshot: it cannot tell you that no revocation happened after it was created.
Source and running instructions: GitHub - CellScript-Labs/lineage: Therapeutic batch release evidence, independent verification, and local CellScript CKB-VM checks · GitHub






