Skip to content

docs(soa): sync migration plan with cycle-ownership architecture (repo-in-sync)#537

Merged
AdaWorldAPI merged 6 commits into
mainfrom
claude/soa-cycle-ownership-sync
Jun 18, 2026
Merged

docs(soa): sync migration plan with cycle-ownership architecture (repo-in-sync)#537
AdaWorldAPI merged 6 commits into
mainfrom
claude/soa-cycle-ownership-sync

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Jun 18, 2026

Copy link
Copy Markdown
Owner

Summary

Repo-in-sync: ties the operator-ratified BindSpace→SoA architecture into the migration plan before the code wiring (which is 5+3-gated). Docs only — no source/test change.

After the AoS→SoA rotation (done) + the F32 bit-exact anchor (#535), the remaining migration is bounded by four ratified rules, now captured in the plan (ERRATA ADDENDUM 2026-06-18c) + EPIPHANIES.md E-SOA-CYCLE-OWNERSHIP:

  1. Cycle ownership is per-mailbox + per-cycle, LE-contract-enforced on the tenant and the envelope. No cycle-blind write; nothing buffers a stale/older mailbox. The gap today: only consume_firing is cycle-aware — the per-row setters (set_content/qualia/edge/meta/temporal) and BackingStoreWrite are cycle-blind. Target: every write carries/checks current_cycle (SoaEnvelope::cycle() / current_cycle / last_active_cycle). This is the next code deliverable (5+3-gated).
  2. Multi-mailbox interlace is the target; backing()'s debug_assert(mailboxes.len() ≤ 1) is W5-transitional, not the design. 16k mailboxes ≈ 8 MB (512 B each), 16M ≈ 8 GB — linear. No open mailbox goes inaccessible at scale because addressing is the canonical GUID prefix-route (classid·HEEL·HIP·TWIG → ~1024 L3-resident prefix tables; the trie binds the prefix, masked-load the basin-local tail).
  3. Consumer fork — not every consumer rotates into the one SoA. SoA-fits → rotate onto the SoA columns. Doesn't-fit → a customized OGAR-driven classid → schema (per-class ClassView/Template, the Core-First path refactor(odoo): Core-first correction — structural facts home in the typed Core, harvest subordinate #530/feat(ontology): virtually_overrides as a computed ClassView relation (wishlist last item) #533). The ~10 live BindSpace consumers (cypher_bridge, sentence_crystal, fabric, learning/{scm,feedback}, spo/merkle, callcenter/transcode, planner/elevation) split along this line; they migrate at D-MBX-12 (gated on D-MBX-7 + D-MBX-9-surrealdb). Dissolves the "all nine migrate to one SoA" misframe.
  4. Layering down: at the consumer/persistence boundary, OGAR (canonical node) + Template (ClassView) + Schema-version (envelope LAYOUT_VERSION, currently 2) become mandatory.

Also recorded that #535 closed the --features with-engine break + the i4-codebook_index correctness risk via the F32 anchor.

Next

The per-cycle write-awareness contract (cycle-stamped/gated writes; no cycle-blind setter) — planned + 5+3 before code.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi


Generated by Claude Code

Summary by CodeRabbit

  • Documentation
    • Updated architectural documentation with clarifications on cycle-ownership rules and multi-mailbox interleaving approach.
    • Added migration-plan errata and status updates to align internal technical references.

…o-in-sync)

Operator-ratified architecture for the remaining BindSpace->SoA migration, tied
into the plan before the code wiring's 5+3. Docs only, no source/test change.

- Cycle ownership is per-mailbox + per-cycle, LE-contract-enforced on the tenant
  AND the envelope. The gap: per-row setters + BackingStoreWrite are cycle-blind
  (only consume_firing is cycle-aware). Target: every write carries/checks
  current_cycle. This is the next code deliverable (5+3-gated).
- Multi-mailbox interlace is the target; backing()'s debug_assert(<=1) is
  W5-transitional. 16k mailboxes = 8MB, 16M = 8GB, linear; GUID-prefix-routed
  (classid.HEEL.HIP.TWIG -> ~1024 L3-resident prefix tables) so none goes
  inaccessible at scale.
- Consumer fork: SoA-fit -> rotate onto SoA columns; doesn't-fit -> OGAR-driven
  classid->schema (ClassView/Template, Core-First #530/#533). Dissolves the
  'all nine consumers migrate to one SoA' misframe.
- OGAR + Template + Schema-version mandatory at the consumer/persistence boundary.
- Noted #535 closed the with-engine break + the i4-codebook_index risk (F32 anchor).

Plan ERRATA ADDENDUM 2026-06-18c; EPIPHANIES E-SOA-CYCLE-OWNERSHIP; AGENT_LOG entry.

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

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@AdaWorldAPI, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 22 minutes and 34 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7a12d6d5-bedd-4410-9146-272694e1fba0

📥 Commits

Reviewing files that changed from the base of the PR and between 64b9bba and d0f1507.

📒 Files selected for processing (5)
  • .claude/board/AGENT_LOG.md
  • .claude/board/INTEGRATION_PLANS.md
  • .claude/plans/bindspace-singleton-to-mailbox-soa-v1.md
  • .claude/plans/mailbox-belief-update-and-substrate-test-v1.md
  • .claude/plans/mailbox-cycle-aware-write-contract-v1.md
📝 Walkthrough

Walkthrough

Three .claude/ documentation files receive prepended entries dated 2026-06-18 that record the E-SOA-CYCLE-OWNERSHIP architecture sync: the agent log notes the docs-only operation, the epiphanies board defines cycle ownership and migration rules, and the migration plan adds an errata addendum superseding prior gating language. No source or test files are changed.

Changes

E-SOA-CYCLE-OWNERSHIP Architecture Sync (Docs Only)

Layer / File(s) Summary
Cycle-ownership errata across agent log, epiphanies, and migration plan
.claude/board/AGENT_LOG.md, .claude/board/EPIPHANIES.md, .claude/plans/bindspace-singleton-to-mailbox-soa-v1.md
AGENT_LOG prepends a docs-only repo-sync entry under E-SOA-CYCLE-OWNERSHIP; EPIPHANIES adds the 2026-06-18 entry defining per-mailbox/per-cycle LE contract rules, cycle-blind write gaps (BackingStoreWrite, row setters), multi-mailbox interlace target, consumer fork between SoA rotation and OGAR classid → schema, and mandatory OGAR+Template+Schema-version layering; migration plan inserts an errata addendum superseding prior gating language and recording shipped items and S1/S2/S3 sequencing reframe.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related PRs

  • AdaWorldAPI/lance-graph#418: Extends the same bindspace-singleton-to-mailbox-soa-v1 migration spec with E-SOA-CYCLE-OWNERSHIP errata and a corresponding epiphanies update — directly the predecessor of this sync.
  • AdaWorldAPI/lance-graph#487: Introduced the consume_firing()-based MailboxSoA cycle-awareness and last_active_cycle contract that this PR's epiphany entry references as the only currently cycle-aware path.

Poem

🐇 No code to bite, no tests to chew,
Just docs aligned and errata new.
Per-mailbox, per-cycle, the contract stands clear,
OGAR and Schema-version must always appear.
Hop along, migration — the path is in sight! 🌿

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main change: a documentation update synchronizing the migration plan with the cycle-ownership architecture.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 64b9bba8ba

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

>
> **ERRATA ADDENDUM (2026-06-18c — architecture sync, `E-SOA-CYCLE-OWNERSHIP`):** #535 shipped the `--features with-engine` fix + the **F32-17D bit-exact qualia tenant** (BindSpace-singleton-only, `#[cfg(with-engine)]`) — the migration's single exactness anchor — closing the i4-`codebook_index` risk noted just above. Converged architecture for the remaining migration (operator-ratified this session):
> 1. **Cycle ownership is per-mailbox + per-cycle, LE-contract-enforced.** No cycle-blind write; nothing buffers a stale/older mailbox. Today only `consume_firing` is cycle-aware — the per-row setters (`set_content/qualia/edge/meta/temporal`) **and `BackingStoreWrite`** are cycle-blind: that is THE gap. Target: every write carries/checks `current_cycle`, byte-explicit in the **tenant + envelope** LE contract (`SoaEnvelope::cycle()` / `current_cycle` / `last_active_cycle`). **This is the next code deliverable — 5+3-gated before code.**
> 2. **Multi-mailbox interlace is the target; `backing()`'s `debug_assert(mailboxes.len() ≤ 1)` is W5-transitional, NOT the design.** ~16k open mailboxes in parallel = ~8 MB (512 B each); 16M = ~8 GB — linear and trivial ("so what"). No open mailbox goes inaccessible at scale: addressing is the **canonical GUID prefix-route** (classid·HEEL·HIP·TWIG cascade → ~1024 prefix tables L3-resident; the trie binds the prefix, masked-load the basin-local tail). Per-cycle discipline is per-mailbox (each owns its `current_cycle`); interlacing is expected.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Correct the multi-mailbox memory budget

If this is meant to describe the actual mailboxes registered by ShaderDriver, the estimate is off by four orders of magnitude: driver.rs stores HashMap<MailboxId, MailboxSoA<1024>>, and MailboxSoA::new allocates three N * WORDS_PER_FP u64 planes (content/topic/angle) with WORDS_PER_FP = 256, i.e. 3 × 1024 × 256 × 8 = 6,291,456 bytes per mailbox before other columns. So 16k open mailboxes would be about 96 GiB, not 8 MiB. Leaving this in the migration plan can lead W5 to remove the ≤1 guard under an impossible memory budget; please either adjust the scale or clarify that this refers to a future lightweight handle rather than MailboxSoA<1024>.

Useful? React with 👍 / 👎.

claude added 5 commits June 18, 2026 10:57
Codex #537-P2: the budget conflated the 512-byte canonical node with
MailboxSoA<1024> (a fixed 1024-row arena ~6 MiB each). 16k of the arena
type would be ~96 GiB, not 8 MiB. Clarify:

- 8 MiB / 8 GiB figures are node-granular (512 B node = key 128b + value
  3968b); 16k nodes -> ~8 MiB, 16M nodes -> ~8 GiB.
- MailboxSoA<1024> is the transitional default, never the at-scale
  design; a mailbox at scale is sized to its thought (N~=1) or a
  lightweight handle into a shared arena.
- 16k-mailbox batch writes amortize against the ~1024 L3-resident prefix
  tables (read once, reused across the batch -> per-mailbox routing -> O(1)).
- temporal.rs is the named batch-write de-interlacer (HLC tick is the
  de-interlace key; combs multi-producer batches into one (mailbox,cycle)
  lane before it touches a row).

This prevents W5 from removing the <=1 guard under an impossible budget.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
Per operator framing:
- envelope = one 4096-bit node = ~500 B (terminology aligned).
- 16k envelopes ~= 8 MB is the HOT per-basin working set (L2/L3-friendly);
  x ~1024 prefix tables = 16M envelopes ~= 8 GB is the full COLD space
  (DRAM, prefix tables L3-resident). Decomposes the prior flat figure.
- Deferred (NOT now): mailboxes run mostly half-full, so a future pass can
  halve the envelope (4096->2048 bits, ~500->~256 B) AFTER the working set
  is proven -- eliminate/consolidate what works first, then shrink.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
…aconnectivity)

Operator sequencing note: "now" scale = get per-mailbox cycle ownership
correct (foundation). "later" scale opens two independent axes:
(a) quantity (16k->16M envelopes, linear) and (b) metaconnectivity
(BNN field perturbation / cross-mailbox meta-edges -- the OGAR
bipolar-phase pyramid, Walsh-Hadamard on VSA). Neither is in scope
until the cycle-aware write foundation lands.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
The next code deliverable named by E-SOA-CYCLE-OWNERSHIP rule 1: make
every SoA write carry/check its cycle (no cycle-blind setter, no stale
overwrite). Drafted the plan and ran the operator-mandated 5+3 (5
builders + 3 brutal critics); folded all findings:

Resolved OQs: A=two stamps (last_write_cycle:[u32;N]); B=NO version bump
(reuse current_cycle/SoaEnvelope::cycle); C=Aware-buffer (WriteDisposition);
D=infallible WriteOutcome{Accepted,Stale,Future}; E=S2.5 pre-S3.

P0 fixes: de-interlace is ADDRESSING (GUID identity tail), not
planner-routing -- temporal.rs write-sink was fiction + unreachable
under the feature gate; stale handling is LOCAL. Singleton arm is
cycle-blind-by-construction (gate is Mailbox-only until W7).

P1 fixes: wrap-aware gate (wrapping_sub+half-range); setters stay
pub+doc(hidden) (pub(crate) breaks tests/w2_differential.rs);
last_write_cycle+identity into reset_row+field-isolation matrix same
commit; no-production-blind-path guard same commit; new identity:u32
spawn pointer (don't overload mailbox_id). Cold TS+kanban stay
Lance-native (lancedb 0.30 / lance 7).

Board hygiene: INTEGRATION_PLANS + AGENT_LOG prepended same commit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
…, S2.5b)

"What did I learn" = the NARS-revision delta, exactly -- a DERIVED read
of CausalEdge64 (belief_delta() method, no new column for single-step;
multi-cycle arc = queued D-MBX-A3). Council P0: net delta-<f,c> is LOSSY
(averaging hides revision-vs-contradiction-commit) -- carry signed
residual (dw+,dw-) + regime tag + qualia delta, reuse support/dissonance.
Accumulates into a per-mailbox competence self-model.

Two-axis substrate test:
- Axis 1 THROUGHPUT "16M sudoku in 3.4 min" = exact-oracle constraint
  workload, certifies speed+correctness. NOT Weyl/spectral: both math
  critics graded Sudoku<->edge-Weyl [S] RHYME (20-regular degenerate
  spectrum is the OPPOSITE of phi-Weyl degeneracy-breaking). Drop the
  Weyl label; state it as throughput.
- Axis 2 LEARNING "thinking-style improved exponentially, ceiling x"
  = the belief-update learning curve; ceiling = phi-1 humility. Native
  integer metric. deepeval DROPPED (Python LLM-judge firewall breach;
  borrow only the trivial threshold pass/fail shape = cargo test).
They compose: Sudoku = workload, learning-curve = belief-update over it.
goban = secondary belief-state harness ([H] support/capture/ko; drop
influence leg). Slots S2.5b after the write contract.

Board hygiene: INTEGRATION_PLANS + AGENT_LOG prepended same commit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
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