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
2 changes: 1 addition & 1 deletion crates/warp-core/src/record.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ pub struct NodeRecord {
/// - `id` is stable across runs for the same logical edge.
/// - `ty` must be a valid edge type in the current schema.
/// - `payload` encoding is caller-defined and opaque to the store.
#[derive(Clone, Debug)]
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct EdgeRecord {
/// Stable identifier for the edge.
pub id: EdgeId,
Expand Down
6 changes: 1 addition & 5 deletions crates/warp-core/src/tick_patch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,7 @@ pub(crate) fn diff_store(before: &GraphStore, after: &GraphStore) -> Vec<WarpOp>
});
}
Some(rec_before) => {
if !edge_record_eq(rec_before, rec_after) {
if rec_before != rec_after {
if rec_before.from != rec_after.from {
ops.push(WarpOp::DeleteEdge {
from: rec_before.from,
Expand Down Expand Up @@ -462,7 +462,3 @@ fn edges_by_id(store: &GraphStore) -> std::collections::BTreeMap<Hash, EdgeRecor
}
out
}

fn edge_record_eq(a: &EdgeRecord, b: &EdgeRecord) -> bool {
a.id == b.id && a.from == b.from && a.to == b.to && a.ty == b.ty && a.payload == b.payload
}
1 change: 1 addition & 0 deletions docs/decision-log.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
| 2025-12-29 | Paper III boundary semantics (delta patches + slicing) | Implement `WarpTickPatchV1` as a **delta patch** (canonical `ops` + conservative `in_slots`/`out_slots` over unversioned slots); define value-versioning *by interpretation* along a worldline (`ValueVersionId := (slot_id, tick_index)`), not embedded in the patch; upgrade commit hashing to **v2** so `commit_id` commits only to `(parents, state_root, patch_digest, policy_id, version)` and treats plan/decision/rewrites digests + receipts as diagnostics. | Paper III’s slice/holography results require a replayable boundary artifact; recipe patches bind replay to executor semantics and do not archive cleanly across languages or evolution. Unversioned slots keep patch hashes position-independent; SSA-style value versioning is recovered from patch position in `P`. Committing only to the patch delta prevents consensus from being coupled to scheduler/planner quirks. | Commit ids become “this transformation” (delta) rather than “this scheduling narrative”; slicing becomes trivial once `producer(slot@i)` is defined by patch position; planner/receipt metadata remains available for debugging without becoming consensus-critical. |
| 2025-12-29 | Paper II tick receipts: blocking causality | Extend `TickReceipt` to record a blocking-causality witness for `Rejected(FootprintConflict)` entries (indices of the applied candidates that blocked it, in canonical plan order); keep `decision_digest` encoding stable (digest commits only to accept/reject outcomes, not blocker metadata). | Paper II’s receipts are meant to explain *why* candidates were rejected and support deterministic debugging/provenance. Blocker indices provide a minimal poset edge list without destabilizing commit hashes as explanations evolve. | Tools/tests can surface “blocked by …” explanations; receipts now carry poset edges for footprint conflicts; commit ids remain stable for identical accept/reject outcomes. |
| 2025-12-29 | warp-core follow-ups (#151/#152) | Remove “TODO-vibes” by making `policy_id` an explicit `Engine` parameter (default `POLICY_ID_NO_POLICY_V0`) and add a reverse edge index (`EdgeId -> from`) so tick patch replay no longer scans all edge buckets for `UpsertEdge`/migration. | `policy_id` is part of the deterministic boundary and must be configurable, not a hardcoded magic number; patch replay must scale beyond toy graphs. Maintaining the reverse index keeps replay `O(bucket_edges)` and avoids history-sensitive state roots caused by empty edge buckets. | Callers can set policy semantics explicitly; tick patch replay is no longer `O(total_edges)` per migrated edge; state hashing remains a function of graph content, not mutation history. |
| 2025-12-29 | warp-core follow-up: edge record equality | Derive `PartialEq, Eq` for `EdgeRecord` and remove the local `edge_record_eq` helper from tick patch diffing, switching to idiomatic `==`/`!=`. | Helper-based equality duplicates type semantics and can drift. Deriving equality makes record comparisons precise, portable, and single-source-of-truth. | Diffing code is smaller and less fragile; future `EdgeRecord` field changes will naturally participate in equality comparisons. |
| 2025-12-28 | AIΩN bridge doc + Paper II tick receipts | Promote the AIΩN Foundations bridge from `docs/notes/` into a canonical doc (`docs/aion-papers-bridge.md`, keeping a stub for historical links); implement `TickReceipt` + `Engine::commit_with_receipt` in `warp-core` and commit the receipt digest via `Snapshot.decision_digest` (encoding defined in `docs/spec-merkle-commit.md`). | The bridge is a long-lived architectural dependency and should not be buried in dated notes; Paper II tick receipts are required for deterministic debugging and provenance. Reusing `decision_digest` commits to accepted/rejected outcomes without changing the commit header shape. | A stable bridge doc is indexed in `docs/docs-index.md`; tools/tests can obtain receipts from `commit_with_receipt`. Commit ids now incorporate receipt outcomes whenever the candidate set is non-empty (empty receipts still use the canonical empty digest). |
| 2025-12-28 | Brand asset variants | Add `assets/echo-white-radial.svg`: an `echo-white.svg`-derived logo variant with a shared radial gradient fill (`#F5E6AD` center → `#F13C77` edges) and an interior stroke emulated via clipped stroke paths for broad SVG renderer support. | Provide a ready-to-use, style-forward logo asset while keeping the original `echo-white.svg` unchanged; prefer a clip-path “inner stroke” technique over `stroke-alignment` to avoid uneven renderer support. | Consumers can pick the original flat-white logo or the gradient+inner-stroke variant without changing code; the new SVG renders consistently in common SVG engines (rsvg/InkScape). |
| 2025-12-28 | Repo tour + onboarding refresh | Replace the root README with a reality-aligned overview, link Echo to the AIΩN Framework + the Foundations series papers, and add durable tour/bridge notes; fix `spec-merkle-commit` empty-digest semantics to match `warp-core`. | Keep onboarding and determinism specs consistent with the implemented engine contracts and the motivating research lineage; reduce future churn caused by doc drift. | New `README.md`, `docs/notes/project-tour-2025-12-28.md`, and `docs/notes/aion-papers-bridge.md` provide a single entry path; the commit digest spec now matches code behavior. |
Expand Down
7 changes: 7 additions & 0 deletions docs/execution-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,13 @@ This is Codex’s working map for building Echo. Update it relentlessly—each s

## Today’s Intent

> 2025-12-29 — Follow-up: `EdgeRecord` equality (COMPLETED)

- Goal: remove the ad-hoc `edge_record_eq` helper so `EdgeRecord` equality is defined by the type, not by duplicated helper logic in `tick_patch`.
- Scope: derive `PartialEq` + `Eq` on `EdgeRecord`; replace `edge_record_eq(a, b)` call sites with idiomatic `a == b`; delete the helper from `tick_patch.rs`.
- Exit criteria: `cargo test --workspace` + `cargo clippy --workspace --all-targets -- -D warnings -D missing_docs` green.
- Evidence: `EdgeRecord` derives `PartialEq, Eq` and `tick_patch` uses `==` directly; helper removed; tests/clippy rerun green.

> 2025-12-29 — Follow-ups: policy_id plumbing + edge replay index (COMPLETED)

- Goal: eliminate “TODO-vibes” follow-ups by making policy id handling explicit/configurable and by removing the O(total_edges) edge scan from tick patch replay.
Expand Down