Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 22 additions & 13 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,32 +25,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

- Added the v19 `openWarp()` product opener plus `Warp` and `Timeline`
facade handles to the package root only; the browser root remains outside
the v19 facade surface.
- Moved graph-shaped, worldline-shaped, optic-shaped, witness-shaped, and
diagnostic compatibility exports out of the package root into explicit
`legacy`, `storage`, `advanced`, and `diagnostics` subpaths. The package root
now rejects those nouns through the v19 public API boundary audit.
- Added the v19 `openWarp()` product opener. `Warp` and `Timeline` are returned
as runtime handles and exported from the root as companion types.
- Moved supported storage, formal WARP, and operator inspection exports out of
the package root into the explicit `storage`, `advanced`, and `diagnostics`
subpaths. The package root now rejects graph-first compatibility nouns
through the v19 public API boundary audit.
- Moved formal coordinate capture to advanced `captureCoordinate()` so the root
`Timeline` exposes opaque ticks but no coordinate machinery.
- Bound ticks to the exact timeline runtime that created them and made bounded
traversal reuse one request-scoped checkpoint basis and tail support index.
- Locked the package root to the v19 facade allowlist so support ports,
infrastructure adapters, memory helpers, cancellation utilities, sync
internals, and canonical serialization helpers stay behind explicit subpaths.
- Aligned `CheckpointStorePort` with the schema:5 checkpoint envelope tree. The
CBOR adapter now owns the named checkpoint artifact encoding for runtime
checkpoint creation and loading instead of exposing a stale single
`state.cbor` result.
- Added visible-state scope helpers to the `diagnostics` subpath so
materialized-state inspection has an explicit non-legacy import path.
- Deprecated the entire graph-first legacy API. `legacy` remains migration-only
and is no longer presented as a valid first-use path.
- Reduced the `diagnostics` subpath to receipt-based `inspectReceipt()`;
graph-diff and materialized-state helpers are no longer public contracts.
- Moved receipt canonical JSON and ORSet/full-state wire encoding out of
domain types and storage adapters into infrastructure codec modules; `ORSet`
no longer exposes `serialize()` or `deserialize()`.
- Raised the coverage ratchet from `92.10%` to `92.56%` after adding targeted
coverage for bounded query node paging and memory-budget rejection paths.
- Raised the coverage ratchet from `92.10%` to `92.62%` after adding targeted
coverage for bounded query node paging and memory-budget rejection paths and
removing retired compatibility surfaces.
- Upgraded `@git-stunts/git-cas` to `^6.1.0` so Git-backed state caches can use
the library's crash-safe `RootSet` retention API.

### Removed

- Removed the `browser` and `legacy` package entrypoints, the graph-first
compatibility barrel, and their compatibility-only examples and tests.
- Removed the v18 graph-first package exports rather than carrying a deprecated
second application API through v19.

### Fixed

- Git-backed state-cache payload trees are now anchored through a graph-scoped
Expand Down
205 changes: 110 additions & 95 deletions README.md

Large diffs are not rendered by default.

84 changes: 20 additions & 64 deletions advanced.ts
Original file line number Diff line number Diff line change
@@ -1,69 +1,25 @@
/**
* Formal and support-oriented API surface.
* Formal bounded-reading API for expert consumers.
*
* These exports keep advanced read/evidence machinery out of the package root.
* Application code should prefer the root intent/timeline/receipt API as it
* lands through v19.
* Capture a `Coordinate` from a public `Timeline` with `captureCoordinate()`,
* then lower reads through its executable `Optic`. A successful read carries
* a type-only `Witness` through the root receipt evidence contract.
*/

export {
BoundedSupportRule,
CausalIndexPlan,
composeWormholes,
createWormhole,
deserializeWormhole,
LiveSelector,
Observer,
ObserverAccumulation,
ObserverBasis,
ObserverEmission,
ObserverPlan,
ObserverReadingEnvelope,
openAperture,
Optic,
OpticAperturePosture,
OpticBasisPosture,
OpticCoordinatePosture,
OpticSupportRule,
ProjectionHandle,
RejectedZKWormhole,
replayWormhole,
serializeWormhole,
StrandSelector,
SupportFragmentPlan,
VerifiedZKWormhole,
verifyZKWormhole,
WarpWorldlineCoordinate,
WarpWorldlineOpticBasis,
WorldlineSelector,
ZKWormholeEdge,
ZKWormholeProofVerifierPort,
} from './legacy.ts';
export * from './src/continuumExports.ts';
export { default as captureCoordinate } from './src/domain/api/captureCoordinate.ts';
export { default as Coordinate } from './src/domain/WarpWorldlineCoordinate.ts';
export { default as Optic } from './src/domain/services/optic/WorldlineOptic.ts';
export type { WarpWorldlineCoordinateFrontierEntry } from './src/domain/WarpWorldlineCoordinate.ts';
export type { NeighborhoodOpticReadOptions } from './src/domain/services/optic/NeighborhoodOptic.ts';
export type {
Aperture,
ApertureOpeningVerificationResult,
BoundedSupportDirection,
BoundedSupportKind,
BoundedSupportRuleFields,
BoundedSupportSurface,
CausalIndexFamily,
CausalIndexPlanFields,
CausalIndexPlanPosture,
ObserverConfig,
ObserverPlanFields,
ObserverReadingEnvelopeBudget,
ObserverReadingEnvelopeFields,
OpticAperturePostureValue,
OpticBasisPostureValue,
OpticContextValue,
OpticCoordinatePostureValue,
OpticFields,
OpticPostureFields,
OpticSupportRuleValue,
SupportFragmentMaterializationPosture,
SupportFragmentPlanFields,
WarpWorldlineCoordinateFrontierEntry,
ZKWormholeEdgeFields,
ZKWormholeVerificationResult,
} from './legacy.ts';
NeighborhoodOpticCompleteness,
NeighborhoodOpticEdge,
NeighborhoodOpticReadDirection,
} from './src/domain/services/optic/NeighborhoodOpticReadResult.ts';
export type {
default as Witness,
ReadIdentityFrontierEntry,
ReadIdentityIndexShard,
ReadIdentityOptions,
ReadIdentityTailWitness,
} from './src/domain/services/optic/ReadIdentity.ts';
2 changes: 1 addition & 1 deletion bin/cli/commands/optic.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { openWarpWorldline } from '../../../legacy.ts';
import { openWarpWorldline } from '../../../src/domain/WarpWorldline.ts';
import QueryError from '../../../src/domain/errors/QueryError.ts';
import type ReadIdentity from '../../../src/domain/services/optic/ReadIdentity.ts';
import type WorldlineOptic from '../../../src/domain/services/optic/WorldlineOptic.ts';
Expand Down
3 changes: 3 additions & 0 deletions bin/warp-graph.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
#!/usr/bin/env node

import process from 'node:process';
import { installDefaultRuntimeHostNodePorts } from '../src/application/RuntimeHostNodeDefaults.ts';
import { EXIT_CODES, HELP_TEXT, CliError, parseArgs, usageError } from './cli/infrastructure.ts';
import { stableStringify, compactStringify } from './presenters/json.ts';
import { COMMANDS } from './cli/commands/registry.ts';

installDefaultRuntimeHostNodePorts();

// Output format must be captured from raw process.argv BEFORE parseArgs() runs.
// If parseArgs() itself throws (e.g., unknown flag, malformed input), the `options`
// object will not exist, so the error handler cannot read `options.json`. By
Expand Down
44 changes: 0 additions & 44 deletions browser.ts

This file was deleted.

85 changes: 41 additions & 44 deletions diagnostics.ts
Original file line number Diff line number Diff line change
@@ -1,47 +1,44 @@
/**
* Operator diagnostics and migration inspection surface.
*
* Diagnostic exports stay separate from the application root so public
* first-use code does not learn substrate nouns before it needs them.
* Operator-facing inspection helpers for the v19 application API.
*/

export {
BisectService,
CommitDagTraversalService,
ContentAttachmentProjection,
exportCoordinateComparisonFact,
exportCoordinateTransferPlanFact,
GraphDiff,
GraphOpAlgebraProjection,
QueryBuilder,
TtdMergeBranch,
TtdMergeFootprint,
TtdMergeInspection,
TtdMergeInspector,
TtdMergeLoweringWitness,
TtdMergeObstructionWitness,
TtdMergePolicyRequirement,
} from './legacy.ts';
export type {
GraphDiffFields,
GraphDiffOptions,
TtdMergeBranchFields,
TtdMergeFootprintFields,
TtdMergeInspectionDomain,
TtdMergeInspectionFields,
TtdMergeLoweringSurface,
TtdMergeLoweringWitnessFields,
TtdMergeObjectBranchInput,
TtdMergeObjectInspectionInput,
TtdMergeObstructionWitnessFields,
TtdMergePolicyRequirementFields,
} from './legacy.ts';
export {
normalizeVisibleStateScope,
nodeIdInVisibleStateScope,
scopeMaterializedState,
} from './src/domain/services/VisibleStateScope.ts';
export type {
VisibleStateScope,
VisibleStateScopePrefixFilter,
} from './src/domain/services/VisibleStateScope.ts';
import type { Receipt } from './src/domain/api/Receipt.ts';

export type ReceiptInspection = {
readonly operation: Receipt['operation'];
readonly outcome: Receipt['outcome'];
readonly timeline: string;
readonly writer: string;
readonly reason: string | undefined;
readonly evidence: 'present' | 'absent';
readonly objectIds: readonly string[];
};

export function inspectReceipt(receipt: Receipt): ReceiptInspection {
const objectIds = receiptObjectIds(receipt);
return Object.freeze({
operation: receipt.operation,
outcome: receipt.outcome,
timeline: receipt.timeline,
writer: receipt.writer,
reason: receipt.reason,
evidence: receipt.operation === 'read' && receipt.evidence !== undefined ? 'present' : 'absent',
objectIds: Object.freeze(objectIds),
});
}

function receiptObjectIds(receipt: Receipt): string[] {
if (receipt.operation === 'write') {
return receipt.patchSha === undefined ? [] : [receipt.patchSha];
}
if (receipt.operation === 'join') {
return [...receipt.patchShas];
}
if (receipt.evidence === undefined) {
return [];
}
return [
receipt.evidence.checkpointSha,
...receipt.evidence.tailWitnesses.map((witness) => witness.sha),
];
}
Loading
Loading