2sagaco48 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/diagnostics.mjs +141 -0
  2. package/dist/compute.worker-j5ahIpF-.js +1 -0
  3. package/dist/graph.worker-DG6iGCB9.js +1 -0
  4. package/dist/index.html +2314 -0
  5. package/flatten-guide.md +248 -0
  6. package/index.html +12 -0
  7. package/package.json +38 -0
  8. package/src/App.orig.tsx +204 -0
  9. package/src/App.orig1.tsx +27 -0
  10. package/src/App.orig2.tsx +25 -0
  11. package/src/App.tsx +3 -0
  12. package/src/BaseApp.tsx +18 -0
  13. package/src/INTEGRATION_LEDGER.md +22 -0
  14. package/src/PERSIST_CANARY.orig.txt +1 -0
  15. package/src/PERSIST_CANARY.txt +1 -0
  16. package/src/REGRESSION_LEDGER.md +651 -0
  17. package/src/TEMPLATE_PIPELINE_AUDIT.md +208 -0
  18. package/src/WILLIAMS_PERSONA_GUIDE.md +62 -0
  19. package/src/chat/VeritasChat.tsx +69 -0
  20. package/src/chat/synthesis.ts +31 -0
  21. package/src/chat/tier.ts +45 -0
  22. package/src/components/AdaptersPage.orig.tsx +99 -0
  23. package/src/components/AdaptersPage.tsx +3 -0
  24. package/src/components/AdversarialPanel.tsx +136 -0
  25. package/src/components/AnchorBaselinePanel.tsx +75 -0
  26. package/src/components/AnswerPanel.tsx +60 -0
  27. package/src/components/ArtifactPanel.tsx +43 -0
  28. package/src/components/ChatApp.orig.tsx +1582 -0
  29. package/src/components/ChatApp.orig1.tsx +722 -0
  30. package/src/components/ChatApp.tsx +95 -0
  31. package/src/components/ChatAugmentPanels.tsx +73 -0
  32. package/src/components/CitationLedgerPanel.tsx +313 -0
  33. package/src/components/ComputeSandboxPanel.tsx +130 -0
  34. package/src/components/ConfigPanel.tsx +110 -0
  35. package/src/components/ControlPlanePage.tsx +195 -0
  36. package/src/components/CreativeTreeLifePage.tsx +234 -0
  37. package/src/components/CreativeTreeOfLifePanel.tsx +149 -0
  38. package/src/components/DebugTracePanel.tsx +137 -0
  39. package/src/components/DeepReasoningTrace.tsx +48 -0
  40. package/src/components/EntitySheetPanel.tsx +51 -0
  41. package/src/components/FailureModesPanel.tsx +104 -0
  42. package/src/components/GBSDashboard.tsx +239 -0
  43. package/src/components/GraphView.tsx +116 -0
  44. package/src/components/HUD.tsx +125 -0
  45. package/src/components/HypothesisPanel.tsx +67 -0
  46. package/src/components/InnovationGenomeEngine.tsx +792 -0
  47. package/src/components/InnovationPersonaGuide.tsx +348 -0
  48. package/src/components/InnovationPersonaPanel.tsx +289 -0
  49. package/src/components/LiveResourceHUD.tsx +109 -0
  50. package/src/components/LongWriterPanel.tsx +112 -0
  51. package/src/components/MainPipelineV10Bridge.tsx +72 -0
  52. package/src/components/MarkdownLite.tsx +63 -0
  53. package/src/components/MemoryInspector.tsx +38 -0
  54. package/src/components/MemoryMonitor.tsx +52 -0
  55. package/src/components/MemoryStressPanel.tsx +176 -0
  56. package/src/components/ModulesPage.tsx +171 -0
  57. package/src/components/PipelineDebugConsole.orig.tsx +1856 -0
  58. package/src/components/PipelineDebugConsole.tsx +3 -0
  59. package/src/components/PreFlightHUD.tsx +67 -0
  60. package/src/components/PrismaFetchTracePanel.tsx +87 -0
  61. package/src/components/ReportOSPanel.tsx +165 -0
  62. package/src/components/ResourceEstimatorPage.tsx +327 -0
  63. package/src/components/RichText.tsx +181 -0
  64. package/src/components/SagaOsPanel.tsx +605 -0
  65. package/src/components/SagaOsReference.tsx +421 -0
  66. package/src/components/SagaOsV2Panel.tsx +594 -0
  67. package/src/components/SagaStyleTab.tsx +382 -0
  68. package/src/components/SageBlueprintPanel.tsx +416 -0
  69. package/src/components/SharedChatInput.tsx +77 -0
  70. package/src/components/StatFinancePanel.tsx +190 -0
  71. package/src/components/StylePersonaPanel.tsx +128 -0
  72. package/src/components/TemplatesPage.tsx +300 -0
  73. package/src/components/TestPanel.tsx +63 -0
  74. package/src/components/TraceLog.tsx +89 -0
  75. package/src/components/V15CalibrationAugment.tsx +1134 -0
  76. package/src/components/V15CalibrationDialog.tsx +1871 -0
  77. package/src/components/V15Overlay.orig.tsx +120 -0
  78. package/src/components/V15Overlay.tsx +4 -0
  79. package/src/components/V15OverlayWrapper.tsx +362 -0
  80. package/src/components/V15Toggle.tsx +34 -0
  81. package/src/console/DiagnosticRecoveryPanel.tsx +358 -0
  82. package/src/console/EngineeringConsole.tsx +103 -0
  83. package/src/console/FictionSystemPanels.tsx +882 -0
  84. package/src/console/InspectorPanels.tsx +254 -0
  85. package/src/console/ManuscriptGraderPanel.tsx +182 -0
  86. package/src/console/RecursiveReviserPanel.tsx +245 -0
  87. package/src/console/SeedControlPanel.tsx +135 -0
  88. package/src/console/StoryControllerPanel.tsx +443 -0
  89. package/src/console/engineBridge.ts +258 -0
  90. package/src/console/gemini.ts +106 -0
  91. package/src/console/grading.ts +250 -0
  92. package/src/console/util.ts +45 -0
  93. package/src/fiction/continuity.ts +372 -0
  94. package/src/fiction/crash-protection.ts +111 -0
  95. package/src/fiction/diagnostics.ts +208 -0
  96. package/src/fiction/diff.ts +74 -0
  97. package/src/fiction/entity-state-machine.ts +214 -0
  98. package/src/fiction/nive-engine.ts +404 -0
  99. package/src/fiction/pipeline-selftest.ts +132 -0
  100. package/src/fiction/seed-control.ts +193 -0
  101. package/src/fiction/story-engine.ts +326 -0
  102. package/src/fiction/types.ts +68 -0
  103. package/src/flatten-guide.md +379 -0
  104. package/src/index.css +14 -0
  105. package/src/index.orig.css +13 -0
  106. package/src/lib/academic-sources.base.ts +188 -0
  107. package/src/lib/academic-sources.orig.ts +28 -0
  108. package/src/lib/academic-sources.ts +10 -0
  109. package/src/lib/advanced-math.ts +119 -0
  110. package/src/lib/adversarial-engine.base.ts +409 -0
  111. package/src/lib/adversarial-engine.ts +82 -0
  112. package/src/lib/ai-revision.ts +623 -0
  113. package/src/lib/app-state.tsx +426 -0
  114. package/src/lib/artifact-registry.ts +97 -0
  115. package/src/lib/artifacts.ts +180 -0
  116. package/src/lib/atlas-dr.ts +167 -0
  117. package/src/lib/browser-mtls.ts +127 -0
  118. package/src/lib/browser-queue.ts +221 -0
  119. package/src/lib/browser-search-scraper.base.ts +382 -0
  120. package/src/lib/browser-search-scraper.orig.ts +90 -0
  121. package/src/lib/browser-search-scraper.ts +10 -0
  122. package/src/lib/calc-interceptor.ts +82 -0
  123. package/src/lib/citation-lane-tap.ts +78 -0
  124. package/src/lib/citation-ledger-store.ts +369 -0
  125. package/src/lib/citation-ledger.ts +203 -0
  126. package/src/lib/compute-sandbox.ts +215 -0
  127. package/src/lib/compute.worker.ts +153 -0
  128. package/src/lib/connectors/gemini.ts +120 -0
  129. package/src/lib/connectors/jina.ts +233 -0
  130. package/src/lib/connectors/marketdata.ts +51 -0
  131. package/src/lib/connectors/prismafetch.base.ts +175 -0
  132. package/src/lib/connectors/prismafetch.ts +1 -0
  133. package/src/lib/connectors/serpapi.ts +65 -0
  134. package/src/lib/connectors/wikidata.ts +44 -0
  135. package/src/lib/constraints.ts +331 -0
  136. package/src/lib/continuation-detector.base.ts +153 -0
  137. package/src/lib/continuation-detector.ts +48 -0
  138. package/src/lib/contradraft.ts +168 -0
  139. package/src/lib/cors-proxy.ts +120 -0
  140. package/src/lib/coverage.ts +81 -0
  141. package/src/lib/debug/architecture-prescription.ts +556 -0
  142. package/src/lib/debug/covea-repair.ts +543 -0
  143. package/src/lib/debug/helios-ground.ts +319 -0
  144. package/src/lib/debug/intent-decomposer.ts +281 -0
  145. package/src/lib/debug/intent-lattice.ts +349 -0
  146. package/src/lib/debug/pipeline-diagnosis.ts +1149 -0
  147. package/src/lib/debug/pipeline-trace-bus.ts +424 -0
  148. package/src/lib/debug/prompt-forge.ts +678 -0
  149. package/src/lib/debug/repair-sites.ts +513 -0
  150. package/src/lib/debug/research-phase.ts +266 -0
  151. package/src/lib/debug/retrieval-context.ts +76 -0
  152. package/src/lib/debug/retrieval-hardener.ts +142 -0
  153. package/src/lib/debug/scraper-debug-runner.ts +576 -0
  154. package/src/lib/debug/scraper-forensics.ts +418 -0
  155. package/src/lib/debug/scraper-lane-roadmap.ts +136 -0
  156. package/src/lib/debug/self-test.ts +415 -0
  157. package/src/lib/debug/step-attribution.ts +211 -0
  158. package/src/lib/debug/template-rubric.ts +301 -0
  159. package/src/lib/debug/unified-innovation.ts +126 -0
  160. package/src/lib/debug/veritas-hybrid-scraper.ts +335 -0
  161. package/src/lib/defense-registry.ts +104 -0
  162. package/src/lib/defenses.ts +162 -0
  163. package/src/lib/deterministic-citation-ledger.ts +174 -0
  164. package/src/lib/elo-registry.base.ts +117 -0
  165. package/src/lib/elo-registry.ts +1 -0
  166. package/src/lib/entity-resolver.ts +291 -0
  167. package/src/lib/failure-modes.ts +267 -0
  168. package/src/lib/feature-registry.ts +69 -0
  169. package/src/lib/flaw-registry.ts +143 -0
  170. package/src/lib/flaws/_template.ts +52 -0
  171. package/src/lib/flaws/builtins.ts +63 -0
  172. package/src/lib/flaws/finance.ts +169 -0
  173. package/src/lib/flaws/fixers.ts +10 -0
  174. package/src/lib/flaws/index.ts +32 -0
  175. package/src/lib/flaws/legal.ts +157 -0
  176. package/src/lib/flaws/medical.ts +188 -0
  177. package/src/lib/flaws/original-defenses-pack.ts +81 -0
  178. package/src/lib/flaws/sample-declarative-pack.json +38 -0
  179. package/src/lib/flaws/selftest.ts +201 -0
  180. package/src/lib/flaws/software-extended.ts +125 -0
  181. package/src/lib/flaws/software-rn-webgl.ts +182 -0
  182. package/src/lib/flaws/statistics-advanced.ts +46 -0
  183. package/src/lib/flaws/statistics.ts +61 -0
  184. package/src/lib/gbse/config.ts +20 -0
  185. package/src/lib/gbse/engine.ts +226 -0
  186. package/src/lib/gbse/graph.ts +118 -0
  187. package/src/lib/gbse/graph.worker.ts +21 -0
  188. package/src/lib/gbse/tests.ts +117 -0
  189. package/src/lib/gbse/tiers.ts +65 -0
  190. package/src/lib/gbse/types.ts +94 -0
  191. package/src/lib/innovation-genome-engine-v2.orig.ts +1001 -0
  192. package/src/lib/innovation-genome-engine-v2.ts +3 -0
  193. package/src/lib/innovation-genome-engine.orig.ts +330 -0
  194. package/src/lib/innovation-genome-engine.ts +3 -0
  195. package/src/lib/innovation-genome-v10.orig.ts +314 -0
  196. package/src/lib/innovation-genome-v10.ts +2 -0
  197. package/src/lib/innovation-genome-v3.orig.ts +2015 -0
  198. package/src/lib/innovation-genome-v3.ts +2 -0
  199. package/src/lib/innovation-genome-v4.orig.ts +1959 -0
  200. package/src/lib/innovation-genome-v4.ts +2 -0
  201. package/src/lib/innovation-genome-v5.orig.ts +1210 -0
  202. package/src/lib/innovation-genome-v5.ts +2 -0
  203. package/src/lib/innovation-genome-v7.orig.ts +2549 -0
  204. package/src/lib/innovation-genome-v7.ts +2 -0
  205. package/src/lib/innovation-genome-v8.orig.ts +1485 -0
  206. package/src/lib/innovation-genome-v8.ts +2 -0
  207. package/src/lib/innovation-genome-v9.orig.ts +643 -0
  208. package/src/lib/innovation-genome-v9.ts +2 -0
  209. package/src/lib/jina.base.ts +293 -0
  210. package/src/lib/jina.ts +1 -0
  211. package/src/lib/live-telemetry.ts +61 -0
  212. package/src/lib/longwriter.ts +84 -0
  213. package/src/lib/manuscript-grade-v2.ts +298 -0
  214. package/src/lib/memory-governor.ts +173 -0
  215. package/src/lib/memory-stress-tests.ts +248 -0
  216. package/src/lib/model-intelligence.ts +48 -0
  217. package/src/lib/model-rotator.ts +75 -0
  218. package/src/lib/models.orig.ts +513 -0
  219. package/src/lib/models.ts +151 -0
  220. package/src/lib/n-deep.base.ts +592 -0
  221. package/src/lib/n-deep.ts +51 -0
  222. package/src/lib/nih-simulator.ts +56 -0
  223. package/src/lib/nih-vulnerability-fixes.ts +460 -0
  224. package/src/lib/omega-templates.base.ts +294 -0
  225. package/src/lib/omega-templates.ts +225 -0
  226. package/src/lib/omni-nexus.ts +64 -0
  227. package/src/lib/oracle-adapters.ts +67 -0
  228. package/src/lib/oracle-registry.ts +163 -0
  229. package/src/lib/orchestrator.ts +357 -0
  230. package/src/lib/output-boundary.ts +235 -0
  231. package/src/lib/overrides/vite-native-chaos-harness.ts +154 -0
  232. package/src/lib/overrides/vite-native-contract-plane.ts +245 -0
  233. package/src/lib/overrides/vite-native-doctor-plane.ts +208 -0
  234. package/src/lib/overrides/vite-native-knowledge-store.ts +267 -0
  235. package/src/lib/overrides/vite-native-policy-plane.ts +190 -0
  236. package/src/lib/overrides/vite-native-replay-plane.ts +197 -0
  237. package/src/lib/overrides/vite-native-runtime-plane.ts +106 -0
  238. package/src/lib/overrides/vite-native-scraper.ts +848 -0
  239. package/src/lib/overrides/vite-native-selftest-functional.ts +217 -0
  240. package/src/lib/overrides/vite-native-selftest.ts +183 -0
  241. package/src/lib/overrides/vite-native-snapshot-plane.ts +123 -0
  242. package/src/lib/philosophy-toolkit.ts +75 -0
  243. package/src/lib/pipeline.orig.ts +659 -0
  244. package/src/lib/pipeline.ts +42 -0
  245. package/src/lib/precache.ts +128 -0
  246. package/src/lib/py-sandbox.ts +205 -0
  247. package/src/lib/quality-score.ts +96 -0
  248. package/src/lib/quant-engine.ts +231 -0
  249. package/src/lib/quant-lib.ts +80 -0
  250. package/src/lib/reportos.ts +175 -0
  251. package/src/lib/research-os.ts +306 -0
  252. package/src/lib/resource-estimator.ts +114 -0
  253. package/src/lib/rpm-governor.ts +93 -0
  254. package/src/lib/runtime-estimator.ts +135 -0
  255. package/src/lib/sage/empty-space-v6.ts +560 -0
  256. package/src/lib/sage/empty-space-v7.ts +222 -0
  257. package/src/lib/sage/empty-space.ts +733 -0
  258. package/src/lib/sage/engine.ts +786 -0
  259. package/src/lib/sage/index.ts +17 -0
  260. package/src/lib/sage/judge.ts +246 -0
  261. package/src/lib/sage/prng.ts +53 -0
  262. package/src/lib/sage/reality-grounding.ts +380 -0
  263. package/src/lib/sage/repetition.ts +151 -0
  264. package/src/lib/sage/saga-os-v2-engines.ts +1870 -0
  265. package/src/lib/sage/saga-os-v2.ts +274 -0
  266. package/src/lib/sage/saga-os-v3-core.ts +1491 -0
  267. package/src/lib/sage/saga-os-v3-release.ts +739 -0
  268. package/src/lib/sage/saga-os-v4-aureate.ts +1161 -0
  269. package/src/lib/sage/saga-os-v4.ts +212 -0
  270. package/src/lib/sage/saga-os-v5.ts +205 -0
  271. package/src/lib/sage/saga-os-v6.ts +346 -0
  272. package/src/lib/sage/saga-os-v7.ts +314 -0
  273. package/src/lib/sage/saga-os-v8.ts +505 -0
  274. package/src/lib/sage/saga-os.ts +329 -0
  275. package/src/lib/sage/taxonomy.ts +403 -0
  276. package/src/lib/sage/unified-roll.ts +524 -0
  277. package/src/lib/sage/worked-sketches.ts +44 -0
  278. package/src/lib/sage.ts +166 -0
  279. package/src/lib/scraper-debug-bus.ts +53 -0
  280. package/src/lib/scraper-enhanced.orig.ts +153 -0
  281. package/src/lib/scraper-enhanced.ts +10 -0
  282. package/src/lib/scraper-hardener.base.orig.ts +155 -0
  283. package/src/lib/scraper-hardener.base.ts +317 -0
  284. package/src/lib/scraper-hardener.ts +1 -0
  285. package/src/lib/scraper-palisade/palisade-adjudicator.orig.ts +419 -0
  286. package/src/lib/scraper-palisade/palisade-adjudicator.ts +13 -0
  287. package/src/lib/scraper-vnext/arbiter-omega.orig.ts +688 -0
  288. package/src/lib/scraper-vnext/arbiter-omega.ts +13 -0
  289. package/src/lib/scraper-vnext/canonical-portfolio-augments.ts +479 -0
  290. package/src/lib/scraper-vnext/canonical-portfolio-orchestrator.orig.ts +1529 -0
  291. package/src/lib/scraper-vnext/canonical-portfolio-orchestrator.ts +13 -0
  292. package/src/lib/scraper-vnext/conclave-omega.ts +1830 -0
  293. package/src/lib/scraper-vnext/content-extractor-v2.ts +226 -0
  294. package/src/lib/scraper-vnext/diagnostics-suite.ts +36 -0
  295. package/src/lib/scraper-vnext/epistemic-packer.ts +97 -0
  296. package/src/lib/scraper-vnext/fusion-v2.ts +65 -0
  297. package/src/lib/scraper-vnext/hydra-reader.orig.ts +1216 -0
  298. package/src/lib/scraper-vnext/hydra-reader.ts +13 -0
  299. package/src/lib/scraper-vnext/native-scraper-browser-vnext.orig.ts +91 -0
  300. package/src/lib/scraper-vnext/native-scraper-browser-vnext.ts +13 -0
  301. package/src/lib/scraper-vnext/nexus-consensus.orig.ts +905 -0
  302. package/src/lib/scraper-vnext/nexus-consensus.ts +13 -0
  303. package/src/lib/scraper-vnext/portfolio-consensus-adjudicator.ts +804 -0
  304. package/src/lib/scraper-vnext/portfolio-consensus-memory.ts +377 -0
  305. package/src/lib/scraper-vnext/portfolio-terminal-governor.ts +548 -0
  306. package/src/lib/scraper-vnext/query-strategist.orig.ts +224 -0
  307. package/src/lib/scraper-vnext/query-strategist.ts +423 -0
  308. package/src/lib/scraper-vnext/retrieval-accelerator.ts +708 -0
  309. package/src/lib/scraper-vnext/retrieval-audit-augments.ts +477 -0
  310. package/src/lib/scraper-vnext/retrieval-control-plane.ts +904 -0
  311. package/src/lib/scraper-vnext/retrieval-policy-augments.ts +358 -0
  312. package/src/lib/scraper-vnext/safe-fetch-v2.ts +157 -0
  313. package/src/lib/scraper-vnext/sentinel-omega.ts +56 -0
  314. package/src/lib/scraper-vnext/sentinel-orchestrator.ts +69 -0
  315. package/src/lib/scraper-vnext/sibyl-oracle.orig.ts +413 -0
  316. package/src/lib/scraper-vnext/sibyl-oracle.ts +13 -0
  317. package/src/lib/scraper-vnext/smart-read-v2.ts +55 -0
  318. package/src/lib/scraper-vnext/spa-rescue-bridge.ts +608 -0
  319. package/src/lib/scraper-vnext/strata-engine.orig.ts +2666 -0
  320. package/src/lib/scraper-vnext/strata-engine.ts +13 -0
  321. package/src/lib/scraper-vnext/structured-source-adapter.orig.ts +369 -0
  322. package/src/lib/scraper-vnext/structured-source-adapter.ts +34 -0
  323. package/src/lib/scraper-vnext/terminal-complete.ts +224 -0
  324. package/src/lib/scraper-vnext/terminal-final.ts +277 -0
  325. package/src/lib/scraper-vnext/terminal-saturation.ts +345 -0
  326. package/src/lib/scraper-vnext/terminal-wire.ts +425 -0
  327. package/src/lib/scraper-vnext/vanguard-titanium.orig.ts +467 -0
  328. package/src/lib/scraper-vnext/vanguard-titanium.ts +17 -0
  329. package/src/lib/search-cache.ts +138 -0
  330. package/src/lib/sloop-runner.base.ts +223 -0
  331. package/src/lib/sloop-runner.ts +104 -0
  332. package/src/lib/sloop.ts +114 -0
  333. package/src/lib/small-model-adapters.ts +82 -0
  334. package/src/lib/sscp.ts +86 -0
  335. package/src/lib/system-map.ts +54 -0
  336. package/src/lib/uni-node.ts +86 -0
  337. package/src/lib/universal-rigor-guard.ts +433 -0
  338. package/src/lib/v15-gate-testbed.ts +274 -0
  339. package/src/lib/v15-gemini.base.ts +89 -0
  340. package/src/lib/v15-gemini.ts +1 -0
  341. package/src/lib/v15-grounding.orig.ts +241 -0
  342. package/src/lib/v15-grounding.ts +79 -0
  343. package/src/lib/v15-pipeline.base.ts +769 -0
  344. package/src/lib/v15-pipeline.orig.ts +1154 -0
  345. package/src/lib/v15-pipeline.ts +674 -0
  346. package/src/lib/v15-questions.ts +64 -0
  347. package/src/lib/v15-rate-limiter.orig.ts +91 -0
  348. package/src/lib/v15-rate-limiter.ts +48 -0
  349. package/src/lib/v15-state.base.ts +87 -0
  350. package/src/lib/v15-state.ts +28 -0
  351. package/src/lib/visual-table-generator.tsx +207 -0
  352. package/src/lib/wasm-runtime.ts +133 -0
  353. package/src/lib/williams-persona-guide.ts +265 -0
  354. package/src/lib/williams-style.base.ts +464 -0
  355. package/src/lib/williams-style.ts +59 -0
  356. package/src/lib/worker-pool.ts +96 -0
  357. package/src/lib/writing-tiers.ts +125 -0
  358. package/src/main.orig.tsx +10 -0
  359. package/src/main.tsx +10 -0
  360. package/src/utils/cn.orig.ts +6 -0
  361. package/src/utils/cn.ts +6 -0
  362. package/src/vite-env.d.ts +1 -0
  363. package/tsconfig.json +31 -0
  364. package/unify.mjs +537 -0
  365. package/vite.config.ts +18 -0
@@ -0,0 +1,348 @@
1
+ /**
2
+ * InnovationPersonaGuide — full-screen guide matching the Williams Persona Guide
3
+ * vibe (grid of archetypes + detail panel + side-by-side comparison), driven by
4
+ * the real Innovation Genome v1+v2 persona tables (25 total).
5
+ *
6
+ * Also exposes a seed roller identical in spirit to StylePersonaPanel: roll a
7
+ * random seed → seedToGenome → classifyPersonaExtended → the resulting persona
8
+ * is selected in the guide and can be pinned.
9
+ */
10
+ import { useEffect, useMemo, useState } from "react";
11
+ import { createPortal } from "react-dom";
12
+ import { seedToGenome } from "@/lib/innovation-genome-engine";
13
+ import {
14
+ EXTENDED_PERSONAS,
15
+ classifyPersonaExtended,
16
+ newInnovationSeed,
17
+ selectPathExtended,
18
+ } from "@/lib/innovation-genome-engine-v2";
19
+ import { PERSONAS as BASE_PERSONAS } from "@/lib/innovation-genome-engine";
20
+
21
+ interface Props {
22
+ open: boolean;
23
+ onClose: () => void;
24
+ }
25
+
26
+ interface GuidePersona {
27
+ name: string;
28
+ tagline: string;
29
+ source: "v1" | "v2-extended";
30
+ }
31
+
32
+ function buildGuideRoster(): GuidePersona[] {
33
+ const seen = new Set<string>();
34
+ const out: GuidePersona[] = [];
35
+
36
+ // Extended (v2) first — these are the distinctive "thinking" archetypes.
37
+ for (const p of EXTENDED_PERSONAS) {
38
+ if (seen.has(p.name)) continue;
39
+ seen.add(p.name);
40
+ out.push({ name: p.name, tagline: p.tagline, source: "v2-extended" });
41
+ }
42
+ // Then v1 base personas that aren't already covered.
43
+ for (const p of BASE_PERSONAS) {
44
+ if (seen.has(p.name)) continue;
45
+ seen.add(p.name);
46
+ out.push({ name: p.name, tagline: p.tagline, source: "v1" });
47
+ }
48
+ return out;
49
+ }
50
+
51
+ const SHARED_IDEA =
52
+ "A city should replace diesel buses with electric buses over five years to cut operating costs, reduce street-level pollution, and improve service reliability.";
53
+
54
+ function transformForPersona(name: string, tagline: string): string {
55
+ // Deterministic, persona-flavoured 50-100 word reframing of SHARED_IDEA.
56
+ // Not an LLM call — a structured template keyed on the persona name so the
57
+ // side-by-side comparison is stable and inspectable.
58
+ const lower = name.toLowerCase();
59
+ if (lower.includes("anomaly")) {
60
+ return `ANOMALY FOCUS: Why do 12% of winter routes experience 40% higher battery degradation than summer routes? RECOMMENDATION: Reframe five-year fleet replacement around battery thermal management on high-idle winter corridors. KEY ANOMALY: Cold-weather battery heating draws unbudgeted peak kilowatts. RISK: Unmonitored degradation cascades into route failures by Year 3.`;
61
+ }
62
+ if (lower.includes("axiom") || lower.includes("diagonal")) {
63
+ return `AXIOM CHALLENGE: We assume the city must BUY buses and CHARGE them at central depots. REFRAMED SOLUTION: Procure "Bus-as-a-Service" with battery swapping at route termini. Eliminates bulk upfront depot charging CAPEX, shifts battery degradation risk to vendor, and reduces 5-year transition timeline to 2.5 years.`;
64
+ }
65
+ if (lower.includes("dormancy") || lower.includes("reduction")) {
66
+ return `IMPORT: Battery-swap networks already operate at scale in heavy industry and mining. Apply the same modular-pack logistics to transit: standardized packs, route-end swap stations, and a circulating inventory. The "new" product is a logistics system, not a vehicle — and most of its components already exist.`;
67
+ }
68
+ if (lower.includes("reality") || lower.includes("failure")) {
69
+ return `WORLD CONTACT: Pilot one high-ridership winter route for 18 months before any fleet commitment. Instrument pack temperature, kWh/km, depot queue draw, and mean-time-between-failure. Only expand if measured TCO beats diesel by ≥12% with 95% service uptime. Dead ends map the live ones.`;
70
+ }
71
+ if (lower.includes("portfolio") || lower.includes("serendipity")) {
72
+ return `EIGHT BETS: (1) depot overnight charge, (2) on-route opportunity charge, (3) battery swap, (4) hydrogen fuel-cell, (5) hybrid diesel-electric bridge, (6) Bus-as-a-Service contract, (7) route redesign reducing fleet size, (8) microtransit substitution on low-density legs. Fund three for 24 months; kill five with pre-registered stop rules.`;
73
+ }
74
+ return `${tagline} Applied to the baseline: treat the five-year diesel-to-electric transition as a discovery problem first. Surface the hidden assumptions (depot capacity, winter range, battery replacement cost), force cheap falsification on the hardest route, and only then commit capital. Protect the heretical options until the data kills them.`;
75
+ }
76
+
77
+ export function InnovationPersonaGuide({ open, onClose }: Props) {
78
+ const roster = useMemo(buildGuideRoster, []);
79
+ const [selected, setSelected] = useState<string>(roster[0]?.name ?? "");
80
+ const [compareA, setCompareA] = useState<string>(roster[0]?.name ?? "");
81
+ const [compareB, setCompareB] = useState<string>(roster[1]?.name ?? roster[0]?.name ?? "");
82
+ const [seed, setSeed] = useState<number>(() => newInnovationSeed());
83
+ const [pinned, setPinned] = useState(false);
84
+
85
+ // Seed → persona binding (same mechanism as StylePersonaPanel reroll).
86
+ const rolled = useMemo(() => {
87
+ const genome = seedToGenome(seed);
88
+ const persona = classifyPersonaExtended(genome);
89
+ const path = selectPathExtended(genome);
90
+ return { genome, persona, path };
91
+ }, [seed]);
92
+
93
+ // Keep the selected card in sync with the rolled persona when seed changes.
94
+ useEffect(() => {
95
+ if (!open) return;
96
+ setSelected(rolled.persona.name);
97
+ }, [rolled.persona.name, open]);
98
+
99
+ useEffect(() => {
100
+ if (!open) return;
101
+ const onKey = (e: KeyboardEvent) => {
102
+ if (e.key === "Escape") onClose();
103
+ };
104
+ window.addEventListener("keydown", onKey);
105
+ return () => window.removeEventListener("keydown", onKey);
106
+ }, [open, onClose]);
107
+
108
+ if (!open) return null;
109
+
110
+ const current = roster.find((p) => p.name === selected) ?? roster[0];
111
+ const transform = current ? transformForPersona(current.name, current.tagline) : "";
112
+ const transformA = transformForPersona(
113
+ compareA,
114
+ roster.find((p) => p.name === compareA)?.tagline ?? "",
115
+ );
116
+ const transformB = transformForPersona(
117
+ compareB,
118
+ roster.find((p) => p.name === compareB)?.tagline ?? "",
119
+ );
120
+
121
+ const reroll = () => {
122
+ if (pinned) return;
123
+ setSeed(newInnovationSeed());
124
+ };
125
+
126
+ return createPortal(
127
+ <div
128
+ className="fixed inset-0 z-[10002] flex items-start justify-center overflow-y-auto bg-black/60 p-4"
129
+ onClick={onClose}
130
+ >
131
+ <div
132
+ className="my-4 flex w-full max-w-6xl flex-col overflow-hidden rounded-2xl bg-white shadow-2xl"
133
+ onClick={(e) => e.stopPropagation()}
134
+ >
135
+ {/* Header — clones Williams Persona Guide header style */}
136
+ <div className="flex-none border-b border-zinc-200 px-6 py-4">
137
+ <div className="flex items-start justify-between gap-4">
138
+ <div>
139
+ <h2 className="text-2xl font-bold text-zinc-900">
140
+ 💡 Innovation Genome Guide — Thinking Personas
141
+ </h2>
142
+ <p className="mt-0.5 text-[12px] text-zinc-500">
143
+ {roster.length} Emergent Archetypes · Controls Thinking Direction &amp; Strategic
144
+ Reframing · Paired with Williams Writing Style
145
+ </p>
146
+ </div>
147
+ <button
148
+ onClick={onClose}
149
+ className="rounded-full border border-zinc-300 px-4 py-1.5 text-sm font-semibold text-zinc-700 hover:bg-zinc-100"
150
+ >
151
+ Close
152
+ </button>
153
+ </div>
154
+
155
+ {/* Banner */}
156
+ <div className="mt-3 rounded-xl border border-amber-200 bg-gradient-to-r from-amber-50 to-orange-50 px-4 py-3">
157
+ <div className="flex flex-wrap items-center justify-between gap-2">
158
+ <div className="text-[12px] font-bold text-amber-900">
159
+ INNOVATION ENGINE V2 · 21-Axis Strategic Reframing &amp; Problem Decomposition
160
+ </div>
161
+ <div className="rounded-full bg-amber-200 px-2 py-0.5 text-[10px] font-bold text-amber-900">
162
+ {roster.length} active archetypes
163
+ </div>
164
+ </div>
165
+ <p className="mt-1 text-[11px] leading-relaxed text-amber-800">
166
+ Innovation Personas dictate <b>how the model thinks, searches, and decomposes</b>{" "}
167
+ problems (e.g. anomaly pursuit, axiom inversion, cross-domain transfer), while
168
+ Williams Personas dictate <b>how the output is written</b> (prose cadence, structure,
169
+ and tone). Both run in parallel.
170
+ </p>
171
+ </div>
172
+
173
+ {/* Seed roller — same controls as StylePersonaPanel */}
174
+ <div className="mt-3 flex flex-wrap items-center gap-2 rounded-xl border border-zinc-200 bg-zinc-50 px-3 py-2">
175
+ <div className="text-[11px] font-bold uppercase tracking-wider text-zinc-500">
176
+ Seed roller
177
+ </div>
178
+ <span className="rounded bg-white px-2 py-1 font-mono text-[11px] text-zinc-700 border border-zinc-200">
179
+ seed {seed}
180
+ </span>
181
+ <span className="text-[11px] font-bold text-fuchsia-700">{rolled.persona.name}</span>
182
+ <span className="text-[10px] text-zinc-500">· {rolled.path.id} {rolled.path.name}</span>
183
+ <button
184
+ onClick={reroll}
185
+ disabled={pinned}
186
+ className="rounded-lg bg-fuchsia-600 px-3 py-1 text-[11px] font-bold text-white hover:bg-fuchsia-700 disabled:opacity-40"
187
+ >
188
+ Reroll persona
189
+ </button>
190
+ <label className="flex items-center gap-1.5 text-[11px] font-semibold text-zinc-600">
191
+ <input
192
+ type="checkbox"
193
+ checked={pinned}
194
+ onChange={(e) => setPinned(e.target.checked)}
195
+ />
196
+ Pin seed
197
+ </label>
198
+ <label className="flex items-center gap-1.5 text-[11px] text-zinc-500">
199
+ Custom:
200
+ <input
201
+ type="number"
202
+ value={seed}
203
+ onChange={(e) => setSeed(Number(e.target.value) >>> 0)}
204
+ className="w-28 rounded border border-zinc-300 px-2 py-0.5 font-mono text-[11px]"
205
+ />
206
+ </label>
207
+ <button
208
+ onClick={() => navigator.clipboard.writeText(String(seed))}
209
+ className="rounded-lg border border-zinc-200 bg-white px-2 py-1 text-[11px] font-bold text-zinc-700 hover:bg-zinc-50"
210
+ >
211
+ Export
212
+ </button>
213
+ </div>
214
+ </div>
215
+
216
+ {/* Body — two columns */}
217
+ <div className="flex min-h-0 flex-1 overflow-hidden">
218
+ {/* Left: archetype menu */}
219
+ <div className="w-[48%] flex-none overflow-y-auto border-r border-zinc-200 p-4">
220
+ <div className="mb-2 flex items-center justify-between">
221
+ <div className="text-[10px] font-bold uppercase tracking-[0.2em] text-zinc-400">
222
+ Innovation Archetype Menu
223
+ </div>
224
+ <div className="text-[10px] text-zinc-400">{roster.length} available</div>
225
+ </div>
226
+ <div className="grid grid-cols-2 gap-2">
227
+ {roster.map((p) => {
228
+ const active = p.name === selected;
229
+ return (
230
+ <button
231
+ key={p.name}
232
+ onClick={() => setSelected(p.name)}
233
+ className={`rounded-xl border p-3 text-left transition-colors ${
234
+ active
235
+ ? "border-amber-400 bg-amber-50 shadow-sm"
236
+ : "border-zinc-200 bg-white hover:border-amber-200 hover:bg-amber-50/40"
237
+ }`}
238
+ >
239
+ <div className="flex items-center gap-1.5">
240
+ <span className="rounded bg-amber-500 px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-wide text-white">
241
+ Thinking
242
+ </span>
243
+ {p.source === "v2-extended" && (
244
+ <span className="rounded bg-fuchsia-100 px-1 py-0.5 text-[8px] font-bold text-fuchsia-700">
245
+ v2
246
+ </span>
247
+ )}
248
+ </div>
249
+ <div className="mt-1 text-[12px] font-bold text-zinc-900">{p.name}</div>
250
+ <div className="mt-0.5 text-[10px] leading-snug text-zinc-500">{p.tagline}</div>
251
+ </button>
252
+ );
253
+ })}
254
+ </div>
255
+ </div>
256
+
257
+ {/* Right: detail + comparison */}
258
+ <div className="flex-1 overflow-y-auto p-5">
259
+ {current && (
260
+ <>
261
+ <div className="text-[10px] font-bold uppercase tracking-[0.2em] text-zinc-400">
262
+ Innovation Persona Guide
263
+ </div>
264
+ <h3 className="mt-1 text-2xl font-bold text-zinc-900">{current.name}</h3>
265
+ <p className="mt-0.5 text-[13px] italic text-zinc-600">"{current.tagline}"</p>
266
+
267
+ <div className="mt-4 rounded-xl border border-zinc-200 bg-zinc-50 p-4">
268
+ <div className="text-[10px] font-bold uppercase tracking-wider text-zinc-500">
269
+ Standard Baseline Problem
270
+ </div>
271
+ <p className="mt-1 text-[12px] leading-relaxed text-zinc-800">{SHARED_IDEA}</p>
272
+ </div>
273
+
274
+ <div className="mt-3 rounded-xl border border-amber-200 bg-amber-50/50 p-4">
275
+ <div className="flex items-center justify-between">
276
+ <div className="text-[10px] font-bold uppercase tracking-wider text-amber-800">
277
+ 50–100 Word Strategic Reframing
278
+ </div>
279
+ <div className="text-[9px] text-amber-700">persona-specific decomposition</div>
280
+ </div>
281
+ <p className="mt-2 text-[12px] leading-relaxed text-zinc-800">{transform}</p>
282
+ </div>
283
+
284
+ {/* Side-by-side */}
285
+ <div className="mt-4 rounded-xl border border-indigo-200 bg-indigo-50/30 p-4">
286
+ <div className="text-[10px] font-bold uppercase tracking-wider text-indigo-800">
287
+ Side-by-Side Comparison
288
+ </div>
289
+ <div className="mt-2 flex flex-wrap items-center gap-2">
290
+ <label className="text-[11px] font-semibold text-zinc-600">
291
+ A
292
+ <select
293
+ value={compareA}
294
+ onChange={(e) => setCompareA(e.target.value)}
295
+ className="ml-1 rounded border border-zinc-300 bg-white px-2 py-1 text-[11px]"
296
+ >
297
+ {roster.map((p) => (
298
+ <option key={p.name} value={p.name}>
299
+ {p.name}
300
+ </option>
301
+ ))}
302
+ </select>
303
+ </label>
304
+ <label className="text-[11px] font-semibold text-zinc-600">
305
+ B
306
+ <select
307
+ value={compareB}
308
+ onChange={(e) => setCompareB(e.target.value)}
309
+ className="ml-1 rounded border border-zinc-300 bg-white px-2 py-1 text-[11px]"
310
+ >
311
+ {roster.map((p) => (
312
+ <option key={p.name} value={p.name}>
313
+ {p.name}
314
+ </option>
315
+ ))}
316
+ </select>
317
+ </label>
318
+ </div>
319
+
320
+ <div className="mt-3 text-[11px] text-zinc-600">
321
+ <b>Baseline Problem:</b> "{SHARED_IDEA}"
322
+ </div>
323
+
324
+ <div className="mt-3 rounded-lg border border-zinc-200 bg-white p-3">
325
+ <div className="text-[11px] font-bold text-amber-800">## A: {compareA}</div>
326
+ <div className="mt-0.5 text-[10px] italic text-zinc-500">
327
+ "{roster.find((p) => p.name === compareA)?.tagline}"
328
+ </div>
329
+ <p className="mt-2 text-[11px] leading-relaxed text-zinc-800">{transformA}</p>
330
+ </div>
331
+
332
+ <div className="mt-2 rounded-lg border border-zinc-200 bg-white p-3">
333
+ <div className="text-[11px] font-bold text-indigo-800">## B: {compareB}</div>
334
+ <div className="mt-0.5 text-[10px] italic text-zinc-500">
335
+ "{roster.find((p) => p.name === compareB)?.tagline}"
336
+ </div>
337
+ <p className="mt-2 text-[11px] leading-relaxed text-zinc-800">{transformB}</p>
338
+ </div>
339
+ </div>
340
+ </>
341
+ )}
342
+ </div>
343
+ </div>
344
+ </div>
345
+ </div>,
346
+ document.body,
347
+ );
348
+ }
@@ -0,0 +1,289 @@
1
+ /**
2
+ * InnovationPersonaPanel — design-identical sibling of `StylePersonaPanel`.
3
+ * ============================================================================
4
+ * Same section chrome, same expand affordance, same reroll / pin / custom-seed
5
+ * / export control row, same dimension-card grid with low↔high poles, filled
6
+ * bar, marker and numeric readout, same `<details>` prompt viewer.
7
+ *
8
+ * Where the Williams panel governs HOW THE ANSWER IS WRITTEN, this panel
9
+ * governs HOW THE PROBLEM IS SEARCHED AND REFRAMED. It is driven by the real
10
+ * Innovation Genome v2 engine — no mock data, no placeholder values.
11
+ *
12
+ * Rarity is MEASURED, not asserted: `useMemo` runs the deterministic genome
13
+ * compiler over a fixed lattice of seeds and counts how often each persona
14
+ * wins its first-match trigger. The printed percentage is therefore a real
15
+ * sampled frequency with a stated sample size, reproducible on any machine.
16
+ * ============================================================================ */
17
+ import { useMemo, useState } from "react";
18
+ import { DIMENSIONS, seedToGenome } from "@/lib/innovation-genome-engine";
19
+ import {
20
+ classifyPersonaExtended,
21
+ selectPathExtended,
22
+ compileCompactDirectiveV2,
23
+ newInnovationSeed,
24
+ inferInnovationDomain,
25
+ rollV2,
26
+ DOMAIN_PACKS,
27
+ type InnovationGenomeV2,
28
+ } from "@/lib/innovation-genome-engine-v2";
29
+
30
+ /** Sample size for the rarity estimate. Fixed so the number is reproducible. */
31
+ const RARITY_SAMPLES = 1200;
32
+
33
+ type Tier = "Legendary" | "Epic" | "Rare" | "Uncommon" | "Common";
34
+
35
+ function tierFor(percent: number): Tier {
36
+ if (percent < 2) return "Legendary";
37
+ if (percent < 6) return "Epic";
38
+ if (percent < 12) return "Rare";
39
+ if (percent < 25) return "Uncommon";
40
+ return "Common";
41
+ }
42
+
43
+ function tierClass(tier: Tier): string {
44
+ switch (tier) {
45
+ case "Legendary": return "bg-amber-100 text-amber-800";
46
+ case "Epic": return "bg-fuchsia-100 text-fuchsia-800";
47
+ case "Rare": return "bg-sky-100 text-sky-800";
48
+ case "Uncommon": return "bg-emerald-100 text-emerald-800";
49
+ default: return "bg-zinc-100 text-zinc-600";
50
+ }
51
+ }
52
+
53
+ /** Deterministic frequency table over a fixed seed lattice. */
54
+ function computeRarityTable(): Map<string, number> {
55
+ const counts = new Map<string, number>();
56
+ for (let i = 0; i < RARITY_SAMPLES; i += 1) {
57
+ // Fixed lattice (not RNG) so the table is byte-identical across machines.
58
+ const seed = (i * 2654435761) >>> 0;
59
+ const name = classifyPersonaExtended(seedToGenome(seed)).name;
60
+ counts.set(name, (counts.get(name) ?? 0) + 1);
61
+ }
62
+ return counts;
63
+ }
64
+
65
+ const DOMAIN_NAMES = Object.keys(DOMAIN_PACKS);
66
+
67
+ export function InnovationPersonaPanel() {
68
+ const [seed, setSeed] = useState<number>(() => newInnovationSeed());
69
+ const [pinned, setPinned] = useState(false);
70
+ const [expanded, setExpanded] = useState(false);
71
+ const [problem, setProblem] = useState("");
72
+ const [domainOverride, setDomainOverride] = useState<string>("");
73
+
74
+ const rarityTable = useMemo(computeRarityTable, []);
75
+
76
+ const genomeValues = useMemo(() => seedToGenome(seed), [seed]);
77
+ const persona = useMemo(() => classifyPersonaExtended(genomeValues), [genomeValues]);
78
+ const path = useMemo(() => selectPathExtended(genomeValues), [genomeValues]);
79
+
80
+ const domain = useMemo(() => domainOverride || inferInnovationDomain(problem || "general problem"), [problem, domainOverride]);
81
+
82
+ const compiled: InnovationGenomeV2 | null = useMemo(() => {
83
+ try {
84
+ return rollV2({
85
+ seed,
86
+ userProblem: problem || "[INSERT PROBLEM HERE]",
87
+ domain,
88
+ });
89
+ } catch {
90
+ return null;
91
+ }
92
+ }, [seed, problem, domain]);
93
+
94
+ const rarityPercent = useMemo(() => {
95
+ const hits = rarityTable.get(persona.name) ?? 0;
96
+ return Math.round((hits / RARITY_SAMPLES) * 1000) / 10;
97
+ }, [rarityTable, persona.name]);
98
+
99
+ const tier = tierFor(rarityPercent);
100
+
101
+ const directive = useMemo(() => {
102
+ if (!compiled) return "";
103
+ try {
104
+ return compileCompactDirectiveV2(compiled);
105
+ } catch {
106
+ return "";
107
+ }
108
+ }, [compiled]);
109
+
110
+ function reroll() {
111
+ if (pinned) return;
112
+ setSeed(newInnovationSeed());
113
+ }
114
+
115
+ function applyManualSeed(next: number) {
116
+ setSeed(next >>> 0);
117
+ }
118
+
119
+ const pathSeq = (path as unknown as { seq?: string; sequence?: string }).seq
120
+ ?? (path as unknown as { sequence?: string }).sequence
121
+ ?? "";
122
+
123
+ return (
124
+ <section className="rounded-2xl border border-zinc-200 bg-white shadow-sm">
125
+ <button
126
+ onClick={() => setExpanded(!expanded)}
127
+ className="flex w-full items-center justify-between px-5 py-3 text-left"
128
+ >
129
+ <div className="flex items-center gap-3">
130
+ <div className="grid h-8 w-8 place-items-center rounded-lg bg-gradient-to-br from-fuchsia-100 to-amber-100 text-lg">🧬</div>
131
+ <div>
132
+ <div className="flex items-center gap-2">
133
+ <div className="text-sm font-bold text-zinc-900">
134
+ Innovation Persona: <span className="text-fuchsia-700">{persona.name}</span>
135
+ </div>
136
+ <span className={`rounded px-1.5 py-0.5 text-[10px] font-bold ${tierClass(tier)}`}>
137
+ {tier} ({rarityPercent}%)
138
+ </span>
139
+ </div>
140
+ <div className="text-xs text-zinc-500">{persona.tagline}</div>
141
+ </div>
142
+ </div>
143
+ <div className="flex items-center gap-2">
144
+ <span className="rounded bg-zinc-100 px-2 py-1 font-mono text-[10px] text-zinc-600">seed {seed}</span>
145
+ <span className="text-zinc-400">{expanded ? "−" : "+"}</span>
146
+ </div>
147
+ </button>
148
+
149
+ {expanded && (
150
+ <div className="border-t border-zinc-100 px-5 py-4">
151
+ <div className="mb-4 flex flex-wrap items-center gap-2">
152
+ <button
153
+ onClick={reroll}
154
+ disabled={pinned}
155
+ className="rounded-lg bg-fuchsia-600 px-3 py-1.5 text-xs font-bold text-white hover:bg-fuchsia-700 disabled:opacity-40"
156
+ >
157
+ Reroll persona
158
+ </button>
159
+ <label className="flex items-center gap-2 text-xs font-semibold text-zinc-600">
160
+ <input type="checkbox" checked={pinned} onChange={(e) => setPinned(e.target.checked)} />
161
+ Pin seed
162
+ </label>
163
+ <label className="flex items-center gap-2 text-xs text-zinc-500">
164
+ Custom seed:
165
+ <input
166
+ type="number"
167
+ value={seed}
168
+ onChange={(e) => applyManualSeed(Number(e.target.value) >>> 0)}
169
+ className="w-28 rounded border border-zinc-300 px-2 py-1 font-mono text-xs"
170
+ />
171
+ </label>
172
+ <button
173
+ onClick={() => navigator.clipboard.writeText(String(seed))}
174
+ className="rounded-lg border border-zinc-200 bg-white px-3 py-1.5 text-xs font-bold text-zinc-700 hover:bg-zinc-50"
175
+ title="Export this genome by copying its seed"
176
+ >
177
+ Export
178
+ </button>
179
+ <label className="flex items-center gap-1 text-xs text-zinc-500">
180
+ Domain:
181
+ <select
182
+ value={domainOverride}
183
+ onChange={(e) => setDomainOverride(e.target.value)}
184
+ className="rounded border border-zinc-300 bg-white px-1 py-1 text-xs"
185
+ >
186
+ <option value="">auto-detect</option>
187
+ {DOMAIN_NAMES.map((d) => (
188
+ <option key={d} value={d}>{d}</option>
189
+ ))}
190
+ </select>
191
+ </label>
192
+ <button
193
+ onClick={() => window.dispatchEvent(new CustomEvent("veritas:open-innovation-genome"))}
194
+ className="rounded-lg border border-fuchsia-200 bg-fuchsia-50 px-3 py-1.5 text-xs font-bold text-fuchsia-700 hover:bg-fuchsia-100"
195
+ title="Open the full 25-archetype Innovation Genome Guide"
196
+ >
197
+ Guide
198
+ </button>
199
+ </div>
200
+
201
+ <div className="mb-4 grid gap-2 sm:grid-cols-3">
202
+ <div className="rounded-xl border border-zinc-100 bg-zinc-50 p-3">
203
+ <div className="text-[10px] font-bold uppercase tracking-[0.2em] text-zinc-400">Discovery path</div>
204
+ <div className="mt-1 text-xs font-bold text-zinc-900">{path.id} · {path.name}</div>
205
+ <div className="mt-0.5 font-mono text-[10px] text-zinc-500">{pathSeq}</div>
206
+ </div>
207
+ <div className="rounded-xl border border-zinc-100 bg-zinc-50 p-3">
208
+ <div className="text-[10px] font-bold uppercase tracking-[0.2em] text-zinc-400">Domain pack</div>
209
+ <div className="mt-1 text-xs font-bold text-zinc-900">{compiled?.domainPack.name ?? domain}</div>
210
+ <div className="mt-0.5 text-[10px] text-zinc-500">
211
+ {compiled?.safetyGate.isHighStakes() ? "High-stakes gate ACTIVE" : "Standard risk"}
212
+ </div>
213
+ </div>
214
+ <div className="rounded-xl border border-zinc-100 bg-zinc-50 p-3">
215
+ <div className="text-[10px] font-bold uppercase tracking-[0.2em] text-zinc-400">Rarity basis</div>
216
+ <div className="mt-1 font-mono text-xs text-zinc-900">
217
+ {rarityTable.get(persona.name) ?? 0}/{RARITY_SAMPLES} seeds
218
+ </div>
219
+ <div className="mt-0.5 text-[10px] text-zinc-500">Measured on a fixed seed lattice</div>
220
+ </div>
221
+ </div>
222
+
223
+ <label className="mb-4 block text-xs text-zinc-500">
224
+ Problem context (steers domain pack inference):
225
+ <input
226
+ value={problem}
227
+ onChange={(e) => setProblem(e.target.value)}
228
+ placeholder="e.g. prove a bound, design a catalyst, debug a race condition"
229
+ className="mt-1 w-full rounded border border-zinc-300 px-2 py-1 text-xs"
230
+ />
231
+ </label>
232
+
233
+ <div className="mb-4">
234
+ <div className="text-[10px] font-bold uppercase tracking-[0.2em] text-zinc-400">
235
+ {DIMENSIONS.length} innovation dimensions
236
+ </div>
237
+ </div>
238
+
239
+ <div className="grid gap-2 sm:grid-cols-2 lg:grid-cols-3">
240
+ {DIMENSIONS.map((dim) => {
241
+ const value = genomeValues[dim.id] ?? 0;
242
+ return (
243
+ <div key={dim.id} className="rounded-xl border border-zinc-100 bg-zinc-50 p-3">
244
+ <div className="flex items-center justify-between">
245
+ <div className="text-xs font-bold text-zinc-900">{dim.name}</div>
246
+ <div className="rounded bg-fuchsia-50 px-1.5 py-0.5 font-mono text-[9px] text-fuchsia-700">{dim.block}</div>
247
+ </div>
248
+ <div className="mt-2 flex items-center gap-2">
249
+ <span className="w-16 text-right text-[9px] leading-tight text-zinc-500">{dim.lowPole}</span>
250
+ <div className="relative h-2 flex-1 overflow-hidden rounded-full bg-zinc-200">
251
+ <div
252
+ className="absolute left-0 top-0 h-full rounded-full bg-gradient-to-r from-amber-500 to-fuchsia-500"
253
+ style={{ width: `${value * 100}%` }}
254
+ />
255
+ <div
256
+ className="absolute top-[-2px] h-3 w-1 rounded-full bg-zinc-900"
257
+ style={{ left: `calc(${value * 100}% - 2px)` }}
258
+ />
259
+ </div>
260
+ <span className="w-16 text-[9px] leading-tight text-zinc-500">{dim.highPole}</span>
261
+ </div>
262
+ <div className="mt-1 text-right font-mono text-[10px] text-zinc-400">{value.toFixed(2)}</div>
263
+ </div>
264
+ );
265
+ })}
266
+ </div>
267
+
268
+ <details className="mt-4">
269
+ <summary className="cursor-pointer text-xs font-bold text-zinc-600 hover:text-zinc-900">
270
+ View generated innovation directive
271
+ </summary>
272
+ <pre className="mt-2 max-h-64 overflow-auto whitespace-pre-wrap rounded-xl border border-zinc-200 bg-white p-4 font-mono text-xs leading-relaxed text-zinc-800">
273
+ {directive || "(directive unavailable)"}
274
+ </pre>
275
+ </details>
276
+
277
+ <details className="mt-2">
278
+ <summary className="cursor-pointer text-xs font-bold text-zinc-600 hover:text-zinc-900">
279
+ View full compiled v2 prompt
280
+ </summary>
281
+ <pre className="mt-2 max-h-64 overflow-auto whitespace-pre-wrap rounded-xl border border-zinc-200 bg-white p-4 font-mono text-xs leading-relaxed text-zinc-800">
282
+ {compiled?.prompt ?? "(prompt unavailable)"}
283
+ </pre>
284
+ </details>
285
+ </div>
286
+ )}
287
+ </section>
288
+ );
289
+ }