A research project exploring receipts as a new digital asset class.
Chronicle is a continuity layer for proof-bearing work.
ReceiptOS proves what happened.
Chronicle explains how proven events become history.
MVP flow:
ReceiptOS Proof Object
→ Chronicle Entry
→ Chronicle Graph
→ Chronicle Timeline
→ Human-readable Output
Chronicle does not replace ReceiptOS verification. Chronicle does not modify proof objects. Chronicle does not define ownership, identity, NFT, marketplace, or reputation logic in MVP.
Post-quantum considerations for receipt longevity: see pq-receipt-profile.
Core formulations: see Canonical Principles.
A longer MVP explanation is in docs/chronicle_mvp_explainer.md.
Chronicle follows a simple rule: history should begin only after correctness has survived independent verification. Without the proof step, history becomes a story someone tells about what happened, not a fact others can re-derive. See: Verification Before History.
Chronicle starts from a simple premise:
- the AI is temporary
- the runtime is temporary
- the platform is temporary
- the verified history survives
The receipt is the durable object.
Chronicle is a first-principles research repository about whether cryptographically verifiable receipts can become a new digital asset class.
It is not centered on speculative scarcity. It is centered on durable, portable, verifiable history.
Chronicle explores how verified work history might become:
- ownable
- composable
- portable across platforms
- valuable over long time horizons
- usable as individual, organizational, and machine history
Chronicle is:
- not another NFT project
- not another marketplace
- not another token
NFTs may become one transport layer for some use cases, but they are not the core abstraction here.
The core object is the receipt itself:
- portable
- cryptographically verifiable
- long-lived digital history
If AI systems, runtimes, and companies are transient, then the only durable object may be the verified history of what was done, by whom, under what conditions, with what evidence, and with what outcome.
Chronicle explores whether that verified history can become a durable asset class in its own right.
- ReceiptOS provides proof packaging, verification, replay-oriented evidence, and proof presentation.
- CYPHES provides work, workflow meaning, and settlement.
- Chronicle explores ownership, composition, transfer, and long-term value of the resulting receipts.
docs/VISION.mddocs/PHILOSOPHY.mddocs/RECEIPTS_AS_ASSETS.mddocs/CHRONICLE_MODEL.mddocs/OWNERSHIP.mddocs/COMPOSITION.mddocs/TOKENIZATION.mddocs/OPEN_QUESTIONS.mddocs/NON_GOALS.mddocs/chronicle_mvp_v0.mddocs/chronicle_first_build_plan_v0.mddocs/chronicle_mvp_explainer.mddocs/chronicle_position_v0.mddocs/chronicle_asset_model_v0.mddocs/chronicle_mvp_e2e_demo.mddocs/images/chronicle-mvp-flow.pngexamples/chronicle-example.jsonexamples/receipt-example.jsonexamples/chronicle-mvp-example.jsonexamples/chronicle-mvp-generated-timeline.jsonsrc/chronicle_mvp_data_model.tssrc/chronicle_mvp_timeline_generator.tssrc/chronicle_mvp_timeline_generator_core.mjsscripts/validate_chronicle_mvp_timeline.mjsscripts/run_chronicle_mvp_demo.mjsscripts/run_chronicle_node.mjs
ReceiptOS Proof Object
→ Chronicle Entry
→ Chronicle Graph
→ Chronicle Timeline
→ Human-readable Output
The current Chronicle MVP can now be demonstrated end to end using:
examples/chronicle-mvp-example.jsonexamples/chronicle-mvp-generated-timeline.jsonsrc/chronicle_mvp_timeline_generator.tsscripts/validate_chronicle_mvp_timeline.mjsscripts/run_chronicle_mvp_demo.mjsdocs/chronicle_mvp_e2e_demo.md
The MVP example currently models a realistic software project flow:
- implementation completed
- verification completed
- release created
Each stage becomes a Chronicle Entry. Relationships become Chronicle Graph edges. The generated Timeline then becomes both machine-readable output and a simple human-readable historical view.
node scripts/run_chronicle_mvp_demo.mjsExpected output includes:
- proof object refs
- entries
- graph edges
- timeline events
- final markdown/history view
cd C:\Users\msi\dev\Chronicle
node scripts\run_chronicle_node.mjsThe local node now persists entries to:
data/chronicle-local-store.json
Invoke-RestMethod http://localhost:8080/healthLegacy MVP model example:
- this example uses the legacy Chronicle MVP
proof_object_refs[]structure; - it is not the canonical
chronicle_entry.v0wire shape; - canonical v0 uses singular
proof_object_refplus separatereceipt_root; proof_object_refreferencesreceiptos.portable_proof_object.v0;- multiple proof objects belong to a higher Chronicle aggregate layer or a future schema version;
- migration of the legacy MVP implementation is a separate follow-up;
- see
specs/chronicle_entry_v0.mdfor the canonical v0 boundary.
$entry = @{
entry_id = "entry-manual-001"
proof_object_refs = @(
@{
proof_object_id = "proofobj-receiptos-manual-001"
proof_system = "ReceiptOS"
receipt_root = "0xproofroot-manual-001"
proof_ref = "receiptos://proof/manual/001"
replay_ref = "receiptos://replay/manual/001"
anchor_ref = "receiptos://anchor/manual/001"
}
)
project_refs = @("project-chronicle-core")
relation_type = "created"
chronology_position = "1"
created_at = "2026-06-27T14:00:00Z"
metadata = @{
label = "Manual Chronicle entry"
}
} | ConvertTo-Json -Depth 10
Invoke-RestMethod -Method Post `
-Uri http://localhost:8080/entries `
-ContentType 'application/json' `
-Body $entryInvoke-RestMethod http://localhost:8080/entriesPOST /import/receipt
Example request:
$proof = Get-Content .\examples\receipt-import-example.json -Raw
Invoke-RestMethod -Method Post `
-Uri http://localhost:8080/import/receipt `
-ContentType 'application/json' `
-Body $proofExpected result:
- a Chronicle Entry is created automatically
- the imported proof becomes visible in
/entries - the imported proof appears in
/timeline - the imported proof appears in
/chronicle.md - the imported proof appears in
/view
This route may report an existing identity as not newly imported when
proof_object_id or entry_id already matches a stored entry.
- Canonical
chronicle_entry.v0semantics permit idempotence only for an exact byte-for-byte re-import of the previously accepted portable proof object. - The same
proof_object_id, or the same derived/suppliedentry_id, with non-identical portable-object bytes is an explicit identity conflict, not an idempotent re-import. - Such a conflict must not be overwritten or silently deduplicated.
- The current legacy MVP
/import/receiptroute does not yet perform this byte-level collision check. - Normative re-import and identity-conflict behavior is pinned in
specs/chronicle_entry_v0.md.
Example PowerShell command:
$capsule = Get-Content .\examples\receipt-timeline-import-example.json -Raw
Invoke-RestMethod -Method Post `
-Uri http://localhost:8080/import/receipt-timeline `
-ContentType 'application/json' `
-Body $capsuleThis imports multiple timeline events from one ReceiptOS-style capsule, creates one Chronicle Entry per event, preserves the shared proof reference, and makes the result visible in /entries, /timeline, /chronicle.md, /view, and /project/:project_ref/view.
Skipping already-imported event IDs is current legacy MVP route behavior. It
is not sufficient to establish canonical byte-identical idempotence: a
repeated identity with different underlying portable-object bytes must be
treated as an explicit conflict under the canonical Entry v0 rule. Migrating
this route to perform that check is a separate implementation follow-up. See
specs/chronicle_entry_v0.md.
Invoke-RestMethod http://localhost:8080/timelineInvoke-RestMethod http://localhost:8080/chronicle.mdStart node:
node scripts\run_chronicle_node.mjsOpen:
http://localhost:8080/view
Example:
http://localhost:8080/project/project-chronicle-core/view
Example:
http://localhost:8080/release/v0.1.0/view
Example:
http://localhost:8080/profile/agent-chronicle-builder/view
Example:
http://localhost:8080/position/position-chronicle-core-v0.1.0/view
Position scorecard examples:
http://localhost:8080/position/position-chronicle-core-v0.1.0/scorecardhttp://localhost:8080/position/position-chronicle-core-v0.1.0/scorecard/view
Position evolution examples:
http://localhost:8080/position/position-chronicle-core-v0.1.0/evolutionhttp://localhost:8080/position/position-chronicle-core-v0.1.0/evolution/view
Position snapshot example:
http://localhost:8080/position/position-chronicle-core-v0.1.0/snapshot
Position artifact examples:
http://localhost:8080/position/position-chronicle-core-v0.1.0/artifacthttp://localhost:8080/position/position-chronicle-core-v0.1.0/artifact/view
Artifact root defines identity of the accumulated scoped history. Derived overlays such as scorecard, evolution, snapshot, and lineage are recomputable views and are excluded from artifact identity. Chronicle recomputes local history views; it does not certify or score.
Position lineage examples:
http://localhost:8080/position/position-chronicle-core-v0.1.0/lineagehttp://localhost:8080/position/position-chronicle-core-v0.1.0/lineage/view
Artifact Collection examples:
http://localhost:8080/collectionshttp://localhost:8080/collection/project-chronicle-corehttp://localhost:8080/collection/project-chronicle-core/exporthttp://localhost:8080/collection/project-chronicle-core/view
Chronicle Portfolio examples:
http://localhost:8080/portfolioshttp://localhost:8080/portfolio/position-chronicle-core-v0.1.0http://localhost:8080/portfolio/position-chronicle-core-v0.1.0/exporthttp://localhost:8080/portfolio/position-chronicle-core-v0.1.0/view
Receipt → receipt_root. Artifact → artifact_root. Collection → collection_root. Portfolio → portfolio_root.
Portfolio recomputes a portable body of Chronicle history. It does not score, certify, verify, sign, or create ownership.
Examples:
http://localhost:8080/receiptshttp://localhost:8080/receipt/proofobj-receiptos-timeline-001http://localhost:8080/receipt/proofobj-receiptos-timeline-001/view
GET http://localhost:8080/exportGET http://localhost:8080/project/project-chronicle-core/export
$bundle = Invoke-RestMethod http://localhost:8080/export | ConvertTo-Json -Depth 20
Invoke-RestMethod -Method Post `
-Uri http://localhost:8080/import/bundle `
-ContentType 'application/json' `
-Body $bundleThe local node now uses file-backed local storage in data/chronicle-local-store.json.
Delete data/chronicle-local-store.json to clear local state.
The first Chronicle implementation target is intentionally small:
ReceiptOS Proof Object
→ Chronicle Entry
→ Chronicle Graph
→ Chronicle Timeline
The repository now includes a minimal implementation-neutral MVP data model in src/chronicle_mvp_data_model.ts, a timeline generator in src/chronicle_mvp_timeline_generator.ts, a runtime generator core in src/chronicle_mvp_timeline_generator_core.mjs, a matching example fixture in examples/chronicle-mvp-example.json, and a generated timeline example in examples/chronicle-mvp-generated-timeline.json.
This MVP flow is intended to prove only that Chronicle can:
- ingest a ReceiptOS Proof Object reference
- create Chronicle Entries
- link Entries with Chronicle Graph edges
- project ordered continuity as a Chronicle Timeline generated from Chronicle Entries and Chronicle Graph edges
It is explicitly not yet implementing Profile, Portfolio, Release View, ownership, NFT, marketplace, or reputation logic.
This repository is about:
- first principles
- systems design
- architectural models
- ownership models
- lifecycle models
- composition models
- tokenization boundary analysis
This repository is not about:
- smart contracts
- token implementation
- selecting a blockchain
- building a marketplace first
Chronicle exists to define the conceptual substrate before any transport or monetization layer hardens into the wrong abstraction.
Chronicle runs the MVP demo in GitHub Actions on pull requests and pushes to main.
- Code and documentation: Apache-2.0
- Chronicle objects and user-generated histories: owned by their creators or lawful owners
- Brand and trademark rights: reserved
- See
docs/LICENSE_POLICY_V0.md
