Skip to content
Merged
  •  
  •  
  •  
19 changes: 11 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<div align="center">
<p><strong>A Git-native runtime for shared causal history.</strong></p>
<p><strong>Write intents. Read timelines. Keep receipts.</strong></p>
<p><strong>Write intents. Observe lanes. Keep receipts.</strong></p>
<p><strong>A runtime for shared causal history.</strong></p>
<p>Offline-first, multi-writer, deterministic, and built for provenance-aware applications.</p>
</div>

Expand All @@ -16,7 +16,8 @@
</a>
</p>

`git-warp` is a Git-native system for storing and reading **causal history**.
`git-warp` is a runtime for storing and observing **causal history**. Its
current durable storage substrate is Git.

Instead of treating a graph as one big in-memory object, `git-warp` treats history as the source of truth. Reads are bounded views over that history, and writes are appended as patches. It is one runtime in the [Continuum](https://github.com/flyingrobots/continuum) stack ([more below](#continuum)).

Expand Down Expand Up @@ -52,11 +53,13 @@ replay-backed so callers receive complete diff and provenance data.

See [CHANGELOG.md](CHANGELOG.md) for the full in-repository release notes.

## v19 First-Use API
## Transitional v19 First-Use API

This is the public contract new application code should start from. The
v18 graph-first package exports are removed rather than carried as a second
compatibility API.
The currently implemented v19 facade below is transitional. The accepted
[`Runtime` / `Lane` / `Observer` vocabulary checkpoint](docs/topics/api/) is
the release target and must not be described as implemented until its runtime
and boundary tests land. The v18 graph-first package exports remain removed
rather than carried as a second compatibility API.

```typescript
import { openWarp, intent, reading } from '@git-stunts/git-warp';
Expand Down Expand Up @@ -147,7 +150,7 @@ actually used through receipts. The removed `openWarpGraph()` and
`openWarpWorldline()` paths are migration source material, not a second
application API.

See the [v19 API reflection](docs/topics/api/), the
See the [v19 API vocabulary checkpoint](docs/topics/api/), the
[v19 migration guide](docs/migrations/v19/), and
[Optic reads](docs/topics/optic-reads.md) for the model.

Expand Down
11 changes: 8 additions & 3 deletions bin/cli/commands/trust.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ import { EXIT_CODES, parseCommandArgs, getEnvVar } from '../infrastructure.ts';
import { trustSchema } from '../schemas.ts';
import { createPersistence, resolveGraphName } from '../shared.ts';
import defaultCodec from '../../../src/infrastructure/codecs/CborCodec.ts';
import { DEFAULT_COMMIT_MESSAGE_CODEC } from '../../../src/infrastructure/adapters/TrailerCommitMessageCodecAdapter.ts';
import AuditVerifierService from '../../../src/domain/services/audit/AuditVerifierService.ts';
import TrustCryptoAdapter from '../../../src/infrastructure/adapters/TrustCryptoAdapter.ts';
import WebCryptoAdapter from '../../../src/infrastructure/adapters/WebCryptoAdapter.ts';
import type { CorePersistence } from '../../../src/domain/types/WarpPersistence.ts';
import type { CliOptions, Persistence } from '../types.ts';

const TRUST_OPTIONS = {
Expand Down Expand Up @@ -53,11 +53,16 @@ async function discoverWriterIds(persistence: Persistence, graphName: string): P
/** Handles the `git warp trust` command: evaluates writer trust against signed evidence. */
export default async function handleTrust({ options, args }: { options: CliOptions; args: string[] }): Promise<{ payload: unknown; exitCode: number }> {
const { mode, trustPin } = parseTrustArgs(args);
const { persistence, createTrustChain } = await createPersistence(options.repo);
const { persistence, runtimeStorage, createTrustChain } = await createPersistence(options.repo);
const graphName = await resolveGraphName(persistence, options.graph);
const storage = await runtimeStorage.createRuntimeStorageServices({
timelineName: graphName,
codec: defaultCodec,
commitMessageCodec: DEFAULT_COMMIT_MESSAGE_CODEC,
});
const trustChain = createTrustChain(new WebCryptoAdapter());
const verifier = new AuditVerifierService({
persistence: persistence as unknown as CorePersistence,
auditLog: storage.auditLog,
codec: defaultCodec,
trustChain,
trustCrypto: new TrustCryptoAdapter(),
Expand Down
11 changes: 8 additions & 3 deletions bin/cli/commands/verify-audit.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import AuditVerifierService from '../../../src/domain/services/audit/AuditVerifierService.ts';
import defaultCodec from '../../../src/infrastructure/codecs/CborCodec.ts';
import type { CorePersistence } from '../../../src/domain/types/WarpPersistence.ts';
import { DEFAULT_COMMIT_MESSAGE_CODEC } from '../../../src/infrastructure/adapters/TrailerCommitMessageCodecAdapter.ts';
import { EXIT_CODES, parseCommandArgs, getEnvVar } from '../infrastructure.ts';
import { verifyAuditSchema } from '../schemas.ts';
import { createPersistence, resolveGraphName } from '../shared.ts';
Expand Down Expand Up @@ -47,10 +47,15 @@ export function parseVerifyAuditArgs(args: string[]): { since: string | undefine
/** Handles the verify-audit command: verifies audit receipt chain integrity. */
export default async function handleVerifyAudit({ options, args }: { options: CliOptions; args: string[] }): Promise<{ payload: unknown; exitCode: number }> {
const { since, writerFilter, trustMode, trustPin } = parseVerifyAuditArgs(args);
const { persistence } = await createPersistence(options.repo);
const { persistence, runtimeStorage } = await createPersistence(options.repo);
const graphName = await resolveGraphName(persistence, options.graph);
const storage = await runtimeStorage.createRuntimeStorageServices({
timelineName: graphName,
codec: defaultCodec,
commitMessageCodec: DEFAULT_COMMIT_MESSAGE_CODEC,
});
const verifier = new AuditVerifierService({
persistence: persistence as unknown as CorePersistence,
auditLog: storage.auditLog,
codec: defaultCodec,
});

Expand Down
7 changes: 7 additions & 0 deletions docs/migrations/v19/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# v19 Public API Migration Plan

> **Transitional implementation note:** This guide describes the first v19
> timeline facade that currently exists in source. The accepted
> [v19 public vocabulary checkpoint](../../topics/api/) supersedes it as the
> release target. Do not treat this guide as final v19 migration evidence until
> it is rewritten for Runtime, Lane, Observer, Observation, Reading, and
> Receipt.

This migration plan covers consumers moving from v18 or earlier public
surfaces to the v19 public API. It is intentionally explicit because
v19 is a major-version boundary: root exports become small and application
Expand Down
4 changes: 2 additions & 2 deletions docs/topics/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ replay-backed. Operator workflows live outside the topic shelf in

- [Getting started](getting-started.md): install the package, open a worldline,
write a patch, read it back, and sync WARP refs.
- [v19 public API reflection](api/): understand the planned root API shift to
intents, readings, timelines, ticks, and receipts.
- [v19 public vocabulary checkpoint](api/): follow the accepted Runtime, Lane,
Intent, Observer, Observation, Reading, and Receipt contract.
- [Querying](querying.md): choose between worldlines, observers, optic reads,
query builders, and strand sources.

Expand Down
Loading
Loading