Skip to content

board: storage portability — Quack owns query semantics, the cycle seal owns durable commit, storage supplies capabilities - #1330

Merged
AdaWorldAPI merged 3 commits into
mainfrom
ccr-0455e606-wmtsor
Oct 5, 2026
Merged

AdaWorldAPI merged 3 commits into
mainfrom
ccr-0455e606-wmtsor

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Oct 5, 2026 •

Copy link
Copy Markdown
Owner

This is an architecture-only follow-up to #1328, which had already merged and so could not be amended. One board entry; no code, no trait, no backend. Alpha, Rubicon and revision.rs are unchanged and not redefined.

Rubicon commits intent. Revision judges the result. The cycle seal commits state.

Planning
    ↓  Rubicon: intent becomes action
CognitiveWork / Action
    ↓
transient execution: folds + Alpha overlay (transient, discardable, whole-row attention claims)
    ↓
Evaluation / revision.rs — epistemic judgment, performs no write
    ├─ NoIncrease, or IncreaseEligible with docket incomplete → Plan → Planning (re-deliberate)
    ├─ Suspend → held in Evaluation (tension open)
    └─ IncreaseEligible + counterfactual Necessary → Commit (accepted)
           ↓  0..many casts (BatchWriter::cast)
cycle seal: DetachedCycleBatch::freeze → one WAL write per cycle — performs no epistemic evaluation
    ↓
durable net change: today a full 512-byte image per dirty row; future candidate: SparseDelta
    ↓
backend mapping: existing seam WalSink::commit_cycle → LanceCycleWriter

Storage portability

  1. Quack's resolved numeric Query is independent of physical storage. Storage format is replaceable; query semantics are not.
  2. Backend capability resolution happens once, before execution, never per row. A backend never approximates Quack semantics. Each part of a query runs exactly on the backend, or locally over the numeric lanes it supplies, or binding fails before execution.
  3. 64k parallel work, Kanban and thought scheduling are not backend requirements.
  4. Transient work is amortized into durable transitions at persist_sink's cycle seal: many casts → one WAL write → one DatasetVersion. Rubicon, in current code, is the pre-execution Planning → CognitiveWork crossing, and revision is the post-action judgment. Neither is the write.
  5. Alpha is not a storage contract. It is a discardable transient overlay: whole-row claims carrying only an attention stamp (no payload, no field data), tracked by a population bitset. A future durable sparse-change contract, written SparseDelta here as architecture vocabulary only, could represent changed coordinates over immutable semantic identity and support merge-on-read. Its representation is unresolved and nothing is implemented.
  6. (cycle, batch_hash) is today's semantic generation and DatasetVersion is physical history; they are deliberately distinct. A future NodeGuid × Version lineage extends this and never aliases backend snapshot, file or sequence ids.
  7. Lance/MOCA, RocksDB, Iceberg, DuckDB and S3 are plausible adapters with different capabilities, not promised equivalent implementations, and none is "Alpha storage".
  8. S3's minimal useful mapping: one immutable commit object per cycle, plus an optional manifest/generation pointer.
  9. How a sparse change maps onto Iceberg remains an explicit later experiment.
  10. DuckDB can also act as a differential semantic oracle for Quack (quack/tests/duckdb_differential.rs).

Source audit

  • revision.rs is pure policy.
    • GadamerRevision::revise produces a RevisionDelta.
    • RevisionVerdict::is_acceptable() holds only for IncreaseEligible with counterfactual Necessary.
    • Its output types deliberately stop before any write.
    • The verdict is routed by KanbanColumn::advance_on_revision: accepted → Commit; eligible-but-unattacked or NoIncrease → Plan; Suspend → hold. Revision never prunes.
    • Neither function has a production caller; only tests and an example call them.
  • Gap, recorded and not fixed: today's seal is not gated on revision acceptance.
    • A cycle seals whatever artifact casts it holds.
    • Kanban moves, including Evaluation → Commit, ride along in SweepSlot::paired_move and are applied after the seal.
    • The Commit column's "calcify" step is itself declared, not implemented.
  • Field-level dirtiness is tracked nowhere. The write path is per row: SweepSlot.row, with one final image per dirty row per cycle. The only attribute-level change model is dir-sim's in-memory Overlay / Change::SetAttribute.
  • Existing seams:
    • read side: quack::lower, mask-risc validate, Activation::resolve_for_context;
    • write side: WalSink, implemented by LanceCycleWriter.
  • Smallest real seam for a future SparseDelta: DetachedCycleBatch::freeze → WalSink::commit_cycle. Changed coordinates are derivable there by comparing each row's final image against CycleFrame.base_version. That comparison does not exist today.

Not here

No RocksDB, Iceberg, DuckDB or S3 backend, no Storage trait or capability enum, and no SparseDelta type. Alpha, Rubicon, revision.rs, the split-tunnel writer and the cycle writer are unchanged. Revision does not persist, and the seal does not evaluate. No performance claim.

🤖 Generated with Claude Code

https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg

Summary by CodeRabbit

  • Documentation
    • Added an architecture and source audit documenting the query contract, cycle write path, and current and proposed storage backend capabilities.
    • Added the audit to the documentation index.

… durable commit, storage supplies capabilities

Architecture-only follow-up to #1328. Records the read boundary (a backend
binds once before execution and never approximates Quack semantics), the
write boundary (Rubicon amortizes transient folds into one durable sparse
commit; 64k parallelism and Kanban are never storage requirements),
NodeGuid × Version vs backend physical history, the existing seams that
already bind before execution (quack::lower, mask-risc validate,
Activation::resolve_for_context), and non-binding backend mappings for
Lance/MOCA, RocksDB, Iceberg, DuckDB and S3.

Flags an open conflict: the proposed durable field-granular merge-on-read
write is not what contract::alpha implements (row-granular claims,
unclaimed = None never base, discardable). Not renamed or resolved here.

No code, no trait, no backend.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg
@coderabbitai

coderabbitai Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: 7d1ed0e1-0e13-4957-a291-fa8640ca6950
📥 Commits

Reviewing files that changed from the base of the PR and between 21d07e3 and 9b29708.

📒 Files selected for processing (2)
  • .claude/board/entries/2026-10-05-quack-storage-portability.md
  • .claude/board/entries/README.md

Included review availability: This review used your included allowance. 1 included review remains after this review. Your included PR review attempts over the past 7 days set your current allowance at 2 reviews per hour.


📝 Walkthrough

Walkthrough

The pull request adds an architecture and source-audit document about Quack’s query contract, current cycle-based persistence path, and possible backend mappings. It also adds the document to the board entries index. No storage implementation changes are included.

Changes

Quack Storage Portability

Layer / File(s) Summary
Portable query boundary
.claude/board/entries/2026-10-05-quack-storage-portability.md, .claude/board/entries/README.md
The document defines Quack’s query semantics, capability binding, and lifecycle boundaries. The index adds the entry.
Current storage path
.claude/board/entries/2026-10-05-quack-storage-portability.md
The document describes Alpha and Rubicon roles, cycle sealing, full-row persistence, version distinctions, and recovery from sealed landings.
Proposed mappings and scope
.claude/board/entries/2026-10-05-quack-storage-portability.md
The document describes SparseDelta and several backend mappings as proposed or unbuilt, and lists scope exclusions.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Other

Suggested reviewers: claude

Merge Risk: ⚪ Minimal · up to 9b297

This change adds and indexes an architecture document, with no reported storage implementation changes or actionable merge-blocking risk.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: it separates Quack query semantics, durable commits, and storage capabilities.
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

A rabbit reads the query lanes,
And checks where each cycle lands.
Full rows rest in sealed-up stores,
New backend maps remain in scores.
Then hops away with tidy plans.

Comment @coderabbitai help to get the list of available commands.

@cursor

cursor Bot commented Oct 5, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: bb99c574-48cf-4ac1-8832-826eb9d371f9)

…nchanged, durable boundary is the cycle seal

Alpha is authoritative and not redefined: a discardable transient overlay
of whole-row attention claims (stamp only, no payload, no field data).
Rubicon in code is the Planning -> CognitiveWork phase crossing, not the
durable write; the amortizing write boundary is persist_sink's cycle seal
(one WAL write per cycle) behind the existing WalSink seam, implemented by
LanceCycleWriter, at row granularity. Field-level dirtiness is tracked
nowhere; SparseDelta is architecture vocabulary only, derivable at
DetachedCycleBatch::freeze by comparing final images against base_version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg
@AdaWorldAPI AdaWorldAPI changed the title board: storage portability — Quack owns query semantics, Rubicon owns durable commit, storage supplies capabilities board: storage portability — Quack owns query semantics, the cycle seal owns durable commit, storage supplies capabilities Oct 5, 2026
@AdaWorldAPI
AdaWorldAPI marked this pull request as ready for review October 5, 2026 06:38
…tion and the cycle seal

Rubicon commits intent, revision judges the result, the cycle seal commits
state. Records advance_on_revision's routing (accepted -> Commit; eligible
without counterfactual or NoIncrease -> Plan -> Planning; Suspend holds),
that revision.rs and advance_on_revision have no production caller, and
that today's seal is driven by artifact casts with Kanban moves applied
post-seal, so it is not gated on revision acceptance.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg
@AdaWorldAPI
AdaWorldAPI merged commit 97a3610 into main Oct 5, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants