betterwithage commited on
Commit
a719df8
·
verified ·
1 Parent(s): 422532a

Deploy anatomy: mobile + de-CDN + verify-widget (from platform main)

Browse files

Forge push from replit-sync source. Content files only; README/space-config preserved.

.github/CODEOWNERS ADDED
@@ -0,0 +1 @@
 
 
1
+ * @szl-holdings/core-engine
.github/workflows/overclaim-guard.yml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Doctrine Overclaim Guard
2
+
3
+ # Grep-based honesty gate. The rule lives in ONE place — the org-shared
4
+ # reusable workflow in szl-holdings/.github — so every repo that publishes
5
+ # Λ-uniqueness / Conjecture-1 claims inherits the same check automatically.
6
+ # Fails CI if a governed surface claims Λ uniqueness without the Theorem U /
7
+ # U₁ / U₂ qualifier, or describes Conjecture 1 as proven/closed (it stays OPEN).
8
+ on:
9
+ workflow_dispatch: {}
10
+ pull_request:
11
+ types: [opened, synchronize, reopened, ready_for_review]
12
+ push:
13
+ branches: [main]
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ overclaim:
20
+ uses: szl-holdings/.github/.github/workflows/reusable-overclaim-guard.yml@main
.github/workflows/pin-check.yml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Pin Check
2
+
3
+ # Thin caller — delegates to the org-wide reusable SHA-pin check so this repo's
4
+ # workflow files are validated identically to every other repo. The reusable is
5
+ # pinned by commit SHA (the rule it enforces). See szl-holdings/.github
6
+ # replit-sync/FORGE_UPGRADE_pincheck-orgwide.md.
7
+
8
+ on:
9
+ push:
10
+ branches: [main]
11
+ paths: ['.github/workflows/**']
12
+ pull_request:
13
+ paths: ['.github/workflows/**']
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ pin-check:
20
+ uses: szl-holdings/.github/.github/workflows/pin-check-reusable.yml@1bbd857634a87d3a824be86ec7a79aaa8e4937e8
LICENSE ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
index.html CHANGED
@@ -2,7 +2,7 @@
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2" />
6
  <title>SZL Agent Body v4 (deepen) — Living Anatomy · Formula Atlas + honest forecast</title>
7
  <meta name="description" content="The SZL Agent Body v4 — a genuine anatomical organism. Two bodies (a11oy + killinchu) sharing one circulatory (YAWAR receipt bus) + nervous (span lineage) mesh, with proven formulas flowing through the organs and the Λ heart beating at the center." />
8
  <style>
@@ -853,6 +853,190 @@
853
  body.ux2 #honesty{max-width:min(300px,42vw)}
854
  }
855
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
856
  </style>
857
  </head>
858
  <body>
@@ -1270,7 +1454,7 @@
1270
  <div class="hud" id="title">
1271
  <div class="eyebrow">SZL Holdings · Living Anatomy</div>
1272
  <h1>SZL Agent Body <span class="v3">v4</span> — the governed-AI organ substrate</h1>
1273
- <div class="sub">An interactive 3D body for governed AI. Click an organ, or take the guided tour. &nbsp;<a href="./live-body.html" style="color:var(--nerve);text-decoration:underline">▶ live body view →</a></div>
1274
  <div class="bodies">
1275
  <span class="body-tag a">a11oy · governed-AI decision body</span>
1276
  <span class="body-tag k">killinchu · maritime / drone C2 body</span>
@@ -1735,10 +1919,41 @@
1735
  })();
1736
  </script>
1737
 
 
 
 
 
 
 
 
 
 
 
 
 
1738
  <!-- ZERO CDN: vendored Three.js r160 + local data + local app -->
1739
  <script src="./lib/three.min.js"></script>
1740
  <script src="./data.js"></script>
1741
  <script src="./app.js"></script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1742
  </body>
1743
  </html>
1744
 
 
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2, viewport-fit=cover" />
6
  <title>SZL Agent Body v4 (deepen) — Living Anatomy · Formula Atlas + honest forecast</title>
7
  <meta name="description" content="The SZL Agent Body v4 — a genuine anatomical organism. Two bodies (a11oy + killinchu) sharing one circulatory (YAWAR receipt bus) + nervous (span lineage) mesh, with proven formulas flowing through the organs and the Λ heart beating at the center." />
8
  <style>
 
853
  body.ux2 #honesty{max-width:min(300px,42vw)}
854
  }
855
 
856
+ /* ===== ADDITIVE (Dev C): “ask the fabric” verify launcher + modal — no V8/V9/scene logic touched ===== */
857
+ #verify-fab{position:fixed;z-index:60;left:16px;bottom:18px;display:inline-flex;align-items:center;gap:7px;
858
+ font-family:var(--font-m);font-size:11px;letter-spacing:.04em;color:var(--a11oy);
859
+ background:var(--surface);backdrop-filter:blur(var(--blur));border:1px solid var(--border);
860
+ border-radius:99px;padding:9px 15px;cursor:pointer;transition:all .18s;box-shadow:var(--shadow)}
861
+ #verify-fab:hover{border-color:var(--a11oy);color:#bff7ec}
862
+ #verify-modal{position:fixed;z-index:70;inset:0;display:none;align-items:flex-start;justify-content:center;
863
+ background:rgba(2,4,10,0.74);backdrop-filter:blur(5px);padding:6vh 14px;overflow:auto;transition:opacity .2s ease}
864
+ #verify-modal.show{display:flex}
865
+ #verify-modal .vm-inner{position:relative;width:100%;max-width:660px}
866
+ #verify-modal .vm-close{position:absolute;top:-34px;right:0;cursor:pointer;color:var(--text-dim);
867
+ font-size:24px;background:none;border:0;line-height:1}
868
+ #verify-modal .vm-close:hover{color:var(--a11oy)}
869
+ #verify-modal .vm-lede{color:var(--text-muted);font:12px/1.5 var(--font-m);margin:0 0 12px;max-width:660px}
870
+ @media (prefers-reduced-motion:reduce){#verify-modal{transition:none}}
871
+ @media (max-width:680px){#verify-fab{left:50%;transform:translateX(-50%);bottom:max(14px, env(safe-area-inset-bottom))}}
872
+
873
+
874
+ /* ===========================================================
875
+ DEV B · MOBILE TYPE FLOOR (anatomy · ADDITIVE / CSS-ONLY)
876
+ Raises every sub-12px label to ≥12px on phones/tablets.
877
+ Does NOT touch the V8/V9 dual-body scene, app.js, or data.js.
878
+ Honesty preserved: organs EXPERIMENTAL, Λ=Conjecture 1 (advisory),
879
+ Khipu BFT=Conjecture 2, effectors SIMULATED, SLSA L1 honest.
880
+ =========================================================== */
881
+ @media (max-width: 768px){
882
+ #verify-fab,
883
+ #title .eyebrow,
884
+ .body-tag,
885
+ #honesty .hdr,
886
+ #honesty .row,
887
+ .chip,
888
+ #legend h3,
889
+ .sys-row .qn,
890
+ .sys-row .fnx,
891
+ .btn,
892
+ #panel .ph .sys-pill,
893
+ #panel .axes,
894
+ .sec-h,
895
+ .formula .fid,
896
+ .formula .fplain,
897
+ .formula .fax,
898
+ .formula .fref,
899
+ .gpd-cell .gpd-k,
900
+ .gpd-dois .doi span,
901
+ .lambda-honesty .lh-h,
902
+ #tip .tt,
903
+ #tip .tm,
904
+ #vf-static .vf-sys,
905
+ #vf-static .vf-chip,
906
+ #vf-static .vf-plain,
907
+ #vf-static .vf-ax,
908
+ #vf-static .vf-ref,
909
+ #dissect .dz-head,
910
+ .dz-sec > .dz-label,
911
+ .dz-layer .lname,
912
+ .dz-row,
913
+ .dz-row .val,
914
+ .dz-axis button,
915
+ .dz-mini,
916
+ .dz-results li,
917
+ .dz-results li .rk,
918
+ .dz-results li .rt,
919
+ #vis-hud .vh-head,
920
+ #vis-hud .vh-stat .k,
921
+ #vis-hud .vh-stat .v.conj,
922
+ #vis-hud .vh-foot,
923
+ #atlas .at-eyebrow,
924
+ #atlas .at-note,
925
+ .at-pill,
926
+ .at-pill .ct,
927
+ .at-tier-h,
928
+ .at-tier-h .tc,
929
+ .at-tier-h .td,
930
+ .at-empty,
931
+ .fdrill summary,
932
+ .fdrill .fax2,
933
+ .lean-link,
934
+ #forecast .fc-eyebrow,
935
+ #forecast .fc-note,
936
+ .fc-spark .sp-h,
937
+ .fc-legend,
938
+ .fc-sec-h,
939
+ .fc-event .ev-when,
940
+ .fc-event .ev-what,
941
+ .fc-tag,
942
+ .fc-disc,
943
+ #qbio .qb-eyebrow,
944
+ #qbio .qb-note,
945
+ .qb-card .qc-h,
946
+ .qb-card .qc-row,
947
+ .qb-card .qc-row b,
948
+ .qb-card .qc-math,
949
+ .qb-card .qc-plain,
950
+ .qb-stat,
951
+ .qb-sec-h,
952
+ .qb-leader,
953
+ .qb-src,
954
+ .qb-src .qs-tag,
955
+ .qb-thm .qt-id,
956
+ .qb-thm .qt-lean,
957
+ .qb-thm .qt-plain,
958
+ .qb-disc,
959
+ .qb-organ .qo-h,
960
+ .qb-organ .qo-grid,
961
+ .qb-organ .qo-verdict,
962
+ .olabel,
963
+ .olabel .od,
964
+ #tour .tr-step,
965
+ #tour .tr-prog,
966
+ #tour .tr-body,
967
+ #tour .tr-ctrl button,
968
+ .v8-title,
969
+ .v8-head,
970
+ .v8-state,
971
+ .v8-k,
972
+ .v8-v code,.v8-vitals code,
973
+ .v8-note,
974
+ .v8-load,
975
+ .v8-tag,
976
+ #v8-vitals .v8-vrow,
977
+ #v8-vitals .v8-vk,
978
+ #v8-vitals #v8-vitals-locked,
979
+ #v8-flow .v8-flow-eyebrow,
980
+ #v8-flow .v8-flow-sub,
981
+ #v8-flow-run,
982
+ .v8-flow-head,
983
+ .v8-step-l,
984
+ .v8-step-d,
985
+ #v9-master #v9-master-state,
986
+ #v9-master-ago,
987
+ #v9-master-rate,#v9-master-lambda,
988
+ #v9-master-proxy,
989
+ #v9-beat-pause,
990
+ #v9-tour .v9-tour-eyebrow,
991
+ #v9-tour-prog,
992
+ #v9-tour-body,
993
+ #v9-tour .v9-tour-ctrl button,
994
+ .v9-trace-head,.v9-k-head,
995
+ .v9-trace-k,
996
+ .v9-trace-v,
997
+ .v9-trace-v code,
998
+ .v9-dim,
999
+ .v9-trace-note,
1000
+ body.ux2 #title .sub,
1001
+ .ux-trust-head .tlabel,
1002
+ .ux-tchip,
1003
+ .ux-details > summary,
1004
+ body.ux2 #ux-tabbar .uxt{
1005
+ font-size:12px !important; line-height:1.5 !important;
1006
+ }
1007
+ }
1008
+
1009
+ /* ---- Touch targets >= 44px (additive; dense scientific UI -> 44px primary) ---- */
1010
+ @media (pointer:coarse),(max-width: 768px){
1011
+ #tour .tr-ctrl button, #v9-tour .v9-tour-ctrl button,
1012
+ .dz-axis button, .dz-mini, .btn, .lean-link,
1013
+ #v8-flow-run, #v8-flow-fab, .at-pill, .ux-tchip,
1014
+ .fdrill summary, .ux-details > summary{
1015
+ min-height:44px !important; display:inline-flex !important;
1016
+ align-items:center !important; justify-content:center !important;
1017
+ }
1018
+ .dz-toggle{ min-height:44px !important; min-width:44px !important; }
1019
+ #verify-fab{ min-height:44px !important; }
1020
+ #panel .close, #dissect .at-close, .at-close, #tip .close,
1021
+ #legend .close, #honesty .close, #atlas .at-close, #vf-close,
1022
+ button[aria-label="close"], button[aria-label^="close"], .close{
1023
+ min-width:44px !important; min-height:44px !important;
1024
+ display:inline-flex !important; align-items:center !important; justify-content:center !important;
1025
+ }
1026
+ input, select, textarea{ min-height:44px !important; }
1027
+ }
1028
+
1029
+ /* ---- safe-area insets (notch / home-bar) ; viewport-fit=cover added to meta ---- */
1030
+ @media (max-width: 768px){
1031
+ #vis-hud{ padding-bottom:max(8px, env(safe-area-inset-bottom)) !important; }
1032
+ #dissect{ padding-bottom:max(12px, calc(12px + env(safe-area-inset-bottom))) !important; }
1033
+ #ux-tabbar{ padding-bottom:max(0px, env(safe-area-inset-bottom)) !important; }
1034
+ #honesty, #title{ padding-left:max(0px, env(safe-area-inset-left)); padding-right:max(0px, env(safe-area-inset-right)); }
1035
+ /* long Lean axiom lines / DOIs must wrap, never cause horizontal overflow */
1036
+ code, .vf-ax, .v9-trace-v code, .v8-v code, .gpd-dois .doi span,
1037
+ .formula .fax, .fdrill .fax2{ overflow-wrap:anywhere !important; word-break:break-word !important; }
1038
+ }
1039
+
1040
  </style>
1041
  </head>
1042
  <body>
 
1454
  <div class="hud" id="title">
1455
  <div class="eyebrow">SZL Holdings · Living Anatomy</div>
1456
  <h1>SZL Agent Body <span class="v3">v4</span> — the governed-AI organ substrate</h1>
1457
+ <div class="sub">An interactive 3D body for governed AI. Click an organ, or take the guided tour.</div>
1458
  <div class="bodies">
1459
  <span class="body-tag a">a11oy · governed-AI decision body</span>
1460
  <span class="body-tag k">killinchu · maritime / drone C2 body</span>
 
1919
  })();
1920
  </script>
1921
 
1922
+ <!-- ===== ADDITIVE (Dev C): “ask the fabric” verify launcher + modal ===== -->
1923
+ <button id="verify-fab" type="button" aria-haspopup="dialog" aria-controls="verify-modal">◈ ask the fabric · verify a receipt</button>
1924
+ <div id="verify-modal" role="dialog" aria-modal="true" aria-label="Ask the fabric — verify a receipt">
1925
+ <div class="vm-inner">
1926
+ <button class="vm-close" id="verify-close" aria-label="Close">×</button>
1927
+ <p class="vm-lede">Paste a Khipu receipt / DSSE envelope / in-toto statement (or load the sample) and
1928
+ submit it to the <b>live</b> a11oy verify endpoint. Unsigned → <b>STRUCTURAL-ONLY</b> (advisory,
1929
+ never a false green). Verifies receipts / DSSE / in-toto — not arbitrary text. Λ = Conjecture 1.</p>
1930
+ <div id="szl-verify"></div>
1931
+ </div>
1932
+ </div>
1933
+
1934
  <!-- ZERO CDN: vendored Three.js r160 + local data + local app -->
1935
  <script src="./lib/three.min.js"></script>
1936
  <script src="./data.js"></script>
1937
  <script src="./app.js"></script>
1938
+ <!-- ADDITIVE: vendored, self-contained verify widget (0 CDN, system fonts, honest fallback) -->
1939
+ <script src="./lib/szl_verify_widget.js"></script>
1940
+ <script>
1941
+ (function(){
1942
+ var fab=document.getElementById('verify-fab');
1943
+ var modal=document.getElementById('verify-modal');
1944
+ var close=document.getElementById('verify-close');
1945
+ var mounted=false;
1946
+ function open(){
1947
+ if(!mounted && window.SZLVerify){ SZLVerify.mount('#szl-verify',{base:'https://a11oy.net'}); mounted=true; }
1948
+ modal.classList.add('show');
1949
+ }
1950
+ function hide(){ modal.classList.remove('show'); }
1951
+ if(fab) fab.addEventListener('click', open);
1952
+ if(close) close.addEventListener('click', hide);
1953
+ if(modal) modal.addEventListener('click', function(e){ if(e.target===modal) hide(); });
1954
+ document.addEventListener('keydown', function(e){ if(e.key==='Escape') hide(); });
1955
+ })();
1956
+ </script>
1957
  </body>
1958
  </html>
1959
 
lib/szl_verify_widget.js ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ============================================================================
2
+ * SZL "ask the fabric" — verify-a-claim widget (vendored, self-contained)
3
+ * ----------------------------------------------------------------------------
4
+ * 0 runtime CDN · system fonts only · AbortController · honest fallback.
5
+ * Calls the REAL a11oy verify endpoint and renders its REAL honest verdict.
6
+ * POST {base}/api/a11oy/v1/verify body = a receipt / DSSE envelope / in-toto stmt
7
+ * GET {base}/api/a11oy/v1/verify?url=<public receipt url>
8
+ *
9
+ * Doctrine v11: this widget NEVER fabricates a verdict. It shows exactly what
10
+ * the server returns (verdict: VERIFIED | STRUCTURAL-ONLY | FAILED | UNRECOGNISED).
11
+ * "STRUCTURAL-ONLY" is shown as advisory, NOT green. Network/timeout/429 degrade
12
+ * to an honest "unreachable / rate-limited" state — never to a false green.
13
+ *
14
+ * Attribution (clean-room rebuild of permissive ideas — see dev7 report):
15
+ * - Tool-call / receipt trace UI pattern inspired by smolagents (Apache-2.0,
16
+ * huggingface/smolagents) and assistant-ui (MIT). Rebuilt SZL-native; no code copied.
17
+ * - AbortController fetch contract reuses anatomy V8 (SZL own prior art).
18
+ * ==========================================================================*/
19
+ (function (global) {
20
+ 'use strict';
21
+
22
+ var DEFAULT_BASE = 'https://a11oy.net'; // same fabric the estate already talks to
23
+ var TIMEOUT_MS = 12000;
24
+ var SAMPLE = {
25
+ _type: 'https://in-toto.io/Statement/v1',
26
+ subject: [{ name: 'szl-lake/homflyreceipt_gate',
27
+ digest: { sha256: '0a2d153d81c00688b576e5a012ae6117465639807456d1bb72eb590cac3b1e9d' } }],
28
+ predicateType: 'https://szlholdings.com/attestations/innovation/v1',
29
+ predicate: { note: 'paste your own receipt JSON here, or a public receipt URL' }
30
+ };
31
+
32
+ function esc(s){ return String(s==null?'':s).replace(/[&<>"]/g,function(c){
33
+ return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]; }); }
34
+
35
+ /* honest fetch contract: AbortController + try/catch. NEVER throws. ----- */
36
+ function pull(url, opts, timeoutMs){
37
+ var ctl = (typeof AbortController!=='undefined') ? new AbortController() : null;
38
+ var to = ctl ? setTimeout(function(){ try{ctl.abort();}catch(e){} }, timeoutMs||TIMEOUT_MS) : null;
39
+ opts = opts || {};
40
+ opts.signal = ctl ? ctl.signal : undefined;
41
+ opts.cache = 'no-store';
42
+ opts.mode = 'cors';
43
+ return fetch(url, opts).then(function(r){
44
+ if(to) clearTimeout(to);
45
+ var status = r.status;
46
+ return r.json().then(function(data){ return {ok:r.ok, status:status, data:data}; },
47
+ function(){ return {ok:false, status:status, data:null}; });
48
+ }).catch(function(e){
49
+ if(to) clearTimeout(to);
50
+ var aborted = e && (e.name==='AbortError');
51
+ return {ok:false, status:0, data:null, err:String(e&&e.message||e), aborted:aborted};
52
+ });
53
+ }
54
+
55
+ /* map an HONEST verdict string -> {label, cls, advisory} ---------------- */
56
+ function verdictView(v){
57
+ var s = String(v||'').toUpperCase();
58
+ if(s==='VERIFIED') return {label:'VERIFIED', cls:'ok', advisory:false};
59
+ if(s==='STRUCTURAL-ONLY') return {label:'STRUCTURAL-ONLY', cls:'warn', advisory:true};
60
+ if(s==='FAILED') return {label:'FAILED', cls:'fail', advisory:false};
61
+ if(s==='UNRECOGNISED') return {label:'UNRECOGNISED', cls:'muted',advisory:false};
62
+ return {label: s||'—', cls:'muted', advisory:false};
63
+ }
64
+
65
+ function renderChecks(checks){
66
+ if(!Array.isArray(checks) || !checks.length) return '';
67
+ var rows = checks.map(function(c){
68
+ var st = String(c.status||'').toLowerCase();
69
+ var cls = st==='pass' ? 'ok' : (st==='fail' ? 'fail' : 'muted');
70
+ return '<li class="szlv-chk"><span class="szlv-pill '+cls+'">'+esc(c.status||'?')+'</span>'+
71
+ '<code>'+esc(c.name||'check')+'</code>'+
72
+ (c.detail ? '<span class="szlv-det">'+esc(c.detail)+'</span>' : '')+'</li>';
73
+ }).join('');
74
+ return '<ul class="szlv-checks">'+rows+'</ul>';
75
+ }
76
+
77
+ function renderResult(res){
78
+ // res is the {ok,status,data,err,aborted} envelope from pull()
79
+ if(res.status===429){
80
+ return '<div class="szlv-state fail">rate-limited · the fabric caps at 60/min per IP. '+
81
+ 'This is honest backpressure, not a failure of your receipt. Try again shortly.</div>';
82
+ }
83
+ if(!res.ok || !res.data){
84
+ var why = res.aborted ? 'timed out' : (res.status ? ('HTTP '+res.status) : 'unreachable');
85
+ return '<div class="szlv-state muted">offline · fabric '+esc(why)+
86
+ '. No verdict shown — the widget never invents a green. '+
87
+ 'Re-run the checks yourself per docs/developers/VERIFY.md.</div>';
88
+ }
89
+ var d = res.data;
90
+ var vv = verdictView(d.verdict);
91
+ var head = '<div class="szlv-verdict '+vv.cls+'">'+
92
+ '<span class="szlv-dot"></span><b>'+esc(vv.label)+'</b>'+
93
+ (vv.advisory ? '<span class="szlv-adv">advisory · not a cryptographic green</span>' : '')+
94
+ '</div>';
95
+ var detail = d.detail ? '<p class="szlv-detail">'+esc(d.detail)+'</p>' : '';
96
+ var kinds = (Array.isArray(d.kinds)&&d.kinds.length)
97
+ ? '<p class="szlv-kinds">recognised as: '+d.kinds.map(esc).join(', ')+'</p>' : '';
98
+ var checks = renderChecks(d.checks);
99
+ var foot = '<p class="szlv-foot">engine '+esc(d.engine_version||'?')+
100
+ ' · doctrine '+esc((d.doctrine&&d.doctrine.version)||'v11')+
101
+ ' · Λ='+esc((d.doctrine&&d.doctrine.lambda)||'Conjecture 1')+
102
+ (d.verified_at ? ' · '+esc(d.verified_at) : '')+
103
+ '<br><span class="szlv-trust">No trust in the server is required — re-verify with cosign / rekor-cli / lake build.</span></p>';
104
+ return head+detail+kinds+checks+foot;
105
+ }
106
+
107
+ var CSS = [
108
+ '.szlv{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;',
109
+ 'color:#cdccca;background:#1c1b19;border:1px solid #393836;border-radius:10px;padding:16px;max-width:640px}',
110
+ '.szlv h3{font-size:15px;margin:0 0 4px;font-weight:600;letter-spacing:.2px}',
111
+ '.szlv .szlv-sub{font-size:12px;color:#797876;margin:0 0 12px}',
112
+ '.szlv textarea{width:100%;min-height:120px;box-sizing:border-box;background:#171614;color:#cdccca;',
113
+ 'border:1px solid #393836;border-radius:8px;padding:10px;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}',
114
+ '.szlv-row{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}',
115
+ '.szlv input[type=text]{flex:1;min-width:200px;background:#171614;color:#cdccca;border:1px solid #393836;border-radius:8px;padding:8px 10px;font-size:12px}',
116
+ '.szlv button{background:#01696f;color:#fff;border:0;border-radius:8px;padding:9px 16px;font-size:13px;font-weight:600;cursor:pointer}',
117
+ '.szlv button:hover{background:#0c4e54}.szlv button:disabled{opacity:.5;cursor:wait}',
118
+ '.szlv button.ghost{background:transparent;color:#4f98a3;border:1px solid #393836}',
119
+ '.szlv-out{margin-top:12px;font-size:13px;min-height:24px}',
120
+ '.szlv-load{color:#797876;font-size:12px}',
121
+ '.szlv-verdict{display:flex;align-items:center;gap:8px;font-size:15px;padding:8px 10px;border-radius:8px;border:1px solid #393836}',
122
+ '.szlv-verdict .szlv-dot{width:9px;height:9px;border-radius:50%}',
123
+ '.szlv-verdict.ok .szlv-dot{background:#6daa45}.szlv-verdict.ok{border-color:#3a5a26}',
124
+ '.szlv-verdict.warn .szlv-dot{background:#e8af34}.szlv-verdict.warn{border-color:#6b5418}',
125
+ '.szlv-verdict.fail .szlv-dot{background:#d163a7}.szlv-verdict.fail{border-color:#7a2c5a}',
126
+ '.szlv-verdict.muted .szlv-dot{background:#797876}',
127
+ '.szlv-adv{font-size:11px;color:#e8af34;font-weight:400;margin-left:auto}',
128
+ '.szlv-detail{font-size:12px;color:#a9a8a5;margin:8px 0}',
129
+ '.szlv-kinds{font-size:11px;color:#797876;margin:4px 0}',
130
+ '.szlv-checks{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}',
131
+ '.szlv-chk{display:flex;align-items:center;gap:8px;font-size:12px;flex-wrap:wrap}',
132
+ '.szlv-pill{font-size:10px;text-transform:uppercase;letter-spacing:.4px;padding:2px 6px;border-radius:4px;font-weight:700}',
133
+ '.szlv-pill.ok{background:rgba(109,170,69,.18);color:#6daa45}',
134
+ '.szlv-pill.fail{background:rgba(209,99,167,.18);color:#d163a7}',
135
+ '.szlv-pill.muted{background:#2a2927;color:#797876}',
136
+ '.szlv-chk code{color:#cdccca}.szlv-det{color:#797876;font-size:11px}',
137
+ '.szlv-foot{font-size:10px;color:#5a5957;margin:10px 0 0;line-height:1.5}',
138
+ '.szlv-trust{color:#797876}',
139
+ '.szlv-state{font-size:12px;padding:8px 10px;border-radius:8px}',
140
+ '.szlv-state.fail{background:rgba(209,99,167,.10);color:#d163a7}',
141
+ '.szlv-state.muted{background:#211f1d;color:#a9a8a5}'
142
+ ].join('');
143
+
144
+ function injectCSS(){
145
+ if(document.getElementById('szlv-css')) return;
146
+ var st = document.createElement('style'); st.id='szlv-css'; st.textContent = CSS;
147
+ document.head.appendChild(st);
148
+ }
149
+
150
+ /* Public mount: SZLVerify.mount('#id', {base}) ------------------------- */
151
+ function mount(target, opts){
152
+ opts = opts || {};
153
+ var base = (opts.base || DEFAULT_BASE).replace(/\/+$/,'');
154
+ var host = (typeof target==='string') ? document.querySelector(target) : target;
155
+ if(!host) return null;
156
+ injectCSS();
157
+ host.classList.add('szlv');
158
+ host.innerHTML =
159
+ '<h3>ask the fabric — verify a receipt</h3>'+
160
+ '<p class="szlv-sub">Paste a Khipu receipt / DSSE envelope / in-toto statement, '+
161
+ 'or fetch a public receipt by URL. Verdicts are the fabric\u2019s real, honest output '+
162
+ '(unsigned \u2192 STRUCTURAL-ONLY, never a false green).</p>'+
163
+ '<textarea class="szlv-ta" spellcheck="false"></textarea>'+
164
+ '<div class="szlv-row">'+
165
+ '<input type="text" class="szlv-url" placeholder="\u2026or a public receipt URL (https://\u2026/receipt.json)">'+
166
+ '</div>'+
167
+ '<div class="szlv-row">'+
168
+ '<button class="szlv-go" type="button">Verify</button>'+
169
+ '<button class="szlv-sample ghost" type="button">Load sample receipt</button>'+
170
+ '</div>'+
171
+ '<div class="szlv-out" aria-live="polite"></div>';
172
+
173
+ var ta = host.querySelector('.szlv-ta');
174
+ var url = host.querySelector('.szlv-url');
175
+ var out = host.querySelector('.szlv-out');
176
+ var go = host.querySelector('.szlv-go');
177
+ var smp = host.querySelector('.szlv-sample');
178
+
179
+ smp.addEventListener('click', function(){ ta.value = JSON.stringify(SAMPLE, null, 2); url.value=''; });
180
+
181
+ go.addEventListener('click', function(){
182
+ go.disabled = true;
183
+ out.innerHTML = '<span class="szlv-load">calling <code>'+esc(base)+'/api/a11oy/v1/verify</code>\u2026</span>';
184
+ var p, u = url.value.trim(), body = ta.value.trim();
185
+ if(u){
186
+ p = pull(base+'/api/a11oy/v1/verify?url='+encodeURIComponent(u), {method:'GET'});
187
+ } else if(body){
188
+ var parsed = null;
189
+ try{ parsed = JSON.parse(body); }catch(e){
190
+ out.innerHTML = '<div class="szlv-state muted">input is not valid JSON — paste a receipt object or use a URL.</div>';
191
+ go.disabled = false; return;
192
+ }
193
+ p = pull(base+'/api/a11oy/v1/verify', {method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify(parsed)});
194
+ } else {
195
+ out.innerHTML = '<div class="szlv-state muted">paste a receipt JSON, or enter a public receipt URL.</div>';
196
+ go.disabled = false; return;
197
+ }
198
+ p.then(function(res){ out.innerHTML = renderResult(res); go.disabled = false; });
199
+ });
200
+
201
+ return { reload:function(){}, base:base };
202
+ }
203
+
204
+ var api = { mount: mount, pull: pull, _sample: SAMPLE, version: '1.0.0' };
205
+ if (typeof module!=='undefined' && module.exports) module.exports = api;
206
+ global.SZLVerify = api;
207
+ })(typeof window!=='undefined' ? window : this);