HkG*1KqMpFSokDVkb5;4(Fy$;h&2Szth?vM3;Kj;j}ElZnw)H_VQ0BH+iN=DEE?d-|4}
z+9=6t?zHY!&)722D5UgW&E)ooZsbblwcb@wx?#d@8_8&>wZ5>SRf>)sS{htL$zIiL
z12R!;PUzycmr>ftqZ{|vt}y&C$4skc7*}BHz*1hY<1>iashoBw!r%>b5H*U>tDW<)oz$cA7m
zHF4A&6FXETc6;t|-JMqr+LOqQFeV8h)^of$q&!nK8!4xZ$Y!RH91!CMO9~z@48QWD
z#GpOKt5FzviMre4BNuuEnrk=hM*We?UFse?%_Qj2tQ-`aB;>1MMsoO
zVd3a(HNup|?jeqtgA3d|G2V1$sB&rfTiZ9I(j}vUS&xF|HH)`U$L)~ldg?k8X=Nf!
zC?vU1>g6!nAu&RYyA0X{Gxp9M49C}NQ5}BSZ-6ij2ME#~LwL{xO_M%V&Vt2h8XL53E&72Sb|}xmJX69hHs0E6
z5h7>dw>+ZnYkJB&7DkAzqW4zIhP80}SBAA_+O@~`4&D_~KuQYddv=W`1ztee5HWD;
z;+Tf90<=boiQmi-BQ;=)6D*35dJ4A-j0V!@yfu&_q_o^Nuw7qdJDNUi&0ycauUHd{
z0#k4?HH5#_D7#Ic*<~t&dvL%91;2GTiDwbyT3n_*dc3$`0je&ejcgH&km~I|9D44R
z+Xz!^&W|<>%|9O(3)?+MSMw0i-n_70NNaw2xHH^HVf2;ITaERJ?1|Psy=q(CQ%4nt
z9QXUwscVY49}X5x2isJepX3Kw1#FIY!`8q>^)lW2_zV(2G_*vFl7KQjkp?g1$T1eT
z(pDB+H2ipE+|QHqwsRzjJ>!{p)j@yJzG^?3qL}4f#~De%_@L(`HY&8|v04DKw|glL
zZXTc%pN{CHqsifY4b|S69kyApzVK-ceyS{CxV_5ac4XdDYqv^OvHcy_Y-erPxV>+A
z4#C(5$w5dt#=&b&`UJb)76vuT$k-`FAQ)%6LUlB_p%90c3pdvSks2ox7Fz=g5p^n(
z84j6XbrqBYmCm$HICov)q9f|E&_40ZW>C3_ump9k$eP!CEU1s(AE1!i{Y;qQ`(Mfu
zIt{RuFx6pZ$aE9k;A6`XN{g704zd+Z?p(bzbQ{lhai)vn*SSQ}eRCD4w815DUhZ*s
ztJJC>f27smb2KhGuHZ7-LHujx=?OWAl!e9pJ$vTwAAAH(j%!Q
zw-m8fS8NuIm;AQBqkvPpcF;lSofhmQ)xvN1ouA5J9V|kT*ZYUA{1pD^=QV2H=op9h
zMt-s@4qQrF^_x}nW>!4--DQTG2eB$=sxhxsTEvrQevTCqM=4C(7GqD-HlJs~6%&%1iz*ZrAG
zJXo|44x^2o8H%K5n3_$dL|K3}mh|lkCcA^jE1EYI&+F}&Y8#WyE=v5IUCOt&ssp@>_JN;dRl
zL=dyb*TATL1TiAAjh=H;EIU1_dnXW+Qz+DKH-2g~nJ%WYI_wj%=I!=SrRmLz%?2e`
z*d5xRCc|D5lv|~dTf{(XxMu)sSZJjMw`{;Q2!ms`iq_8eOSBv+)ni#ak
zT)<|o)9EYx`r0Dtk$5yE=5CDhLBCwF&Nw(oZ-gz^aU64_*10Q$FiZTXd6Q^7#W$}&
zZ63G61SoCPezq2xX%L|1nRe6D?0SpVLe|_uv+1GjCPPg--917drLxUX+>gP#_`nZd
zpB2R^6$xFb6NM^ecRqp&q2|Zpe{H!uH8E=NxZcBVXwdumq32veES(jl$9+?FjWTtf
zA1M!rH=LioBV$KOcuvN?%FyTy^4|}=>NvuZy@u2M>bLO3P*E%S#{#7WhG$L1E2E&F
z`?LsCOF^h;A=$!yTM8gnadxZ;i!oTTzAddw3YjkytrisP`K4#QLI%D)h(1Pvmk+9u
z)2=}30CsH=K$
znoacuH7L1@1u8UeF-NUkyKv#xI3O`aJYh!!E8lzT@EmPa){wC-QR0lX<}V1}Ap0
zUrrF}okJ`t(=*?gPTEmufE=~OeH
z2^*62FDAOd$lb%>SI+etGK@k9ek&VO2*1%b4C$GCkX3UcYVHYL@vk$~rHNg^g
zSH26Xdn)1^=2Al}%@c@a>yBtY@PpDWN}(5NcpW11?pkW$H}%LSS7Ln*^O9InH=sZA
zALJV3LbY(KV|7Wz|Do0p&E7XUittP6q!8`sx4|9@V2nV=|2Q@Ve3`O{_aUZwOiK{ToYA7kR#=>J)=V}P}l1$
zqDP;4EZ;?iuGA&LBbQ%^JUoIR_;~3cr^_NAE9u5}#8JM4iLb*UA5e_+U0$4c!>(i1
z`Q_k=M$1d0UQ|)>U~8wskY+N>rgH;>!vSf%j=D-_2-b
z7bLllO1W{(@O?F~%w6zV09BPIeoP8RtC%ZS3&I}tJAtoYDc9poDRxW_`76GfvmZkn
zsysf;g8wiy_eCNYRZJs;&Y)3_KnzkM1e=@7-$@io0i+Z9@)`*A7#FcHGrpPtl(R5W
zE;$L;*)l^qac$dlLqqU!>H5W9Wm28XAeIWmGN@!SEvhm*${odjZ=figYs
zr*A9_K7F_G5YR`tn+nkstOe3Oe)t&9ls(X+=;aW0bklq>wX%kd16j|-T-uKkQNO_MgC
z9VGCd&_-EXF-ti8T>ZKQ&mK5XG^Vm-lHyjuKjued4|w6Bo};(QhHO6$ib6#-({;i!
znqg)3SBU?3dN%_i3GuhWqh2qHzA@Kh9}|i(UxR2TDgXT1)+U~lqLX&y9aFm0DsaI5
zfWo#ee)y_dAhNL=w&gYIJ8Jx304pe}N40j=Z^?^8ZtkK+s#QLZz(iARlktAHDtG6J
z<9wY*pXtXExckFipG2<$bexGB!?Tnm*%~l*%K1PDB@?$_lTf5752;z;Q=HM
zJ+8`6{3Pi#wGAGbG{3yuA`l6{mMf
zprb?pdVrovyy2>NMLpEMRIi3eY3MGf{sTb7#Gx@Ug)a45BJ@=5@W|eMrHkkLet5>s
zutG+9gjq4dAc|Q~b009hL2R^l)R>ON0Q5oJ8!K1S`KucxThUXvhpN`>#CpPf<39eT
z-+7VK1+4;Skfaq~?7Ltcp912{Lmokg#dlH?hMAFPu=Mk*eW4CI%AxB7PRKS$aMx*0
z7OV>9ij;aiJ#HFFAQ6Io`C_fZ
zTp5`8kE3anHsMb{R)o8kkXKQJt5n{%bAZ+{&Tc#`-?*;<1(TMUP=-mKCR#%oN;9M8
z^>WSGF?=HeNNzT^g@}r)wuu4g06;Z5@2pq9=Im0eQPwayts57x9Q+tF&mejgRYU>V
zU@?k9>Vm65LyBLGpF<5d=op02V=FHLD
z720FXLL9Yrs5bc_iDxLH^0S+69eBV2`rZglAqVOnPgc_4-&&QG1EPOF{$w7P*Ko7$
zsxEP@s$E1-StZYa#0wB~@<9Rfe!*y)aa&u0lOM`D!{=Q9Q?rBN-AiqG4MH<~c^YB+(YXXD5LL7>7b_b!z>M7n>gKV*avf;*
z1j0KSS~Q5Rf7wN0%D)yxo6jcToaRFTAq&JX+>vm@rdsPuCSLGB%j>#5IR9ug)dvl=
z)X1^b;qqc7F+SA-Om@q}0z4)@^c48~f2kJG5;tyusV^5|vjWM1EYD%_4em6>T3BtHNMTm;`nnQR?)
zIc|Pu8s#sDZ9Q7*%j|JIbpW^|kk3;e)h!{^*|%4H@8Lj|Tk#o_BSH)tUDE`3BmHk<
z5Y4q@?>FG)Tev-sGIZWx2tXpvbDbcp@p))Ufpdvq3ZAhsv%$aicqql
zPDm=B6nPwL2(ny~hvdOd5`4bU+N}VS8lm>N%<~BxO=jP=t)ORS-kQA&q++v=+=Zh*
zjCSI(#bnJK+yBs36cM_8U!65<-?*EF+5FY5>!LVldyewrc|%m6&Fj#CnZ7Pw
zAk(qtOKW#&1c$%yX%5#_ogk6Q<dXCwXI&kb2-#g*%
zo91TLfEQ(QpfZn|(;^NFQ5BrV%>DE!Xm0g;8W2xDOLcV$lSn=93W0|yYp#rIoP2P&WBo^hJoG1^{5zXJbsh$+ftDNh7>ThT4DY{`uzF4?4;>c_;XbkPi*u
zlLEv+oCV>H%A*;Gg|?cf-qHOg;*lgyuDQN9?ypl+AbSY29(CaVKB#&9=D0$e_w$e0
zxALD(@Ap7r8K!RZ`qn+WeYxG|UOjg)-5uDzx;~I~6TLNwWm-Gf>tr}VVX1~>&P|ZT
zT%d8tX1v$palgw(a}X=83!x3`m-~X%%{Ct=2`&$PW4!DiNW5~iP#Pv$^Q8jwk#VZ<
z#b&G+_24pcBJnzvZ^Zf>+6<%Xrhqx8Vc1CT!hZRBSMNIplJbo@=G!|+uDy>=J!^Ow
z#pahI!1AQ?73Mvoy_Sd@K$$pCa<=pN*qoJOJR2|<=xaj
z;WV~*L=mNN_IdfSlV2OUHn0ecnz%DLmkzJeLGPI>A{#!1bwk(f3m7kvhc6`vapiru
zHTjhy?8S1+6OpK8-siRt#6zg6sosUg>SNA}qx9nX!=_V4Z35mdG2gHLL)5pQojA{t`#$&RWP4Y*Qzv5#GIcy*~c1k;ao>QiAhT{WIpth(Jz4u`&)t~8(
zg-(diYufv-2{$;ZS7(X{0RKzRhQL{i@Wv%fC#e}B$>cJOR5KFaI7zk}T-O?0hZA2^
zrrbdp|FZ1+ekbz%$q6A>`m;{4+4~?MYN%yF$M7)^**PVdukllDcWL>nGm}1r6i_Q3~$sxaaunD;rYQB+XIk7-`t)7H)vb}Z##bqF&)a?})
zxi~AOlHV#k;ERlx%K`!(odZwGEz)pZ?0Gy$i*lw?{
zbel(YZYlAv8R7zHKHeqjop^8+M3P)8Ey(-Rt?|5(TZ?>bebJlx(Az5<42x|JDi3s8
zrY;f{UK}oNX%2t)07Qvkj`|Y-=}(*BYXSb8qfO2?|Fr9$Hva+|WxpzKB{2jOqRA)Q
z`AqNkLdU$=ldSi%ad}Vdr_utRdJ>68NW3KXF`ck+-2W-j#B`6LY(nxq0p@)OQLbr$
z$Q!Tq+BPeZ_K2Jic*aaUVGV_wwRvpWs6MTD4vQP&Vqz%!R(BCxx$+2A(&@)hM-h}{
z)VpbJdFV}4x%<1h?s5(e(Yw?lDHRniwqZ?`-vU7r0PfRw1@14GFaxL1)u;rk=_nXdfznzxDipMS2
z*JCI$YN`Uvdh@!Zn1|;Ir`qH@4aZP8;3~f<9PHa=kJ{?g-KfM5sc#5uzaQJFXXn{r
zB{kQ)r8*)~|1TVlUuBme8;0Mn`(4I#bTba&*J$Ghh#8}5gTH=tkY)(;>6-V5jFQzm
z(i88feGDTaP%=w1#Zms0!@ydUxNDb->YzNv=cP4FRaEA
zVYx0}+Srkr0&v>4uI65sqF(cjay_*wcKy>FmMM3SdsHZ|s
z`Gr+-vw+=7Sj4c;(tT^(Bv8ZLw9ze|ni6fG&xN(sO-`FbT~iV%<>yr-}@
z<=%sSPGaW9pYo(%GrcI3z_5D+aZ-aK67LE^nIfQ5O)xh4Bl1!5p<8t=J83t&v4&(_
z<)GTw6QoUEg9(DNsXE$M&Mz;s8Ac2fqJ<=equQHu%x9`%LdNN!u5TMQ{XW;UID%v$
z^T&`0e!vHf|GB@(6w7pMVf&%tj~O`Sn}cjavkT=rBnU7&2ik61RLELId15$TKwj=G
z)Smf`=}<7XY#qgb;T=Zesd~?jzP4A;=%(GR#?53Niff<~0D>NZ?6W-DxQg;ktSY3H
zsVSH{rzmvta)U{c*`khBGz=e%exNaD3)l!!a${Ffl7s1ojFBfz{LP{t#8CzJP}V$A
z1jW~bRLq4I?&&FbaSFA*!;I>yUL?~YFL1BU^#@}s&T*x;r&@_XWp>jl)UQ67ljpp2
z0cFkVdTiU3)6!!$hqi`=;wSUsao02ZAYDWbx5N%W-wgmDyxL4BnTUEjGeD(V~m98f{$Md+2
zY`u|hz|>6^h&|YADZ5X2vH%eNd~f*erJ!+dPG}8j(K47SGTmQ(~<@=?aj6=#tk)+Uw`tb0%ky}<{1J2ZD
z96U0hVb3{bUNqqY`e<@etIzrz?!UN+V@l(Arw0Ekj{C0`h3isujB-5>uhj11&$Oxd
zW50cZo@zm1?t?GfU9w*IiSPXPx`vUG;m2dRv!M|w^<6&%OJn;?{2w~pzr&k6jOa|%
zj;iJo|2&8CBhxVQ8f3^P%#If-Q`5JZ@CtqQP0nb0QMbtgKXSBq+`wNs#>+(UI(YWkVM1Gzh)+rgw{cd;TIYxeo=cMzaxkp-~Tf6RE
zmrKTB+~_)lec+8SKu_r*q&&(d&+nNqRBOmRToRY^=4bP-)E(Gbd#m!**XyK&IBPWY
zYXSt8~XxW|$+;|1_jlZp}dl4Ac!LReLtI)F#
z76EE2P-$r$Dn!Qxm{HYMBgmO`Zk`V%teGk*b!+HOmX?2fcxaLM9GjmC>o>A}%PWt@
zJoVhQ`LAwlv(X|ZB_ike@iG^_}J^(fCW
zczLXd@-@DT+X93|*NfohoKDkohE*CIu8cr|t`l+}<(nN6b)aki4o7W>;8y%YKM`J!
zRX?P3$4e>*BXGF5u%1Anbl|H_BY4NzlGL7Kp~{STiJVz19q7T}F;&r{=1UjgZ#4_=
zE_C8DzbB`)22#r`b^}AxsVN@NPSE}WPV;{Uymwdo64mGLm51!PgWJPvr<1PpPP`>{|b&LHgbOr0U{EO;UMbYmp2asAE$xm&=Y
zupwJ`B(36zfie`$FYaIZRGh5|_N?iBN)5s5l4$ZJ*X-Gv^S3S(F8tVc)AvYo1&PVl
z-(_>_KloDubuyWxalgZ#YfSgjQg%sSonxQpn_attGO*t`8A&A`o_
zxD06j_Yw|uFbVq$<}2Ebv8FM)i)5oikXGr3Q*V9XCi&t5wqL$uu=Rou{s~)uo)N2w
zK>HT-8GAea&}-ws6O&SHy=T-kGWzBnz6F~i>~$G9&!_(L3H9G#>VIiQ{=eDk|0GiX
z|Bp!gfBAj-(+U2xsVW9t-1<@;Q~omqduYK~8}&U5svCkmKm$At#vc+III3H<{Yzb2Qt_8S=AY>bCG2iN~b*7uq`h0I8VlrC*G
zI>)Ke=~8DpMTcN7V$SsG{K#H~wiayXr&F^^zhaI_N(L#wUw^r<0`|q!z%ifs|E|^f
z@BdxJ{!gveZ|g=R>FI$bGGMf!C}3h@!WDk;!US0W@@&Ys`1{i7JP+IFqyu7lxdguf
z^TWN0;%S{#K?*rlV4c7ckXv97ZF;ZJX(i9x8>voqVc!wad3qQ#CC{w5zEtRVpnQDX
zcx3O`E#p*P)>fk4eN=JQd-WVbKiwaMq#0>8>Fhq0S)18d-Cc-R?Kn>C?lR<o8=*
zoB!;C9kRam&V}-y@Z-}Mm|A$e?CL0i0^~
zmTj(bPtUj#v~GGJs@Hiyu?o}t2mEQ!{?1ZJ5YiGC`=Dan=?!!-YT`8A`rrym_v_NO
zF=RIe&}{=|rq&(MQ|k+t`Hu=c;Kw9t)tnKXAbB4{
z$VxqdeMZlGy-q#FF)*H7AQ=b2_(C=i<8P>ix?@>+g6iQu6wygo=*!!DcA_Il$GKJA
z?~hy+N3C0ilq|u2#>1fHFZ6p1)b@j~Zb4megyPUSzx*_TYL3NmlCo
zn0@(ECJp32njaDwQOt2$mNeYDXYS!HGrTgby+t!7u=sEx<$nInq2bhamgu=u;^MOX
zN-mW}s{+`Jo2nZe7Ke{Fm7K!BhnjgKbkkFIIbMD7baboB@X2Ae?ODOrkh1p+JOi1%
zFa%{EnDM2?vp*1QjE7JkDowN^oCfZFW<8#me|h>cR_RV01bz
zRBYGGaD3_})wqvS^c;BEq2r>`oU?Clb@M@MmUg?GGa9j;Otj7FmJYsMJf=D2L2BLS
zoVvEqYXV)1a3K+d_CeP&N<3rbC1$SeBz<6U)NzZ=9lP;>ghF7qkR*N1SW9QNlbJg@
z+lol@teTFXkkec`ZSUnb#w!cxi4blC+aM}x=;w%FQ7%?NUlqcw^rJ%X&*eJLqT4I)
zc_&*WjtPV`sWtaeHv9t_Ci!QQ!CrQYB$*NxD|ML(a0B%t+2jad+|(ydCZIbl42+&$
zA5@>bRe1ObL&zu*`&UH$`$WiiE4oV7MMD;v16w2X#%?QYfaTBv!$!->6@*K^)MZCT(e9rK7toy-N#S$-mMQhI2j!-y_j2T
z#T0_vvq3Txa8izl>9T1@Sz?#H9g09}l({C0mC`_vnqnh9J?ZqNi+hd6X@dq%NnG*I
zrJ;_?ds1~EQnKIq)RtZ2ntl%^q>;wT=)a+5%K-sB@H9KJ?Tm;Vmg_nYkk5RFsX*YB~RQn5*6Tk>!bCe}gLbl}Gcv
z>1RUe^oAuis8#b1Y<;%#>b8O$3dzOY7_5HEeUGu;sB~5S`}!G?Mmu~I4Z-azb)BKv
zw87(279vnbk{m6QmiJ>-#VE^=84bjbC_7zgsGO3uh`P^O{Z$orBeU8Np(U`4D@l`<
z7S>BR*g?~|NEq6xioBB@Zo#BW1u(71((;>~B>#EJ!3tM$yCL`M7N
zIm8B0#nQfHY3d0(U*=4kzN@5~`OR;5*!K7g$^q}yx{$-#z@hRH-S3YKR>%ct>EVn0
zwFU4NpBLS8!s=*^MAtbddn{(>9NvO{ZM?lLPRI=i*M5>eu6}bc`P!4w2+Lb8Fh3(oy`3iF
zwpF)sj2We_983ZCI)=2|L<`^jl92R#$ldm|JPS)aFGiHihgaSqt
zqU`m0N~Dj(SbFWklL9tnz2OQHBFmh6A(T{8CtoZzEtj&`Pidt{&LQ@hSlqMpkwjic
zrq7hM5I=Sk#wxt%c?>3ZJc34pIOFn}v+q@KXYdeQ_?66~Tx0z?2dOLwwbfxo@3~&x
zGB|I@lVelVXSz7$pYd^X`yM=o0
zB(jk#fhcpx-2B_3p>q8L{RRv9E{?Ju7)nXUbB${9
z`k2Dk5`Z{)Yn;41TH`_L*lC_qk>i}PsJN;4f_=q9Puu7ir!D*f53V^eR4Ca}8;d4K
zWSRkeDFx(c`ORiMZj$s50c&X(_J#6O%6^O41r}v=1wATD3V)@~dEqL8m#`VE&9!b<
z9cwC;ObDXpnM$HoT0SEYQUlpX-C0Y84YkV(nN2XG`m3etuUWbGmnjkC*wDag-Quxb
zQD`vz%eC2%5>qfWiX<5W>^{oKb^97h*yV=u#i*m!*9o@D7c69!J>dgUX@zJF(;srs
zJgm(8_2mvxCF#!51$^Wd{)Gu-lj~1w#y-@5Ff0n~2J9p8dm0@{zKli0N#A@j8)q(5
zytn%>Y;`o<4o$(PA8WjsGd!cg7Pb7-$gOjf3X-b{E+J#(<+d}zcD+{!&6i~2PONEi
zT}Lbgk!`51VyZDz957l$1JVEaTCPf;6|EuTxge!RFi}DNy?dAwr_1Z3_iu!L)hYr7
zd~GzNB#=My*T2zZO%o}rKU@(MZhA*Lgmqzk0nv%G5mAwe*Ga_B=5$t={eFovtmL)p
zQGVFgNLjupzLXt67)jmHBh!HK?_?}r28{0V=R}t|Gn;GC3jH$_7JM?TeqmQzDQYGi
zQ4L@7y1RYtm7p^kgH>C`<)}j~Z&&z$=1-t0qV0trKoV4srZ8>0Jt)%e%5@}VcuP;~
zbtU`s^+a4@1HAE`OG%L-Y}Q@Te^6`iPJFa&L=h
z9q=I~np-z2aSvuYf~D(7E*45Sb| {H1x`G?7!I!k!g_4i0q#U)BwC0~$u7yGGnIgfQ
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.sql2` and uses `.sql2-wal` during a mutating statement.
+It reports missing tables, invalid projections, wrong row arity, duplicate schemas, malformed filters, corrupt pages, and corrupt WAL records without terminating the session.
+
+Example session:
+
+```text
+SQL>> create table student fields first, last, major, age
+SQL>> insert into student values Ada, Lovelace, Math, 36
+SQL>> insert into student values Grace, Hopper, CS, 30
+SQL>> select first, major from student where major = CS
+SQL>> end
+```
+
+## Query grammar
+
+```text
+create table fields [, ...]
+insert into values [, ...]
+select <* | field [, field ...]> from
+ [where
+ [ ...]]
+```
+
+Quote values that contain spaces, such as `"Mary Ann"`.
+Quoted values may contain spaces, numbers, and punctuation, but escaped double quotes are not supported.
+
+## Version and storage inspection
+
+```bash
+./build/run_sql --version
+./build/run_sql --inspect-storage student
+```
+
+Inspection validates checksums and structural bounds without applying or clearing a pending WAL.
+
+## Migrate a v1 table
+
+Inspect a legacy table without writing anything:
+
+```bash
+./build/sql_migrate_v1 --dry-run student
+```
+
+Migrate it to `student.sql2`:
+
+```bash
+./build/sql_migrate_v1 student
+```
+
+The migration reads the v1 `.bin` and `_fields.bin` files read-only, writes an exclusively owned temporary v2 image, reopens and compares every row, rechecks the source bytes, then atomically links the verified destination without replacement.
+It never modifies or deletes the v1 source.
+Use `--destination ` to choose another destination and note that existing destinations are rejected.
+
+## Persistence boundaries
+
+- Tables contain between 1 and 64 uniquely named fields.
+- Identifiers contain letters, digits, and underscores and cannot start with a digit.
+- Each value is at most 100 bytes, and rows may cross page boundaries.
+- An insert must provide exactly one value per field.
+- Values longer than 100 bytes are rejected before a write.
+- Existing tables cannot be overwritten by another `CREATE TABLE` command.
+- Page, index, schema, row, and WAL corruption fail closed when a table is opened.
+- V1 tables can be queried read-only and must be migrated before new inserts.
+- The durability scope is one process, one writer, and one atomic statement at a time.
+
+The exact byte layout, recovery ordering, checksums, and compatibility boundary are documented in [docs/storage-v2.md](docs/storage-v2.md).
+
+## Sanitizer build
+
+To run the tests under AddressSanitizer and UndefinedBehaviorSanitizer:
+
+```bash
+cmake -S . -B build-sanitized \
+ -DCMAKE_BUILD_TYPE=Debug \
+ -DBUILD_TESTING=ON \
+ -DSQL_ENABLE_SANITIZERS=ON \
+ -DCMAKE_COMPILE_WARNING_AS_ERROR=ON
+cmake --build build-sanitized --parallel
+ctest --test-dir build-sanitized --output-on-failure
+```
diff --git a/image/preview.png b/image/preview.png
deleted file mode 100644
index 193e6d939a7296838f8f981256694de08afae7a1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 149699
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 | | |