Files
the-nexus/bin/__pycache__/generate_provenance.cpython-312.pyc

35 lines
5.6 KiB
Plaintext
Raw Normal View History

2026-04-10 21:17:44 -04:00
<EFBFBD>
<00><><EFBFBD>i$<00> <00><><00>dZddlZddlZddlZddlZddlZddlmZmZddlm Z gd<05>Z
gd<06>Z e
e zZ de de fd <09>Zd
e defd <0B>Zd
e defd <0C>Zd
e d edeeee ffd<0E>Zd<0F>Zedk(re<16>yy)ad
Generate a provenance manifest for the Nexus browser surface.
Hashes all frontend files so smoke tests can verify the app comes
from a clean Timmy_Foundation/the-nexus checkout, not stale sources.
Usage:
python bin/generate_provenance.py # writes provenance.json
python bin/generate_provenance.py --check # verify existing manifest matches
<EFBFBD>N)<02>datetime<6D>timezone)<01>Path)z
index.htmlzapp.jsz style.csszgofai_worker.jsz server.pyz portals.jsonz vision.jsonz manifest.json)z"nexus/components/spatial-memory.jsz!nexus/components/session-rooms.jsz%nexus/components/timeline-scrubber.jsz$nexus/components/memory-particles.js<6A>path<74>returnc<00><><00>tj<00>}|j|j<00><00>|j <00>S)N)<05>hashlib<69>sha256<35>update<74>
read_bytes<EFBFBD> hexdigest)r<00>hs <20>bin/generate_provenance.py<70> sha256_filer*s-<00><00><0F><0E><0E><18>A<EFBFBD><05>H<EFBFBD>H<EFBFBD>T<EFBFBD>_<EFBFBD>_<EFBFBD> <1E><1F> <0C>;<3B>;<3B>=<3D><18><00> repo_rootc<00>^<00><00><00>fd<01>}|dd<03>|ddd<03>|ddd<07>|dd <09>d
k7d <0B>S) z!Capture git state for provenance.c<00><><00><01> tjdg|<00><01>ddd<03><04>}|jdk(r|jj <00>SdS#t
$rYywxYw)N<>gitT<74>
)<04>cwd<77>capture_output<75>text<78>timeoutr)<06>
subprocess<EFBFBD>run<75>
returncode<EFBFBD>stdout<75>strip<69> Exception)<03>args<67>rrs <20>rrzget_git_info.<locals>.git2s^<00><><00> <18><1A><0E><0E><16><0E><14><0E><1D>#<23>$<24><02><0E>A<EFBFBD>
()<29>|<7C>|<7C>q<EFBFBD>'8<>1<EFBFBD>8<EFBFBD>8<EFBFBD>><3E>><3E>#<23> B<>d<EFBFBD> B<><42><18> <18><17> <18>s<00>AA <00> A <00> A<03>Az rev-parse<73>HEADz --abbrev-ref<65>remotezget-url<72>origin<69>statusz --porcelain<69>)<04>commit<69>branchr$<00>dirty<74>)rrs` r<00> get_git_infor,0sE<00><><00> <18><16>k<EFBFBD>6<EFBFBD>*<2A><15>k<EFBFBD>><3E>6<EFBFBD>:<3A><15>h<EFBFBD> <09>8<EFBFBD>4<><14>X<EFBFBD>}<7D>-<2D><12>3<>  <06>rc<00>T<00>i}g}tD]R}||z }|j<00>r*t|<04>|j<00>jd<01>||<<00>B|j |<03><00>Tt jtj<00>j<00>dt|<00>||t|<01>d<03>S)N)r
<00>sizezTimmy_Foundation/the-nexus)<06> generated_at<61>repor<00>files<65>missing<6E>
file_count) <0A> ALL_FILES<45>existsr<00>stat<61>st_size<7A>appendr<00>nowr<00>utc<74> isoformatr,<00>len)rr1r2<00>rel<65>ps r<00>generate_manifestr?Es<><00><00> <0E>E<EFBFBD><10>G<EFBFBD><18> <20><03> <15><03>O<EFBFBD><01> <0C>8<EFBFBD>8<EFBFBD>:<3A>%<25>a<EFBFBD>.<2E><19><06><06><08>(<28>(<28><0E>E<EFBFBD>#<23>J<EFBFBD>
<14>N<EFBFBD>N<EFBFBD>3<EFBFBD> <1F> <20>!<21> <0C> <0C>X<EFBFBD>\<5C>\<5C>2<><<3C><<3C>><3E>,<2C><1B>I<EFBFBD>&<26><16><1A><19>%<25>j<EFBFBD>  <06>r<00>existingc<00><00>g}|jdi<00>j<00>D]U\}}||z }|j<00>s|jd|<03><00><02><00>0t |<05>|dk7s<01>B|jd|<03><00><02><00>Wt |<02>dk(|fS)zKCheck if current files match the stored manifest. Returns (ok, mismatches).r1z MISSING: r
z CHANGED: r)<06>get<65>itemsr5r8rr<)rr@<00>
mismatchesr=<00>expectedr>s r<00>check_manifestrF\s<><00><00><13>J<EFBFBD>!<21><1C><1C>g<EFBFBD>r<EFBFBD>2<>8<>8<>:<3A>1<> <0A><03>X<EFBFBD> <15><03>O<EFBFBD><01><10>x<EFBFBD>x<EFBFBD>z<EFBFBD> <16> <1D> <1D> <09>#<23><15>/<2F> 0<> <18><11>^<5E>x<EFBFBD><08>1<> 1<> <16> <1D> <1D> <09>#<23><15>/<2F> 0<> 1<> <10>
<EFBFBD>O<EFBFBD>q<EFBFBD> <20>*<2A> -<2D>-rc<00><00>tt<00>j<00>jj}|dz }dtj
vr<>|j <00>s td<03>t jd<04>tj|j<00><00>}t||<02>\}}|r1tdt|d<00><00>d<07><03>t jd<08>nBtd t|<04><00>d
<EFBFBD><03>|D]}td |<05><00><02><00>t jd<04>t|<00>}|jtj |d <0C> <0A>dz<00>td|d<00>d<11><03>|dr!tddj#|d<00><00><00><02>yy)Nzprovenance.jsonz--checkz$FAIL: provenance.json does not exist<73>zOK: All r1z files match provenance manifestrzFAIL: z file(s) differ:z <20>)<01>indent<6E>
zWrote provenance.json: r3z files hashedr2z Missing (not yet created): z, )r<00>__file__<5F>resolve<76>parent<6E>sys<79>argvr5<00>print<6E>exit<69>json<6F>loads<64> read_textrFr<r?<00>
write_text<EFBFBD>dumps<70>join)r<00> manifest_pathr@<00>okrD<00>m<>manifests r<00>mainr]hsS<00><00><14>X<EFBFBD><0E>&<26>&<26>(<28>/<2F>/<2F>6<>6<>I<EFBFBD><1D> 1<>1<>M<EFBFBD><10>C<EFBFBD>H<EFBFBD>H<EFBFBD><1C><1C>#<23>#<23>%<25> <11>8<> 9<> <0F>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD><17>:<3A>:<3A>m<EFBFBD>5<>5<>7<>8<><08>'<27> <09>8<EFBFBD><<3C><0E><02>J<EFBFBD> <0A> <11>H<EFBFBD>S<EFBFBD><18>'<27>!2<>3<>4<>4T<34>U<> V<> <0F>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD> <11>F<EFBFBD>3<EFBFBD>z<EFBFBD>?<3F>+<2B>+;<3B><<3C> =<3D><1F> <20><01><15><02>1<EFBFBD>#<23>h<EFBFBD><0F> <20> <0F>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD> <20><19>+<2B>H<EFBFBD><11><1C><1C>T<EFBFBD>Z<EFBFBD>Z<EFBFBD><08><11>;<3B>d<EFBFBD>B<>C<> <09> #<23>H<EFBFBD>\<5C>$:<3A>#;<3B>=<3D>
I<EFBFBD>J<><0F> <09><1A> <0A>-<2D>d<EFBFBD>i<EFBFBD>i<EFBFBD><08><19>8K<38>.L<>-M<>N<>O<>r<00>__main__)<18>__doc__r rSrrO<00>osrr<00>pathlibr<00>CONTRACT_FILES<45>COMPONENT_FILESr4<00>strr<00>dictr,r?<00>tuple<6C>bool<6F>listrFr]<00>__name__r+rr<00><module>rjs<><00><01><04><0F> <0B><11>
<EFBFBD> <09>'<27><18> <02><0E><02><0F> <1B>_<EFBFBD> ,<2C> <09><19>d<EFBFBD><19>s<EFBFBD><19> <06>D<EFBFBD><06>T<EFBFBD><06>*<06><14><06>$<24><06>. .<2E>d<EFBFBD> .<2E>d<EFBFBD> .<2E>u<EFBFBD>T<EFBFBD>4<EFBFBD><03>9<EFBFBD>_<EFBFBD>7M<37> .<2E>P<01>4 <0C>z<EFBFBD><19><08>F<EFBFBD>r