@@ -67,6 +67,35 @@ fn hex8(root: &[u8; 32]) -> String {
6767 . collect :: < String > ( )
6868 + "..."
6969}
70+ // --- pipeline visuals (box-drawing tree, respects NO_COLOR) ---
71+ fn commas ( n : usize ) -> String {
72+ let s = n. to_string ( ) ;
73+ let b = s. as_bytes ( ) ;
74+ let mut out = String :: new ( ) ;
75+ for ( i, c) in b. iter ( ) . enumerate ( ) {
76+ if i > 0 && ( b. len ( ) - i) % 3 == 0 {
77+ out. push ( ',' ) ;
78+ }
79+ out. push ( * c as char ) ;
80+ }
81+ out
82+ }
83+ fn stage ( n : u32 , total : u32 , name : & str , sub : & str ) {
84+ println ! (
85+ "\n {} {} {}" ,
86+ paint( "35;1" , & format!( "[stage {n}/{total}]" ) ) ,
87+ paint( "1" , name) ,
88+ dim( sub)
89+ ) ;
90+ }
91+ // tree-branch connector: mid (├) for inner rows, end (└) for the last
92+ fn li ( last : bool ) -> String {
93+ dim ( if last { " \u{2514} " } else { " \u{251c} " } )
94+ }
95+ // continuation line under a branch (│)
96+ fn cont ( ) -> String {
97+ dim ( " \u{2502} " )
98+ }
7099fn next_latent ( next : & [ i64 ] ) -> Vec < i64 > {
71100 next. iter ( ) . skip ( ( SEQ - 1 ) * DIM ) . copied ( ) . collect ( )
72101}
@@ -501,80 +530,108 @@ fn main() {
501530 "{}" ,
502531 paint(
503532 "36;1" ,
504- "ProvableWorldModel: full le-wm predictor into prove_block \n "
533+ "ProvableWorldModel commit-and-audit over the le-wm world model "
505534 )
506535 ) ;
507- println ! ( "{} {} {}" , tag( "prover" ) , paint( "1" , "model " ) , label) ;
536+ println ! (
537+ "{}" ,
538+ dim( " pipeline checkpoint -> quantize -> commit -> encode -> run -> prove -> verify" )
539+ ) ;
540+
541+ // --- stage 1: export (offline, trusted) ---
542+ stage ( 1 , 4 , "EXPORT" , "offline, trusted" ) ;
543+ println ! ( "{} model {}" , li( false ) , label) ;
508544 if is_real {
509545 println ! (
510- "{} source quentinll/lewm-pusht {}" ,
511- tag ( "prover" ) ,
546+ "{} source quentinll/lewm-pusht {}" ,
547+ li ( false ) ,
512548 dim( "(Hugging Face, MIT), int8-quantized V0 subgraph" )
513549 ) ;
514550 }
515551 println ! (
516- "{} config dim={}, history={}, heads={}, dim_head={}, mlp={}, depth={} {}" ,
517- tag ( "prover" ) ,
552+ "{} config dim={}, history={}, heads={}, dim_head={}, mlp={}, depth={}" ,
553+ li ( false ) ,
518554 dims. d,
519555 dims. s,
520556 dims. h,
521557 dims. dh,
522558 dims. mlp,
523- dims. depth,
524- dim( "(self-attention + AdaLN + GELU FFN + residuals)" )
559+ dims. depth
525560 ) ;
526561 println ! (
527- "{} weights {} tensors, {} int8 params" ,
528- tag ( "prover" ) ,
562+ "{} weights {} tensors, {} int8 params" ,
563+ li ( false ) ,
529564 weights. len( ) ,
530- params
565+ commas ( params)
531566 ) ;
532567 println ! (
533- "{} inputs z_history [{}x{}], action embedding [{}x{}]" ,
534- tag ( "prover" ) ,
568+ "{} inputs z_history [{}x{}], action embedding [{}x{}]" ,
569+ li ( false ) ,
535570 dims. s,
536571 dims. d,
537572 dims. s,
538573 dims. d
539574 ) ;
540- println ! ( "{} source {}" , tag( "prover" ) , dim( & input_source) ) ;
575+ println ! ( "{} source {}" , li( true ) , dim( & input_source) ) ;
576+
577+ // --- stage 2: prove (exact integer inference + commitment) ---
578+ stage ( 2 , 4 , "PROVE" , "exact integer inference + commitment" ) ;
541579 println ! (
542- "{} graph {} ops over the named-buffer block DAG" ,
543- tag ( "prover" ) ,
544- proven. ops. len( )
580+ "{} graph {} ops over the named-buffer block DAG" ,
581+ li ( false ) ,
582+ commas ( proven. ops. len( ) )
545583 ) ;
546584 println ! (
547- "{} infer exact integer forward pass in {}" ,
548- tag( "prover" ) ,
585+ "{} {}" ,
586+ cont( ) ,
587+ dim( "per block: AdaLN-zero, 16-head attention, GELU FFN, gated residuals" )
588+ ) ;
589+ println ! (
590+ "{} infer exact integer forward pass in {}" ,
591+ li( false ) ,
549592 ok( & ms( infer) )
550593 ) ;
551594 println ! (
552- "{} z_next[..6] {:?} {}" ,
553- tag ( "prover" ) ,
595+ "{} z_next {:?} {}" ,
596+ li ( true ) ,
554597 & out[ ..out. len( ) . min( 6 ) ] ,
555598 dim( "(predicted next-latent head)" )
556599 ) ;
600+
601+ // --- stage 3: verify (no_std, float-free) ---
602+ stage ( 3 , 4 , "VERIFY" , "no_std, float-free" ) ;
557603 println ! (
558- "{} challenge replayed the Fiat-Shamir transcript, derived the Freivalds r" ,
559- tag ( "verifier" )
604+ "{} challenge replayed the Fiat-Shamir transcript, derived the Freivalds r" ,
605+ li ( false )
560606 ) ;
561607 println ! (
562- "{} checks Freivalds {} on every projection; exact recompute of attention, softmax, GELU, LayerNorm, residuals " ,
563- tag ( "verifier" ) ,
608+ "{} checks Freivalds {} on every projection" ,
609+ li ( false ) ,
564610 dim( "v\u{00b7} x == r\u{00b7} z" )
565611 ) ;
612+ println ! (
613+ "{} {}" ,
614+ cont( ) ,
615+ dim( "exact recompute of attention, softmax, GELU, LayerNorm, residuals" )
616+ ) ;
566617 match res {
567- Ok ( _) => println ! ( "{} {} in {}" , tag ( "verifier" ) , ok( "ACCEPT" ) , ms( vtime) ) ,
618+ Ok ( _) => println ! ( "{} verdict {} in {}" , li ( true ) , ok( "ACCEPT" ) , ms( vtime) ) ,
568619 Err ( e) => {
569- println ! ( "{} {} {e:?}" , tag ( "verifier" ) , bad( "REJECT" ) ) ;
620+ println ! ( "{} verdict {} {e:?}" , li ( true ) , bad( "REJECT" ) ) ;
570621 exit ( 1 ) ;
571622 }
572623 }
624+
625+ // --- stage 4: tamper (forge one matmul output) ---
626+ stage ( 4 , 4 , "TAMPER" , "forge one matmul output" ) ;
573627 match reject {
574628 Some ( e) => println ! (
575- "{} tamper forged matmul op {forged_op:?} -> {} {e}" ,
576- tag( "verifier" ) ,
577- bad( "REJECT" )
629+ "{} forged matmul op {} -> {} {} {}" ,
630+ li( true ) ,
631+ forged_op. map( |i| i. to_string( ) ) . unwrap_or_default( ) ,
632+ bad( "REJECT" ) ,
633+ e,
634+ dim( "(caught)" )
578635 ) ,
579636 None => {
580637 eprintln ! ( "tamper undetected (bug)" ) ;
0 commit comments