Skip to content

Commit 8bfc933

Browse files
authored
Merge pull request #602 from AdaWorldAPI/claude/jirak-math-theorems-harvest-rfii13
Seal the capstone OUT/IN-leg public surface + mixed-trigger e2e test
2 parents f0ee631 + 266ff88 commit 8bfc933

3 files changed

Lines changed: 50 additions & 1 deletion

File tree

.claude/board/AGENT_LOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 2026-06-23 (cont.³⁷) — sealed the capstone OUT/IN-leg public surface + end-to-end mixed-trigger test
2+
3+
**Main thread (Opus), self-directed ("what do you want").** Disk reality: ~11 GB free vs ~14-18 GB for the lance/datafusion build (ENOSPC'd twice) → S3-live is **disk-walled in this env**, not permission-gated; its home is the symbiont golden-image harness (already pulls lance-7). So took the feasible completion: made the shipped OUT/IN-leg drivers an actual crate surface. `lance-graph-supervisor/lib.rs` now re-exports `deliver_kanban_step`, `drive_mul_advance`, `drive_scheduled_tick`, `drive_version_tick`, `run_to_absorbing`, `KanbanRouteError` (were module-path-only; only `KanbanActor`/`KanbanMsg` were public) — the surface the live S3 consumer will `use` when it lands. **+1 test (15 total green):** `mixed_triggers_compose_on_one_owner_s2_gate_then_s3_ticks` — the capstone integration: the S2 MUL gate takes the first Rubicon step (Flow qualia → Planning→CognitiveWork) and S3 version ticks (`run_to_absorbing`) carry the rest to Commit, proving the two DIFFERENT triggers compose on ONE mailbox-as-owner (no panic, no spurious rejection, lands absorbing). clippy + fmt clean; light build. The actor-side capstone is now a sealed, consumable surface; only the disk-gated live wiring (S3 `versions()` source, S2 shader-driver loop) remains, to be done where the heavy build fits. Rides a PR on jirak.
14
## 2026-06-21 (cont.³⁶) — run-NaN COGNITIVE half PROVEN green (#580 handoff) + fixed the ogar_codebook drift that blocked it
25

36
**Main thread (Opus), cognitive-compilation session.** Picked up the cognitive

crates/lance-graph-supervisor/src/kanban_actor.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,4 +824,47 @@ mod tests {
824824
actor.stop(None);
825825
handle.await.expect("actor join");
826826
}
827+
828+
#[tokio::test]
829+
async fn mixed_triggers_compose_on_one_owner_s2_gate_then_s3_ticks() {
830+
// The capstone integration: the S2 MUL gate and the S3 version tick are
831+
// DIFFERENT triggers driving the SAME owner. Here the first Rubicon step
832+
// is taken by a MUL gate (Flow qualia → Planning→CognitiveWork) and the
833+
// rest by version ticks (run_to_absorbing → …→Commit). Both compose
834+
// cleanly on one mailbox-as-owner: no panic, no spurious rejection, lands
835+
// absorbing.
836+
let (actor, handle) = Actor::spawn(
837+
None,
838+
KanbanActor::<TestBoard>::default(),
839+
board(KanbanColumn::Planning),
840+
)
841+
.await
842+
.expect("spawn");
843+
844+
// S2: the MUL gate takes the first step (Flow qualia + mantissa>0).
845+
let flow_q = QualiaI4_16D(0).with(3, 4).with(14, 3).with(9, 4).with(1, 2);
846+
let gated = drive_mul_advance(&actor, flow_q, 4)
847+
.await
848+
.expect("gate driver ok")
849+
.expect("Flow advances");
850+
assert_eq!(gated.from, KanbanColumn::Planning);
851+
assert_eq!(gated.to, KanbanColumn::CognitiveWork);
852+
853+
// S3: version ticks carry the rest of the arc to the absorbing column.
854+
let tail = run_to_absorbing(&actor, 16)
855+
.await
856+
.expect("ticks reach absorbing");
857+
let arc: Vec<_> = tail.iter().map(|m| m.to).collect();
858+
assert_eq!(
859+
arc,
860+
vec![KanbanColumn::Evaluation, KanbanColumn::Commit],
861+
"S3 ticks resume from where the S2 gate left the owner"
862+
);
863+
864+
let phase = ractor::call!(actor, |reply| KanbanMsg::Phase { reply }).expect("rpc");
865+
assert_eq!(phase, KanbanColumn::Commit);
866+
867+
actor.stop(None);
868+
handle.await.expect("actor join");
869+
}
827870
}

crates/lance-graph-supervisor/src/lib.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ pub mod actors;
6464
pub mod kanban_actor;
6565

6666
#[cfg(feature = "supervisor")]
67-
pub use kanban_actor::{KanbanActor, KanbanMsg};
67+
pub use kanban_actor::{
68+
deliver_kanban_step, drive_mul_advance, drive_scheduled_tick, drive_version_tick,
69+
run_to_absorbing, KanbanActor, KanbanMsg, KanbanRouteError,
70+
};
6871

6972
#[cfg(feature = "supervisor")]
7073
pub use supervisor::{

0 commit comments

Comments
 (0)