Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-26 17:29 UTC

alex-jb / orallexa-ai-trading-agent

Self-tuning multi-agent AI trading system. 8-source signal fusion, Bull/Bear/Judge debate on Claude Opus 4.7, Kelly + ATR position sizing. Python · Kalshi + Polymarket adapters.

Python · TypeScriptMIT★ 60 estrellas⑂ 18 forksdesde abr 2026Ver en GitHub ↗

alex-jb/orallexa-ai-trading-agent tiene un índice de salud de 61 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (88/100) y la más baja, Security (36/100). Se actualizó por última vez hace 14 días. Una sola persona concentra la mayor parte del trabajo reciente.

61
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

61
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

OrallexaCuenta personal
9 seguidores67 repositorios públicosdesde sept 2018

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

80Bueno · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 14 días
10.4/36Cadencia de commits — 15/52 semanas con commits
18/18Volumen de commits — 263 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year263
human_commit_share1
days_since_last_push14
active_weeks_last_year15
Cómo se puntúa
27/27Publica versiones — 5 versiones publicadas
36/36Recencia de las versiones — última versión hace 18 días
27/27Cadencia de publicación — una versión cada ~23,9 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count5
latest_release_tagv1.2.2
releases_from_tagsno
days_since_latest_release18
mean_days_between_releases23,9
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

57Moderado · 18% del índice global
Cómo se puntúa
28.7/60Estrellas — 60 estrellas
10.3/25Forks — 18 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks18
stars60
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_template

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

40En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.1/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,995
Cómo se puntúa
37.4/46.8Resolución de issues — 80% de issues cerradas
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues1
closed_issues4
issue_closed_ratio0,8
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
7.2/25Alcance del propietario — 9 seguidores de alex-jb
25/25Trayectoria — 67 repos públicos, cuenta de ~7 años
Datos de entrada utilizados
followers9
owner_typeUser
is_verified
owner_loginalex-jb
public_repos67
account_age_days2879
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

88Excelente · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 5 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — eslint.config.mjs
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

100Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://orallexa-ui.vercel.app
10/10Descripción del repositorio
10/10Topics — 20 topics
10/10Wiki
Datos de entrada utilizados
topicsai-trading, algorithmic-trading, claude, fintech, llm, machine-learning, multi-agent, python, pytorch, quantitative-finance, reinforcement-learning, trading-bot, agentic, claude-opus, kalshi, kronos, polymarket, prediction-markets, signal-fusion, trading-agent
has_wiki
homepagehttps://orallexa-ui.vercel.app
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

36En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 53 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate3,6
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, packaging, signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

75Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md, orallexa-ui/AGENTS.md, orallexa-ui/CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 100 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_filesCLAUDE.md, orallexa-ui/AGENTS.md, orallexa-ui/CLAUDE.md
agent_instruction_max_bytes5621
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — eslint.config.mjs
11/11Verificación estática de tipos — orallexa-ui/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
10/10Práctica demostrada con agentes — 54 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfile
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configsorallexa-ui/tsconfig.json
agent_commit_share0,54
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
27/45Código verificable por tipos — Python con configuración de verificación de tipos (orallexa-ui/tsconfig.json)
54.5/55Tamaños de archivo manejables — 3/312 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePython
largest_source_bytes119.716
source_files_sampled312
oversized_source_files3

Datos clave

60estrellas de GitHub
2contribuidores
263commits en los últimos 12 meses
14días desde el último push
5versiones publicadas
1factor bus
1issues abiertas
npm, PyPIecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

Historial de estrellas y forks 0 ★ / 18 ⇿
0Estrellas
18Forks
5Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

0481216201832026-042026-052026-07
Mayor 1Menor 2Parche 2
OpenSSF Scorecard 3.6 / 10
3.6agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-26 17:28 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities53 existing vulnerabilities detected
Dependencias directas 5
RegistroPaqueteRestricción de versiónManifiesto
npmhtml2canvas^1.4.1orallexa-ui/package.json
npmlightweight-charts^5.1.0orallexa-ui/package.json
npmnext16.2.1orallexa-ui/package.json
npmreact19.2.4orallexa-ui/package.json
npmreact-dom19.2.4orallexa-ui/package.json
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "ai-trading",
        "algorithmic-trading",
        "claude",
        "fintech",
        "llm",
        "machine-learning",
        "multi-agent",
        "python",
        "pytorch",
        "quantitative-finance",
        "reinforcement-learning",
        "trading-bot",
        "agentic",
        "claude-opus",
        "kalshi",
        "kronos",
        "polymarket",
        "prediction-markets",
        "signal-fusion",
        "trading-agent"
      ],
      "is_fork": false,
      "size_kb": 37414,
      "has_wiki": true,
      "homepage": "https://orallexa-ui.vercel.app",
      "languages": {
        "CSS": 6384,
        "HTML": 87469,
        "Shell": 36021,
        "Python": 2767121,
        "Dockerfile": 2273,
        "JavaScript": 6334,
        "TypeScript": 429706
      },
      "pushed_at": "2026-07-12T15:08:32Z",
      "created_at": "2026-04-01T15:22:38Z",
      "owner_type": "User",
      "updated_at": "2026-07-26T01:27:39Z",
      "description": "Self-tuning multi-agent AI trading system. 8-source signal fusion, Bull/Bear/Judge debate on Claude Opus 4.7, Kelly + ATR position sizing. Python · Kalshi + Polymarket adapters.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "Python",
      "significant_languages": [
        "Python",
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Orallexa",
      "type": "User",
      "login": "alex-jb",
      "company": null,
      "location": null,
      "followers": 9,
      "avatar_url": "https://avatars.githubusercontent.com/u/43049907?v=4",
      "created_at": "2018-09-06T21:34:37Z",
      "is_verified": null,
      "public_repos": 67,
      "account_age_days": 2879
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.2.2",
          "kind": "patch",
          "published_at": "2026-07-08T14:24:37Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2026-07-07T14:03:26Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-07-07T13:53:25Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-07-07T13:12:49Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-04-04T02:29:03Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "794a2ec0ce0b1271b468814eee47c2cd4edde147",
          "body": "Per PORTFOLIO_UPGRADE_BRIEF.md §A5. Standard hygiene for market-facing repos.\nNo functional changes.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add educational-research / not-financial-advice disclaimer",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-12T15:08:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e16976b667ddbb8c3d1f0bb001ed4d52052da943",
          "body": "CRITICAL data-integrity fix. 2026-07-08 audit found polymarket-decisions.jsonl\nwas 205/208 (98.6%) uniform-0.5 sports rows since 2026-07-04. v1.1.0 signal-\nside guards didn't catch the queue_consumer.py persist path.\n\n- markets/auto/queue_consumer.py: add _should_persist() + queue/rejected/ sink\n- t\n[…]\n- Test surface +8 (37/37 across the 3 guard test files)\n\nFix goes live tonight 21:30 NY on next cron fire (no deploy step needed).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(v1.2.1): persist-boundary guards + backfill 205 corrupted rows",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-08T14:23:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4c07b3be477664db2453df6c012cb9ef7db434af",
          "body": "Two README fixes and one new distribution surface:\n\n1. README hero adds \"Different from other AI-trading repos\" paragraph\n   that names the distinction from ai-hedge-fund and similar repos:\n   Orallexa is a calibrated multi-agent decision system with a public\n   Brier log, direction and sizing kept \n[…]\nyle Risk Sizer from engine/risk_sizer.py into a\n   standalone callable skill for Claude Desktop / Cursor / OpenCode.\n   Named invariant pinned: sizer never emits a direction; direction\n   is upstream.",
          "is_bot": false,
          "headline": "Anti-AI-hedge-fund positioning + honest test count + Risk Sizer skill",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-08T03:00:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b0cda34a4da0fbd5fbe7f55c4d7cf40fd9c3c2bc",
          "body": "Completes the v1.2.0 skeleton wire-up. Risk Sizer is now optional\ninside run_lightweight_debate() — pass sizer_kwargs to enable, omit\nto get identical v1.2.0 behavior.\n\nDirection map (Judge → Sizer):\n  BUY  → long\n  SELL → short\n  WAIT → no_op (Sizer skips)\n\nJudge's direction is IMMUTABLE — Sizer on\n[…]\nisk_sizer_error (non-fatal)\n\nDownstream: decision_log.jsonl now captures Sizer rationale in\nout.reasoning trail so bank counsel reading the log sees the sizing\nstory alongside the direction reasoning.",
          "is_bot": false,
          "headline": "feat(v1.2.1): wire Risk Sizer into run_lightweight_debate",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-07T14:03:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "77884a58767a797144715af30f92ba2aaee60952",
          "body": "Ships the implementation of the design skeleton at\ndocs/roadmap/v1.2.0-finpos-dual-agent.md (2026-07-07 late-night).\nReference: FinPos (arXiv 2510.27251) — models that conflate directional\nreasoning with position sizing score worse on both dimensions than\nmodels that split them.\n\nShips:\n- engine/ris\n[…]\ne and testable in isolation until then.\n\nEffort: 2 hours (per skeleton estimate).\n\nFirst tag chain: v1.0.0 (2026-04-04) → v1.1.0 (2026-07-07 uniform-0.5\nguard) → v1.2.0 (2026-07-07 FinPos Risk Sizer).",
          "is_bot": false,
          "headline": "feat(v1.2.0): FinPos Risk Sizer voice — direction separated from sizing",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-07T13:53:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c72ae1b79fc441c8de9464bb16bfa7e799e08456",
          "body": "Ships design + module stub + contract-test spec for v1.2.0 based on\n2026-07-07 OSS-survey recommendation (Agent 1 output). FinPos paper\n(arXiv 2510.27251) shows models that conflate directional reasoning\nwith position sizing score worse than models that split them.\n\nCurrent Orallexa Judge voice does\n[…]\n, PM gate, kill-conds)\n- 4-hour effort estimate\n- Success criteria for tagging\n\nReady for Alex + Yang capstone-cohort review. Implementation\nstarts next session; this skeleton unblocks the discussion.",
          "is_bot": false,
          "headline": "docs(roadmap): v1.2.0 FinPos dual-agent split design skeleton",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-07T13:35:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2871a88885be2158c33b8f976699ec08e62dcedc",
          "body": "CRITICAL bug fix: 2026-07-07 audit of production\n~/.orallexa/markets/polymarket-decisions.jsonl found 200/203 (98.5%)\nof our_p_yes decisions collapsed to exactly 0.5 on World Cup markets.\nEvery single one wrote a +47% fake edge against a market priced at 3%.\nDownstream paper trader was consuming gar\n[…]\norm-0.5 count: 200 (98.5%)\n  [audit] ALERT: uniform-0.5 collapse detected\n\nRuntime install (~/.orallexa/markets/scripts/) synced with repo.\nFirst tag since v1.0.0 (2026-04-04). 3-month drought closes.",
          "is_bot": false,
          "headline": "feat(v1.1.0): uniform-0.5 collapse guard + production audit script",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-07T13:12:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9e5b1b588606e2a3d15678ac14dd68d9d7f7f30d",
          "body": "…13 wire-in)\n\nShips the \"wire insider_signal into spacex-daily\" upgrade from the\n2026-07-02 deferred queue — but as a SEPARATE script that runs\nindependently, not by editing the live spacex-daily.sh cron.\n\nWhy not edit spacex-daily.sh directly\n-------------------------------------\nThe live spacex-da\n[…]\ns/auto/insider_join.enrich_decision_with_insider (2026-06-22)\n- brain 2026-07-02 EVENING entry (deferred: orallexa insider→spacex)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(insider): standalone SpaceX decision enrichment script (Tier-2 #…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-04T14:45:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "afb9cae23f90c7b633d5de56b6a3ed986e280ad4",
          "body": "…urst section\n\nBilingual rule ship — public GitHub READMEs must be bilingual EN+CN\nper feedback_readme_bilingual. README.md was updated with the\n2026-07-02 shipping burst on d0be3b1; README_CN.md is now synced.\n\nTest badge 990+ → 1300+ (matches actual: 1317 collected clean).\n\nAdded Chinese section d\n[…]\nghts the LIVE kill-conditions cron shipped c8587c7 — every night\n21:00 NY, state persisted to ~/.orallexa/markets/kill_state.json.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(zh): README_CN sync — badge 990+ → 1300+ + 2026-07-02 shipping b…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-03T21:17:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c8587c7b3e882a06b0e149d443ccae75e3d9dba0",
          "body": "Wires engine/kill_conditions.py into a live nightly rhythm.\nGuarantees at least one fresh check per day; morning paths that\nfind stale kill state (>30h) should treat it as WAIT.\n\nWhat ships\n----------\n- markets/auto/kill_conditions_cron.py — reads paper P&L history +\n  polymarket brier history + dec\n[…]\n+shadow deep-research entry\n- 2026-06-30 audit finding \"No kill condition on paper loss\" —\n  this cron closes the operational loop\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cron): kill-conditions nightly launchd cron + install guide",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-03T01:48:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d0be3b103f50cfbe77a2fdb61a05b15971f221cb",
          "body": "…ollection errors\n\nCHANGELOG\n---------\nFull 2026-07-02 entry documenting 8 Tier-1/Tier-2 upgrades from the\ndeep-research roadmap: kill_conditions + reliability diagram + audit\nblock + ATR default + edge_thesis (Tier-1); Kelly, Platt, Dixon-Coles,\nCPCV + wire-ups (Tier-2). 257 new tests, opt-in wire-\n[…]\n they were pre-existing at least since the\nlast full-suite pass. Now anyone can run `python3 -m pytest tests/`\nwithout setup pain.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(polish): CHANGELOG for 2026-07-02 shipping burst + fix 5 test c…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T16:26:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7961978ef15bc54a7b9f050b1b9d6a72269a0fe6",
          "body": "…e-up)\n\nCloses the loop between engine.kill_conditions (Tier-1 #10 primitive\nshipped earlier today) and the final BUY/SELL approval gate.\n\nUntil this commit, \"when do we stop trading\" lived in kill_conditions\nbut nothing consumed it — the 2026-06-30 audit's #1 danger finding\nwas still unaddressed at\n[…]\ntion on paper loss —\n  potentially $1-5K burn before auto-stop\"\n- 2026-05-27 -$1015 paper P&L audit that motivated the whole thing\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(pm): wire kill_conditions into portfolio_manager (Tier-1 #10 wir…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T16:09:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f9d2622ec4d8fac0676ae84bedd288d131aa5935",
          "body": "…ntel\n\nTwo production wire-ups of primitives shipped earlier today.\n\n1. Platt what-if in brier_audit.py (Tier-2 #7a wire-up, safe)\n------------------------------------------------------------\nAdds `render_platt_whatif_section(results)` — fits Platt on the same\nin-memory results the reliability diagr\n[…]\ning (8ec872c, this session)\n- Prophet Arena middle-bin compression (arxiv 2510.17638)\n- 2026-05-27 -$1015 fixed-bucket paper audit\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(wire-up): Platt what-if in brier_audit + Kelly opt-in in trade_i…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T16:00:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7bd6014facb9e5cf88e5a038bf1decbde017439d",
          "body": "Adds the file-cache + auto-refit path so polymarket_daily.py can\nconsume the calibrator with a single load_or_refit() call without\neach cron fire re-scanning the entire JSONL history.\n\nWhat ships\n----------\n- engine/platt_calibration.py:\n  - save(calibrator, path) — persists A/B/n_train/brier fields\n[…]\n wired in this commit — that's\nthe follow-up commit + needs a rules.json toggle to opt in without\ndisturbing paper-P&L continuity.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(calibration): Platt cache + load_or_refit helper (Tier-2 #7a)",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T15:52:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6ece8ad1935072802fe17d6c0faad44e101c3e74",
          "body": "Closes the loop between engine.insider_signal (shipped 2026-06-19\nc34de90) and the final BUY/SELL approval gate in\nengine.portfolio_manager. Until this commit, SEC EDGAR Form-4\ninsider data was rendered into the daily brief + attached to\nenrich_decision_with_insider (2026-06-22 insider_join) but had\n[…]\nts/auto/insider_join.enrich_decision_with_insider (2026-06-22)\n- 14d paper P&L audit (2026-05-27) — the -$1015 that motivated this\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(pm): wire insider_signal into portfolio_manager gate (Tier-2 #13)",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T15:49:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "519d0c35452166510ceba54a1b211c120ef33dc5",
          "body": "… #14)\n\nUpgrades markets/auto/walkforward.py from 4-window sliding CV to\nLópez de Prado's CPCV (Adv. in Financial ML 2018 ch. 12) as an\nopt-in flag.\n\nWhy upgrade\n-----------\nSliding-window CV underestimates true OOS error on trading data:\n  1. Label overlap. When lookahead=5d, decisions on day 3 and\n[…]\n5 (embargo), §12.7 (CPCV).\n- Bailey, D. et al. (2014) \"The Probability of Backtest Overfitting\"\n  — motivates C(N, k) enumeration.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cv): Combinatorial Purged CV + walkforward --cpcv opt-in (Tier-2…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T15:46:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5547c99573f6dab8b498f0a3ddfc880dca25ed70",
          "body": "Directly addresses the Prophet Arena middle-bin compression pathology\nthat Tier-1 #8 (reliability diagram) surfaces. Fixes what the audit\ndiagnoses.\n\nWhy\n---\nProphet Arena (arxiv 2510.17638 §4.3) found LLM forecasters — Haiku,\nSonnet, GPT-4o — systematically compress p_yes into the 0.30-0.70\nmiddle \n[…]\nstic Outputs for SVMs...\"\n- Bridgewater (2025-09) AIA Forecaster, arxiv 2511.07678\n- Prophet Arena (2026-05) arxiv 2510.17638 §4.3\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(calibration): Platt-scaling post-hoc calibrator (Tier-2 #7a)",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T15:42:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "59b1a102050a5cc25bc3f9edfa54f8e1e0dc6400",
          "body": "…on pipeline bridge\n\nTwo shipments that had been sitting uncommitted from the 2026-06-22\nJason Marsh call + 6/19 insider_signal work:\n\n1. markets/auto/export_for_flow.py — Orallexa → Flow Spatial\n   Cognitive Platform CSV exporter. One row per (date, ticker) with\n   axes mapped to Flow's spatial dem\n[…]\nticker probability. `enrich_decision_with_insider` is the\n   thin function adapter that closes the loop.\n\n33 new tests. All green.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(export+insider): Flow SCP CSV exporter + insider_signal → decisi…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T15:40:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3c5b3e8369c9d6f176be9cf682479b838c3af7af",
          "body": "Replaces the \"penaltyblog full-fit upgrade pending v0.2\" TODO in\nsports_pricer.py with a real MLE fit.\n\nWhy vendor\n----------\npenaltyblog is installed in Alex's env but crashes on import via\narviz -> scipy.signal.gaussian (removed in scipy>=1.13). Fighting\nthat dep tree risks breaking other modules \n[…]\n. Follow-up commit will add\na static-JSONL training-data path + wire predict_match_from_fit\ninto estimate_p_yes() for sports legs.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(sports): vendored Dixon-Coles bivariate Poisson MLE fit (Tier-2 #6)",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T15:36:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8ec872c2fac126c7a5a5c4ba80b057545cad1f46",
          "body": "Ships the Half-Kelly + drawdown-adjusted-Kelly + kelly_notional API\nAlex can layer on top of the fixed-bucket sizing in trade_intel.py.\n\nWhy\n---\nCurrent sizing (setup_to_sizing_notional in trade_intel.py) uses\nFull=25× / Half=15× / Short-half=12× buckets that don't adapt to\nedge magnitude. Deep-rese\n[…]\nl.py — that's the follow-up integration\nPR after CPCV walk-forward (#14) validates the sizing improvement is\nrobust out-of-sample.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(sizing): Fractional Kelly sizing primitives (Tier-2 #11)",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T15:30:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5a6ea668334d86189ccad263b5a31b43252a99d9",
          "body": "Ships 2026-07-02 Tier-1 upgrade #1 from the deep-research roadmap.\nAlex approved the cost bump.\n\nWhy\n---\nProphet Arena (arxiv 2510.17638, 2026 H1) direct finding:\n\n  \"strong models perform much better in the extreme bins (0-0.1 and\n   0.9-1.0), where it almost always predicts correctly. Weaker model\n[…]\nmaterialize within 7-14 days of Sonnet running,\nthe diagnosis is one layer deeper — prompt design or event choice —\nnot the model.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(polymarket): switch estimator default Haiku → Sonnet 4.6",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T15:25:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "74fa87515b75c3c97660a52ed04c76a241b5c8bc",
          "body": "Ships 2026-07-02 Tier-1 upgrade #8 from the deep-research roadmap.\n\nWhy\n---\nProphet Arena (arxiv 2510.17638, 2026) direct finding:\n\n  \"strong models perform much better in the extreme bins (0-0.1 and\n   0.9-1.0), where it almost always predicts correctly. Weaker models\n   compress toward middle-of-b\n[…]\nghtly against\ndecision_log.json. The reliability diagram appears in the next nightly\nreport automatically. No cron changes needed.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(brier): 10-bin reliability diagram — expose middle-bin collapse",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T15:23:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1ee7ae7b85ce7edb3411c0488f7253135e2de977",
          "body": "Ships 2026-07-02 Tier-1 upgrade #9 from the deep-research roadmap.\n\nWhy\n---\nAnthropic launched Claude Science on 2026-06-30 positioning \"every\noutput carries an auditable history of how it was made\" as the\ncore primitive for AI deployment in high-risk regulated scientific\ndomains. Their artifact sha\n[…]\ninance/banking on the\nsame 3-day window = concurrent independent industry validation of\nthe reproducibility-first trust primitive.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(polymarket): auditable-history port — Claude Science shape",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T15:21:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fe517f1bb7b1f27d1878fd8e64ecfa911b2c6ace",
          "body": "Ships 2026-07-02 Tier-1 upgrade #10 from the deep-research roadmap.\n\nWhy\n---\nThe 2026-06-30 architecture audit found the single most dangerous\npattern on the stack: NO kill condition on paper loss. \"If real\nmoney were $300, system keeps emitting BUY signals through -$1,015\npaper drawdown with no exp\n[…]\nt touches many entry points and Alex should\nreview each. The invariants are testable HERE; enforcement lands\none caller at a time.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(engine): kill_conditions — real-money gate + auto-stop for Orallexa",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T15:17:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b7254c57b9d0a28ba8785ab9e12163834955d124",
          "body": "Ships Tier-1 upgrade #5 from the 2026-07-02 deep-research roadmap.\n\nThe bug that hid $6,823\n-----------------------\n2026-05-29 backtest showed baseline -$873 vs +ATR stops +$5,950 on\nn=128 same 30-day window (p<0.005 statistically significant). ATR\nstops sat behind `--use-atr-stops` opt-in flag for \n[…]\nn the deep-research report). The\n--help smoke test manually verifies CLI still parses cleanly.\nPolymarket tests still 42/42 green.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(portfolio): ATR stops default TRUE + mandatory flag enumeration",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T14:22:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "acbf6554e368fe26878b602c06af4f57ec0cd389",
          "body": "…oadmap\n\nThree parallel Explore agents synthesized deep research on the Orallexa\nstack (see ~/Downloads/orallexa-upgrade-roadmap-2026-07-02/roadmap.pdf).\nThis commit ships three of the five Tier-1 fixes — the ones that touch\npolymarket_daily.py. #1 (Sonnet 4.6 default) waits on Alex approval;\n#5 (AT\n[…]\n (touches portfolio_paper.py, separate)\n- #8 reliability diagram per bin (brier_audit.py, separate)\n- All Tier-2 items per roadmap\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(polymarket): ship Tier-1 upgrades #2 + #3 + #4 from 2026-07-02 r…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-07-02T14:20:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7ca66b391d4c7daa8808b6be3923991d097206e5",
          "body": "…t cron\n\nCloses the v1 → v2 wire-in for the 2026-06-30 sports-skip fix. Sports\nmarkets (126/173 historical decisions are \"Will X win World Cup\") now\nget a REAL probability from an Elo-only Monte Carlo tournament-winner\nsimulator instead of just returning None.\n\nWhat's added\n------------\n- engine/spo\n[…]\n, Super Bowl,\n  Wimbledon — each needs its own structure + Elo dict).\n- penaltyblog full Dixon-Coles fit on FBref historical data.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets): wire sports_pricer tournament-winner MC into polymarke…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-30T16:24:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0b1f5de529fefacdaf16c07066b5156d6c27c40d",
          "body": "…oise\n\nBug surfaced by queue_consumer.py first fire (commit e4ffa5f, 2026-06-29):\nof 173 historical Polymarket decisions in the audit JSONL, 126 (73%)\nare sports markets (\"Will X win the 2026 FIFA World Cup\"). Haiku\nhad been returning a default-ish ~0.5 p_yes for ALL of them — producing\na fake mean \n[…]\norts markets (boom-mock fires if SDK gets called) AND still\n  flows to Anthropic for non-sports (deterministic mock returns 0.42).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(markets): skip sports-market Haiku estimation — 73% of tape was n…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-30T16:05:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e4ffa5f4c0984f670783a0446eb1401dddbaebc3",
          "body": "decisions into audit JSONL\n\n2026-06-30 cross-stack audit caught: ~/.orallexa/markets/queue/\npending/ had 173 .md files accumulated since 2026-05-11 with judged\ndecisions sitting unprocessed. polymarket_daily.py drops one .md per\nmarket it scores; no consumer was reading them. Result: no Brier\naudit \n[…]\ndaily 21:30 NY,\nafter polymarket_daily.py 09:00 fire finishes the queue write loop.\n\nWrapper: scripts/markets-queue-consume.sh (TCC-sidestep pattern\nmatching morning-deep-dive.sh / sports-morning.sh).",
          "is_bot": false,
          "headline": "feat(markets): queue_consumer.py — flush 173 pending Polymarket",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-30T14:55:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e3b9f046d6b6af54799ca8be54d531f79175c2e4",
          "body": "2026-06-29 active 7-leg WC parlay session ran into the gap:\n  Norway 角球 U11.5 + Germany 牌 U4.5 can't go through MC because\n  Dixon-Coles only models goals. Need a separate Poisson over per-\n  team corner / booking distributions, which needs different\n  training data (FBref per-team corner counts, fo\n[…]\nGermany cards U4.5\", 0.745),\n      (\"Norway corners U11.5\", 0.74),\n    ],\n    elo_lookup=...,\n    bracket=...,\n    n=100_000,\n  )\n\nEV = result[\"joint_prob\"]  # vs naive: result[\"independent_baseline\"]",
          "is_bot": false,
          "headline": "feat(parlay): p_joint_parlay_mixed — handles MC legs + non-goal props",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-29T13:29:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "240865dd60eed54d92a1fbdf9cabbcd39354cd4d",
          "body": "Three follow-ups from 2026-06-29 sports stack install incident:\n\n1. penaltyblog drop. Its __init__.py eager-imports aesara; aesara\n   crashes on modern numpy (numpy.__config__.get_info() removed API).\n   Our engine/sports_pricer.py uses pure-Python Dixon-Coles math —\n   no penaltyblog needed at runt\n[…]\nll\n  green in venv.\n\nFBref schedule call still 403s (Cloudflare bot-block); cron now\nfail-graceful — falls through to Elo snapshot only. The parlay\nsimulator's elo_lookup arg gets its data either way.",
          "is_bot": false,
          "headline": "fix(sports): venv isolation + ClubElo API + static national-team Elo",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-29T13:20:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "77585d006018095aed48a15ec56dfaeb5aba93ed",
          "body": "…relation\n\nCloses 2026-06-29 research recommendation. 5-module ship gives Orallexa\nreal sports edge by replacing the Haiku our_p_yes uniform-0.15 trap\n(diagnosed 2026-06-22) with a deterministic Dixon-Coles probability\nsource, plus MC bracket simulation that catches the correlation\nbetween same-tour\n[…]\ne\ntournament-advance picks like \"Spain + England + Mexico all advance,\"\nnaive independent multiplication overstates the parlay EV. Run\np_joint_parlay() to get the actually-correlated true probability.",
          "is_bot": false,
          "headline": "feat(sports): football prediction stack — Dixon-Coles + MC parlay cor…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-29T05:30:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "50ef054bf0e6ae4303686038d620cbf1745dd2a7",
          "body": "…or any p(up) emitter\n\nCloses the 'ship the primitive, but how do I plug it in' gap on c34de90.\nAdds wrap_signal_with_insider() — a decorator-style integration point\nthat any existing signal generator (diffusion_signal.predict, the LLM\ndebate judge, multi-agent verdict, etc.) can wrap WITHOUT changi\n[…]\n engine/multi_agent_analysis.py\nor markets/event_debate.py) is the next step — but that's a per-callsite\nchoice, not a global one.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(engine): insider-signal integration wrapper — opt-in decorator f…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-22T15:48:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c34de90561a0fafae263f9517d75c44f70ce8caa",
          "body": "Closes the data-but-no-signal gap surfaced by 2026-06-20 daily brief\n§5: markets/auto/news_morning.py fetch_insider_transactions has been\npulling SEC EDGAR Form-4 data for ~3 weeks (visible as the 7 insider\nrows in the daily brief), but the data only renders into the brief —\nit never feeds back into\n[…]\n only)\n  - Earnings-window cooldown stacking (separate primitive)\n\nSource signal: alex-brain/research/daily-brief/2026-06-20.md §5\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(engine): insider-trade signal primitive — Form-4 → p(up) tilt",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-22T15:23:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d2d1b56e71f8e9ad87725a059b272bc001a9aaba",
          "body": "Surfaced by 2026-06-20 daily-brief-distill cron §3 row 6: GPT-4o vs\nGLM-5.2 quant A/B (5 prompt 对比). The previous commit (a6750a9)\nunblocked it by adding GlmProvider; this commit ships the actual\nharness that drives the comparison.\n\n5 representative prompts extracted from real call sites:\n  - bull  \n[…]\nstory/provider-ab/ —\nfollow-on runs accumulate there per existing eval/history convention\n(drift.jsonl + dated eval_*.json files).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(eval): provider A/B benchmark harness — anthropic × openai × glm",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-20T23:42:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a6750a93963f08035396fd041d8afd544c1f9f90",
          "body": "Unblocks the GPT-4o vs GLM-5.2 quant A/B benchmark surfaced by the\n2026-06-20 daily-brief-distill cron. The 11-agent stack's existing\nmulti-provider abstraction (AnthropicProvider / OpenAIProvider /\nGeminiProvider) had GLM as the missing slot — registry had no glm\nentry, so flipping ORALEXXA_LLM_PRO\n[…]\n dspy_judge.py /\nstrategy_explainer.py call sites), run them under anthropic/openai/glm,\nscore on output quality + cost + latency.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(llm): add GlmProvider — ZhipuAI GLM via OpenAI-compatible endpoint",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-20T23:13:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f61d198270ab5993f59a523f9cfb2ee2010052d3",
          "body": "…ocal",
          "is_bot": false,
          "headline": "chore: gitignore .claude/skills/ — gstack-installed skills are user-l…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-19T02:27:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ec08b9baed96312f61ca5a33af13acb494d7f11",
          "body": "9 keyword→URL mappings for Karpathy canonical resources:\n- micrograd (ep1), makemore (ep2-4), nanoGPT walkthrough (ep7),\n  GPT Tokenizer (ep9), Intro to LLMs (1h talk), nanochat ($100/4h),\n  nanoGPT repo, State of GPT (MSBuild 2023), Software 3.0 essays.\n\ncompile_brief() now matches today's curricul\n[…]\nf-attention)   → matches nanoGPT walkthrough\n- Day 20 (Tokenization)     → matches Tokenizer ep9\n- Day 31 (Pretraining)      → matches nanochat\n- Day 37 (Data parallelism) → no match (correctly empty)",
          "is_bot": false,
          "headline": "feat(daily-brief): add karpathy_references block to curriculum.yaml",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-17T19:43:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8842b3aa7e15c2db2734961e8b1120508219db82",
          "body": "First distribution package for Orallexa. Lead with the false-positive\nbacktest postmortem (not the architecture) — calibration-honest eval is\nthe differentiation. 5 root causes documented in\nresearch/2026-06-08-markets-stack-deep-diagnosis.md.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(launch): HN Show + r/algotrading + LinkedIn drafts",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-09T19:07:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5f6c500da8d6ef91d21b7256698a6cbcb7816224",
          "body": "Walk-forward verdict 2026-06-09 was FAIL (mean OOS Sharpe -3.08) because\nthe entry rule ran momentum scoring uniformly across regimes. June 2026\nwas ranging, momentum signals are anti-edge there.\n\nADX-based regime gate:\n- ADX >= 25 → TRENDING — momentum scoring valid (+7 as before)\n- ADX < 18  → RAN\n[…]\n BUY)\n- 18-25     → UNCERTAIN — cap score ≤ 55, prefer WAIT\n\nSource: research/2026-06-08-markets-stack-deep-diagnosis.md cause #3.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(prediction): ADX regime gate (P1.1) — trending/ranging/uncertain",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-09T16:51:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ff97e20a4274ad321c7cae7fd13bbef59a3875aa",
          "body": "scripts/walkforward.py slices decision_log into N sliding (train, test)\nwindows and reports mean Sharpe-proxy over out-of-sample test windows.\n\nLive-trading gate:\n- mean OOS Sharpe > 0.5\n- worst-window Sharpe > 0\n- worst-window max DD < 25%\n\nIf any fail → \"don't trade real money\" verdict. This is th\n[…]\ne #2 (worst OOS Sharpe) when run forward into June ranging.\n\nSource: research/2026-06-08-markets-stack-deep-diagnosis.md cause #4.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets): walk-forward validation framework (P1.2 from diagnosis)",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-09T16:18:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "077b3d708580f7881e700594533796a31a64d3e4",
          "body": "…% paper P&L)\n\nTwo bugs found in 2026-06-08 deep diagnosis:\n1. RSI >= 70 was +3 (treated as continuation); now -10 (exhaustion)\n2. 2+ extension signals (RSI>60 + BB%>0.7 + MACD+ADX>25) → cap score 55\n\nRoot cause of 6/01 paper basket: 9 BUYs all stopped -5% in 5 days because\nsystem bought at momentum top (RSI > 60). See research/2026-06-08-markets-stack-deep-diagnosis.md\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(prediction): RSI>=70 bug + anti-extension gate (root cause of -16…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-08T20:39:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a7241138304305619f27d78e4bb5baddc9780315",
          "body": "…olymarket_daily\n\nmarkets.queue 09:00 ET cron has been failing daily with:\n  curl_cffi.requests.exceptions.ConnectionError: Failed to connect to\n  gamma-api.polymarket.com port 443 after 2350 ms\n\nHealthcheck (2026-06-04) initially mistook this for TCC because\nmarkets.queue.err.log contained both pre\n[…]\nwork strings; raises immediately on HTTP errors / json errors / other.\n\nNext morning 09:00 cron should clear the err log of these.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(markets): polymarket_client._get DNS retry — same root cause as p…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-04T22:22:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f0c4b76cdcc99e0d51b2ac7ff29e52a6ce9584ff",
          "body": "PolyAlert (project #2) Phase 1 Telegram notifier.\n\npolyalert_telegram_bot.py reads polymarket_decide.py --json output,\nfilters by subscriber tier (free/starter/pro), and pushes per-event\nHTML messages to Telegram. Alert criteria:\n  - All 🟢 READY verdicts (every tier sees them)\n  - 🟡 WATCH with avg_d\n[…]\nhase 2 moves subscriber storage to Supabase (Stripe-gated tiers).\n\nSpec: alex-brain research/projects-2026-06/02-polyalert-spec.md\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(polyalert): Telegram bot foundation + subscribers schema",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-01T02:06:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bbc57def08145f3075192dccec2dd006ffd3a041",
          "body": "Borrowed pattern from TradingView MCP (greenpeas007/tradingview-mcp-jackson):\nconfig-as-code for event watchlist. Enables PolyAlert (project #2) to scale\nfrom 4 → 100+ events without editing Python source.\n\nrules.json schema:\n  - watchlist: array of {slug, friendly, sub_question_filter, tier}\n  - al\n[…]\ns, openai_500b) gracefully ignored.\n\nFoundation for PolyAlert SaaS (research/projects-2026-06/02-polyalert-spec.md\nin alex-brain).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(polyalert #2): rules.json declarative event config",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-06-01T01:31:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0684a22f1df96178355f3cd358c465dcffad4391",
          "body": "…er event\n\nPlain-Chinese verdict per event: 🟢 READY / 🟡 WATCH / ⚪ SKIP, with\nconcrete operational instructions when READY:\n  - 多少 USDC (fractional Kelly clamp [$20, $100])\n  - 买 YES/NO + max entry price\n  - take-profit + stop-loss levels\n  - max P&L upside/downside\n  - hold duration\n\nDecision rules:\n[…]\nlymarket_decide.py via subprocess\n  - Subject line shows verdict at glance\n  - Detailed backtest tables moved to bottom (can skip)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets/auto): polymarket_decide.py — concrete entry decisions p…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-31T16:28:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dbc5e8ca0f14904fc406a8f41a39ac471654a2e7",
          "body": "…sim, ATR stops\n\nThree ships across 2 days that flip stock side from -10% paper P&L to\n+59% paper P&L on the same decision log.\n\nPhase A #1 — polymarket_daily.py\n- Add estimate_p_yes() — Claude Haiku 1-shot probability estimate per event\n- JSONL output now includes our_p_yes / our_conviction / our_r\n[…]\no-paper/2026-05-27.md (alex-brain) — first P&L report\n- research/portfolio-paper/2026-05-29.md (alex-brain) — +ATR scenario report\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets/auto): Phase A/B1 — polymarket self-estimate, paper P&L …",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-29T16:59:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ad1b17663065a020eb9636aca1ea5cb810b4775b",
          "body": "Adds 30-day rolling pairwise correlation across the 14-ticker watchlist\nto spacex-daily brief. Flags 'diversification illusion': when two\nTrend setups have correlation > 0.7, sizing both Full or Half is\ncloser to leverage than hedged diversification.\n\nFirst run caught 3 real illusions today (all in \n[…]\nr. System now surfaces this BEFORE trade.\n\nCost: 1 yfinance batch download per cron run (~3s wall time).\nNo new cron, no new deps.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets/auto): correlation matrix + diversification illusion alert",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-13T19:35:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "141261c71158f09439df7b3c641dbb201eb275ad",
          "body": "Adds 'Recent insider activity' table to news-morning brief — last 14\ndays of material Form 4 transactions across the 14-ticker watchlist,\nfiltered to Director / CEO / CFO / 10%+ owner only.\n\nFirst run found 7 trades, ALL SELLs, zero BUYs (bearish baseline).\nStandout: LUNR's 10%+ owner Ghaffarian sol\n[…]\noute returned mixed\nforms despite type=4 filter).\n\nCost: ~14 yfinance calls per news-morning run = +5s wall time, $0.\nNo new cron.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets/auto): SEC Form 4 insider transactions via yfinance",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-13T19:30:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7d9a973e729973a1a2f309996428aa35426398ca",
          "body": "Two additions today:\n\n(1) daily-brief/ — mirror of the personal AI research pipeline at\n    ~/.orallexa/daily-brief/. Six files (daily_brief.py, weekly_review.py,\n    heartbeat_check.py, 2 .sh wrappers, curriculum.yaml) now have git\n    backup so the multi-machine Mac switch + disk-failure scenarios\n[…]\nia the new cross-system integration (separate commit, daily_brief.py\nedits live only at canonical for now since not in this repo).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: daily-brief git mirror + Polymarket IP heartbeat in news-morning",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-13T19:26:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f59063e508633acc9edda702b9e2c31520178e77",
          "body": "…+ Brier drift\n\nFour enrichments shipping together as one pipeline upgrade:\n\n(1) VIX regime detector — yfinance ^VIX. Tiers:\n    < 15  → calm\n    15-20 → mildly elevated (no change)\n    20-30 → elevated (downgrade Trend one tier)\n    > 30  → panic (force everything to Tiny/Pass)\n    First run today:\n[…]\nmpt drift /\n    regime change / data issue). Suggests audit action.\n\nCost: zero additional Claude calls. yfinance fetches add ~2s.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets/auto): VIX regime + earnings calendar + sector rotation …",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-13T15:40:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "086ce6d322f286e8232ffaa05dd084bf0564f9b5",
          "body": "Adds Follow-Through Day detector (William O'Neil / IBD signal that\nconfirms a market bottom). When FTD fires on S&P 500 or NASDAQ:\n- 4-7 trading days past a recent low\n- index gains ≥ 1.7% on the day\n- volume > prior day\nthen all 'Trend' setups upgrade one tier:\n- Half → Full🔥 (regardless of confide\n[…]\nitive upgrade.\n\nSourced from tradermonty/claude-trading-skills (2026-05-13\nGitHub scan). No new cron, no new deps beyond yfinance.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets/auto): FTD detector — regime upgrade for Trend setups",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-13T15:34:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c02119ddd2e6a7930de67ea93e96bb5ee6a55757",
          "body": "…meworks\n\nMirror of the canonical install at ~/.orallexa/markets/ into git for\nversion history. Three-cron pipeline that runs unattended:\n\n  09:00 NY  news_morning.py    → pre-market RSS + 14-ticker filter + Claude impact tag\n  14:00 NY  spacex-daily.sh    → Orallexa pilot 14 tickers + setup classif\n[…]\n/. This mirror is for\nops review + version diff. Future enhancement: symlink canonical into\nthis repo so edits go straight to git.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets/auto): daily-research cron stack — 3 cron + 5 master fra…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-13T14:50:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4f9d845c1bc51bcea20d0de595689aeabdfda098",
          "body": "…rprint\n\nPolymarket Gamma + CLOB are Cloudflare-fronted with Bot Fight Mode enabled.\nPlain `requests` (and default macOS curl) get TLS-reset at handshake layer\nbecause LibreSSL's TLS fingerprint is flagged as bot. Verified 2026-05-12\non both gamma-api and clob endpoints.\n\nFix: lazy-import curl_cffi.\n[…]\npires OR we move to a\nfresh IP (VPN / mobile hotspot), the curl_cffi backend should pass\nthrough Cloudflare cleanly going forward.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(markets/polymarket): use curl_cffi to bypass Cloudflare TLS finge…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-12T18:51:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5d0fc56d4535b7f1d3af3ae4afee0e91c44dd045",
          "body": "…ge chain\n\nInspired by yorkeccak/Polyseer (2026-05) — a 5th \"Critic\" agent that\nreads the entire debate chain (Bull + Bear + Judge) and flags structural\nfailures the Judge may have missed:\n\n  - same-source bias (both sides cite the same single article)\n  - missing base-rate anchor (Judge gave a prob\n[…]\nperty, queue card\n  rendering for all 3 verdicts + the no-Critic backward-compat case\n\n47/47 tests passing (34 prior + 13 Critic).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets): add Critic agent — 5th voice that audits Bull/Bear/Jud…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-12T03:32:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "346d78e18ae80a2ff6dea22318139eddb506ad54",
          "body": "Previously the launchd plists invoked python directly. Now they invoke\ntwo thin bash wrappers under `scripts/`:\n\n- markets-morning.sh  → run `queue` then `open ~/.orallexa/markets/queue/pending/`\n- markets-evening.sh  → run `retro` then `open ~/.orallexa/markets/retro/<today>.md`\n\nThe `open` calls s\n[…]\nboth scripts (syntax OK)\n- launchctl list shows both labels loaded\n- plists reference /Users/alexji/.../scripts/markets-morning.sh\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets/scheduler): wrap cron in shell scripts so Finder auto-opens",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-12T01:27:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b3f5fdd8d4ad1e96881b5faaeba7aa4968cef1e6",
          "body": "Kalshi rebranded their REST schema in 2024:\n- last_price → last_price_dollars (already 0..1, no /100 needed)\n- yes_bid → yes_bid_dollars; yes_ask → yes_ask_dollars\n- volume → notional_value_dollars\n- open_interest → open_interest_fp\n- Event tickers use KX prefix (KXNBAGAME, KXMLBRFI, KXFED) instead \n[…]\nmics, etc.\n\nVerified against live demo-api.kalshi.co: NBA Detroit/Cleveland game 5\nparses correctly with YES=0.610 and cat=sports.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(markets/kalshi): adapt to Kalshi 2024+ schema (_dollars suffix)",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-12T01:15:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bd62bbee9d22415ede3676687e6cf40519993f34",
          "body": "Builds the daily HITL operating loop on top of v0.1 markets module:\n\n- markets/pnl_tracker.py — parses decided/*.md cards for checked\n  decision boxes; persists Decisions to ~/.orallexa/markets/positions.jsonl\n  with dedup on market_id. PnL math for binary YES/NO bets including the\n  asymmetric NO-s\n[…]\n parsed it as side=NO position=$0 (sizing skipped), retro\nrendered the open-position table at ~/.orallexa/markets/retro/<date>.md.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets): v0.2 — PnL ledger + retro journal + launchd scheduler",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-12T00:01:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "186d9c871114803ea1bca902a9b16cb5affbe628",
          "body": "Adds a platform-agnostic markets/ package that adapts Orallexa's Bull/Bear\nLangGraph architecture to CFTC-regulated binary prediction markets. v0.1 is\nread-only by design — no wallet, no executor, no auto-trade. The only\noutput is a morning HITL markdown queue at ~/.orallexa/markets/queue/pending/\nw\n[…]\nngle-month drawdown >15% bankroll → 30-day pause + manual review\n3. Any path violating CFTC/Kalshi/Polymarket ToS → immediate stop\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(markets): v0.1 — Kalshi + Polymarket binary-event prediction module",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-11T23:46:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4ed68be78caafd58be9c3286c48af9f94944debe",
          "body": "Reverse-direction cross-link to vibex's /about → \"Sister project — Orallexa\"\nsection shipped in same session. Footer now reads \"Same author also\nshipped VibeXForge — Product Hunt where Claude is the judge\" with\n?ref=orallexa attribution.\n\nFree traffic exchange between two parallel-launching projects.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(leaderboard): cross-link VibeXForge in footer",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-07T22:27:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7cc35231c3c6ac860f3211ec3db8484502f167b8",
          "body": "…chd plist\n\nMirrors what we did for VibeXForge: code-side burn down to zero,\noperational steps documented, scheduled artifacts queued.\n\n== scripts/run_daily_pilot.py ==\nLast-mile glue between OrallexaBrain.run_prediction() and\nAlpacaExecutor.execute_signal(). Runs 7-ticker watchlist daily,\nappends e\n[…]\nrading, Wed Twitter +\nLinkedIn + Bluesky + Dev.to, Thu VC outreach + AI infra directory\nsubmissions. Includes Day-7 decision gate.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(launch): orallexa launch runbook + daily pilot + dspy gha + laun…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-07T19:42:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "127e82d66a9eb049cab54d9783d95706a8c521f5",
          "body": "Both gates currently choking traction are data gates, not code gates.\nThis doc lays out the 30-day operational path to clear them.\n\nGate 1 — Alpaca paper pilot:\n- bot/alpaca_executor.py is done; memory_data/decision_log.json\n  is empty (zero production decisions logged)\n- 5-step setup: Alpaca accoun\n[…]\nsts + 1.41 Sharpe\" into \"trader X used this\".\nThe marketing-agent r/algotrading draft (already queued) is the\nrecruitment surface.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(roadmap): 30-day unblock path — Alpaca pilot + DSPy Phase B compile",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-07T06:13:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e9e5e555c7f089f4b736046859e0f863f1be5b99",
          "body": "Two artifacts to support the seed-round prep that the README work\nthe last few weeks has been building toward.\n\n== /leaderboard route (orallexa-ui/app/leaderboard/page.tsx) ==\n\nPublic, indexable URL surfacing the walk-forward OOS Sharpe table.\nReads README.md's curated EVAL_TABLE block from GitHub r\n[…]\n budget caps)\n- Spend ($200/mo all-in)\n- 12-week milestone roadmap to 200 paying users\n- $1.5M seed ask with concrete use-of-funds\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(fundraise): public /leaderboard + traction slide",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-07T06:08:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ebc6de95717645e71bc641f9dfc4e1f413ef169f",
          "body": "…cron\n\nThe Day 8-9 spike shipped a vision-vs-text evaluator and nightly cron, but\nno production caller passes multimodal=True — both api_server.py:319 and\ncore/brain.py:440 leave the param at its default False. So decision_log\nnever accumulates `extra.multimodal_diff` entries, and the cron is locked\n[…]\n/ negative / garbage,\nthe partial-rate distribution (~300/1000 hits at 0.3), and env fallback.\n\nBoth READMEs documented (EN + 中文).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(multimodal): env-gated sampling so prod actually feeds the lift …",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-07T03:29:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c28cd0fca640a2f86b69939047d0e2ee495c857e",
          "body": "…otate cache key\n\nTwo bugs found in pre-landing review of the Day 8-9 spike:\n\n1. build_multimodal_eval_set.py exited 1 when memory_data/decision_log.json\n   was absent, contradicting the workflow's stated contract (\"no data ->\n   exits 0\"). Cron has been red 5 days running (2026-04-29 -> 2026-05-03)\n[…]\nrestore from the v1 prefix; each run saves fresh while starting from\n   the most recent snapshot.\n\n41 multimodal tests still pass.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): unbreak multimodal-lift nightly — honor no-data contract + r…",
          "author_name": "xji",
          "author_login": null,
          "committed_at": "2026-05-04T23:50:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "14175debb5f63ae99b3380030e1000bbc72981d1",
          "body": "Day 8 (demo orchestrator):\n* scripts/demo_multimodal_debate.py — single command runs the full\n  pipeline (render -> panel -> diff -> markdown report). Two modes:\n  live (~$0.005/run, hits Anthropic) and --mock (zero API calls,\n  canned responses designed to surface a killer disagreement —\n  text say\n[…]\nty), end-to-end run_demo\nmock-mode with and without --report.\n\nSuite: 990 passed (978 -> +12).\n\nREADME + README_CN: tests badge 920 -> 990, Architecture table now\ndocuments the Multi-modal Debate row.",
          "is_bot": false,
          "headline": "feat: multi-modal debate Day 8-9 — demo orchestrator + nightly lift cron",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T05:07:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "29d41deda623539d10c2ec4e29c8c45e34162109",
          "body": "…urns, ship/reject lift\n\nDay 7 closes the loop on the multi-modal debate spike. Mirrors the\nDSPy Phase B pattern: extract → label → evaluate → ship/reject.\n\n* scripts/build_multimodal_eval_set.py: pulls every decision_log record\n  with extra.multimodal_diff, expands to one row per pair, attaches N-d\n[…]\nwhen-text-wrong / per-class), decide (every status branch\n+ inclusive threshold), end-to-end synthesize→filter→evaluate→decide.\n\nSuite: full path 949 (Day 6) + 6 (stash) + 23 (harness) = 978 expected.",
          "is_bot": false,
          "headline": "feat: multimodal eval harness — extract pairs, label with forward ret…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T04:52:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7d63c25133fa862cb13b58945b1a9acd7a3baad0",
          "body": "…_log\n\nDay 3-5 produced the diff inside run_perspective_panel; this Day 6\nchange persists it. Same pattern as the Phase 10 debate text stash —\nevery /api/deep-analysis with multimodal=True now leaves a row in\ndecision_log carrying the text-vs-vision comparison. Future\nbuild_multimodal_eval_set.py ex\n[…]\nash conditional, to_dict() serialization, save_decision disk\nround-trip, extractor-eligibility gate finds non-empty diffs only.\n\nSuite: full path 949 (pre-Day-6) + 6 new = 955 once main suite re-runs.",
          "is_bot": false,
          "headline": "feat: stash multimodal_diff on decision.extra so it lands in decision…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T04:47:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "709276d25b3da2801be9a87a2ced51b37ed46dce",
          "body": "… diff helper\n\nDay 1-2 shipped the K-line renderer. This wires it into run_perspective_panel\nso a chart PNG can be sent alongside the text context for selected roles,\nand produces a structured comparison of text vs vision decisions.\n\n* PerspectiveResult.modality field (default \"text\", set to \"vision\n[…]\nt this unblocks: stash multimodal_diff on decision_log, accumulate\na few hundred deep-analyses with forward-return labels, decide\nwhether vision earns its seat — same eval-set pattern as DSPy Phase B.",
          "is_bot": false,
          "headline": "feat: multi-modal debate Day 3-5 — vision-enabled perspective panel +…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T04:39:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1362d3f93bc47a8da09f298f76a82a335d2775bc",
          "body": "Foundation layer for the multi-modal debate proposal. Pure rendering,\nno LLM wiring yet — that's Day 3-5 once we've eyeballed the output.\n\n* engine/chart_render: render_kline(df) → PNG bytes via mplfinance\n  with 20-day MA overlay + volume subpanel. Defaults sized for vision\n  APIs (1100x800 @ 100dp\n[…]\nes both decisions on\ndecision.extra['multimodal_diff'], measures the gap. Default off behind\na flag — vision ~5x cost of text — until agreement-vs-ground-truth\nproves the visual signal earns its seat.",
          "is_bot": false,
          "headline": "feat: multi-modal debate spike — K-line chart renderer (Day 1-2)",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T01:39:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fd9d7fd9183ff96f75057e6109f581ce31282c16",
          "body": "The GNN signal cache wiring tests import engine.gnn_signal which itself\nimports torch. CI doesn't install torch (~1GB, not in requirements.txt),\nso the import failed at module load time before importorskip had a chance.\n\nAdding an autouse pytest.importorskip(\"torch\") fixture on the class\nmakes both \n[…]\ntes\nthat CI already deselects with -k filters. We could add this class to\nthe deselect list instead, but importorskip keeps the skip co-located\nwith the test (more discoverable when torch comes back).",
          "is_bot": false,
          "headline": "fix(ci): skip GNN cache wiring tests when torch is unavailable",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T01:06:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6d660f516c6d7ce981ca143b00646aed3b602c35",
          "body": "…es, full cache coverage\n\nThe headline numbers + Architecture and Testing sections lagged behind\nsix commits' worth of work. This brings them in sync with what's actually\nin the repo as of acb08df.\n\n* Tests badge: ~800 → 920+. Added a green \"0 open issues\" badge.\n* CN README: same updates (Tests cou\n[…]\nge) with case counts and\n  scope strings so contributors can find what's covered where.\n* API endpoints table: /healthz row added (Docker / K8s liveness probe\n  shipped with the Dockerfile hardening).",
          "is_bot": false,
          "headline": "docs: refresh README with today's reality — 922 backend tests, 0 issu…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T01:04:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "acb08dfce1a9344f6c622581b01ce07bcaf4bb95",
          "body": "…call covered\n\nContinuation of the earlier earnings + daily_intel wiring. Two more sites\nthat benefit most: one per-ticker loop (multiplied savings) and the\ncanonical OHLCV entry point.\n\n* engine/gnn_signal._fetch_features: scans 10-50 tickers per call,\n  each pulling 6mo of daily bars. Biggest sing\n[…]\n +5 cases covering MarketDataSkill 1d-on / intraday-bypass /\nenv-unset paths and GNN signal cache-hit-no-yfinance / cache-miss-\nper-ticker-fallthrough.\n\nSuite: 922 passed (917 → +5), zero regressions.",
          "is_bot": false,
          "headline": "feat: cache-wire GNN signal + MarketDataSkill — every daily yfinance …",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T00:59:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a6d7e72d6c24b0d729e6bf9f9fbd76890c52b4f4",
          "body": "…_by_period\n\nThe earlier earnings.py wiring proved the pattern. This round closes the\ntwo highest-frequency yfinance call sites the cache scaffold left behind.\n\n* engine/historical_cache: get_prices_by_period(ticker, period, max_age_hours)\n  translates relative period strings (\"1mo\", \"6mo\", …) into \n[…]\nnknown-period None path, _PERIOD_DAYS contents, and\n_fetch_price_with_volume wiring (cache-on skips yfinance.history,\ncache-off falls through).\n\nSuite: 32/32 cache + earnings + daily_intel tests pass.",
          "is_bot": false,
          "headline": "feat: extend historical cache to daily_intel hot paths via get_prices…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T00:40:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7d4e04cd77428fe59687ff6c2e0814143cabbfe2",
          "body": "…LEXA_USE_CACHE\n\nThe HistoricalCache scaffold from Phase 10 had populate_* / load_* methods\nbut no cache-aware fetch path and no production callers. fetch_earnings_calendar\nand compute_pead_stats both hit tk.earnings_dates independently every scan,\nand compute_pead_stats also pulls ~2 years of daily\n[…]\ne helpers (singleton, env-var parse), and the engine.earnings\nwiring proving cache-on skips yfinance and cache-off falls through.\n\nFull suite: 912 passed (894 → +18 incl. last commit's 7 stash tests).",
          "is_bot": false,
          "headline": "feat: wire historical cache into engine/earnings.py — opt-in via ORAL…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T00:30:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b6876f7c132ad28c04036be215ee67ffd93bb386",
          "body": "…eline\n\nThe Phase B compile harness needs decision_log records with full\nBull/Bear/Judge text. The stash itself was added in Phase 10 (commit\nf11c79b) but had no test, so any future refactor of debate.py or\nDecisionOutput.to_dict() could silently break Phase B's data source\nwithout anyone noticing u\n[…]\nhars to keep\nJSONL lines bounded) and the graceful-degradation contract — when\nany LLM call raises, run_lightweight_debate returns the initial\nDecisionOutput unchanged with no spurious extra mutation.",
          "is_bot": false,
          "headline": "test: integration test for debate stash → decision_log → eval-set pip…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T00:19:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dfb9bfaa3f32cf33d5c74612529120064c2ffae1",
          "body": "…er, runtime loader\n\nPhase A scaffold from 2026-04-25 left the actual compile path empty.\nThis change wires the full Phase B pipeline:\n\n* scripts/build_dspy_eval_set.py: --synthesize N mode produces deterministic,\n  label-balanced (40/40/20 BUY/SELL/WAIT) bull/bear/truth rows so the harness\n  can be\n[…]\nases, split disjointness, evaluator math under perfect /\nconstant / raising / None predictors, all four readiness gates,\nload_compiled_judge with cache).\n\nFull suite: 894 passed (pre-Phase-B was 869).",
          "is_bot": false,
          "headline": "feat: DSPy Phase B compile harness — synthetic eval set, MIPROv2 driv…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-28T00:13:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "73d99b26daf30d7eb05e63c608c8b963c02cb688",
          "body": "…iment tests, Japanese i18n\n\nCloses #1, #2, #3, #4.\n\n* Dockerfile: non-root orallexa user (uid 10001), HEALTHCHECK on\n  new /healthz endpoint with --start-period=15s\n* engine/strategies.py: vwap_reversion 10th strategy (typical_price\n  VWAP, RSI gate, threshold band) registered in registry, defaults\n[…]\n_core.py: bumped expected registry size 9 → 10\n\n48 new tests pass (62 across the affected modules); the wider\nsuite passes (869) — the only adjustment was the pre-existing\nhardcoded 9-entry assertion.",
          "is_bot": false,
          "headline": "feat: clear good-first-issues — Docker hardening, VWAP strategy, sent…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-27T23:51:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "655cd53cc8119fabcbb11ce999c5d5d821ae69f5",
          "body": "… patches; README hero refresh\n\nPure docs commit. No code changes.\n\nREADME hero:\n- Hook updated from '9 ML models, adversarial debate' to actual current\n  state: '8-source signal fusion / 10 ML models incl. Kronos / Bull-Bear-\n  Judge debate on Claude Opus 4.7'\n- Sub-line calls out Polymarket + Kals\n[…]\nesktop-assistant / gnn (weak SEO);\n          added kronos / polymarket / kalshi / signal-fusion /\n          claude-opus / prediction-markets / agentic / trading-agent\n  (20-topic GitHub cap respected)",
          "is_bot": false,
          "headline": "docs: marketing pack — X thread + HN + Reddit + DEV.to + awesome-list…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T16:40:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f11c79b5f8a52f41e1ee6f923f4d29eb5e49ba57",
          "body": "…-platform badges, sync docs\n\n5 follow-ups in one. Phase 9/10 added scaffolding for adaptive weights,\nmulti-provider LLMs, Kronos, Kalshi, DyTopo, CORAL — but until this\ncommit several pieces sat unused in the runtime paths. This wires them\nup so they actually fire on every deep-analysis call.\n\n1. K\n[…]\ningAgents/ATLAS/MarS: each is a research\n  session in its own right\n- Ollama provider: ~30 min when someone actually needs offline LLM\n- Kronos checkpoint auto-download: nice-to-have install ergonomic",
          "is_bot": false,
          "headline": "feat: wire Kronos + SharedMemory + DyTopo into runtime, ship UI multi…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T16:19:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "09930d2c99ae09e84f7f34d8f87fe525b0fc469d",
          "body": "…hared memory\n\nFour integrations from the latest GitHub trending sweep, all kept\nhonest about which depend on optional installs and which are\npure-Python additions to existing infrastructure.\n\n1. engine/kronos_signal.py — first OSS financial foundation model\n   shiyu-coder/Kronos (MIT), pretrained o\n[…]\n append APIs.\n   This is purely a read aggregator for prompt injection.\n\nTests: +71 across the 4 modules. Plus 70 mirofish tests still pass\n(perspective_panel signature change is backward-compatible).",
          "is_bot": false,
          "headline": "feat: Kronos signal + Kalshi markets + DyTopo dynamic panel + CORAL s…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T03:45:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aec99f415c7c177f9982095de2f371b51d1cf97c",
          "body": null,
          "is_bot": false,
          "headline": "chore: gitignore coverage artifacts (.coverage, coverage.xml, htmlcov/)",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T03:27:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffdc85f52796e3349d06daad42e14062e4c62939",
          "body": "…ge gate + DSPy/cache scaffolds\n\n7 follow-ups from SESSION_2026-04-25.md, kept honest about which are\nreal implementations and which are scaffolds for next-session work.\n\nA. GeminiProvider (llm/provider.py)\n   Symmetric to OpenAIProvider — lazy-imports google-genai, translates\n   Anthropic-style mes\n[…]\ndesign):\n  - DSPy Phase B compile (needs ≥100 eligible eval records)\n  - Real walk-forward backtest (needs cache populated over time)\n  - Compression eval against real decision_log (needs records too)",
          "is_bot": false,
          "headline": "feat: GeminiProvider + Token-Budget UI + watchlist portfolio + covera…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T03:08:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "374b315ec08df2060ccf8dad14eccba7e3364394",
          "body": "The last 21 commits added meaningful new modules and capabilities but\nthe docs were stuck describing the Phase 7/8 state from 2026-04-24.\nThis commit catches docs up to the current code reality.\n\nCHANGELOG.md: new 2026-04-25 entry covering the full Phase 9 work —\nadaptive feedback loop (source_accur\n[…]\ned this session\n(DSPy Phase B, real backtest with data cache, Gemini provider,\nTokenBudget UI surface, coverage gate scoping), and resume commands.\n\nDoc-only commit. No code changes; no tests touched.",
          "is_bot": false,
          "headline": "docs: sync README + CHANGELOG + roadmap + checkpoint to Phase 9 reality",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T02:37:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3701f0c64012e579813fb2f68a300eb5043d54af",
          "body": "build-ui CI surfaced a vitest unhandled error:\n  ReferenceError: window is not defined\n  This error originated in 'app/__tests__/signal-toast.test.tsx'\n\nRoot cause: SignalToast's useEffect scheduled an 8-second setTimeout\nto auto-dismiss each toast, but never cleared the handle. When tests\nfinished \n[…]\nxplicit cleanup — by definition the user clicked while mounted, and\n300ms is short enough that any race is benign. Documented inline.\n\n245 UI tests pass cleanly with no unhandled errors after the fix.",
          "is_bot": false,
          "headline": "fix(ci): clean up SignalToast timers on unmount",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T02:22:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3182ce1e0cae8a837d8fc72e82853aa3d0195c9d",
          "body": "Both built with the same constraint: don't add hard deps (openai or\ndspy-ai) to the project. Lazy-import inside the call paths; surface\na clear install message if the user actually flips the toggle without\nhaving installed the SDK first.\n\nA. llm/provider.OpenAIProvider — concrete adapter\n\n   Transla\n[…]\nent/partial-failure scenarios.\n\nVerified: 28 new tests pass; all existing tests still green; tsc\nclean; CI failure from the prior session (dynamic_weights float\nrounding) was already fixed in f5dcf56.",
          "is_bot": false,
          "headline": "feat: OpenAIProvider implementation + DSPy Phase A bootstrap",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T02:14:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eaa150dd7838851a54d9338079914cced8c83cf6",
          "body": ".github/workflows/source-outcomes.yml runs scripts/update_source_outcomes.py\ndaily at 02:00 UTC (post US close, pre pre-market). Uses actions/cache to\npersist memory_data/source_accuracy.jsonl across runs since the ledger is\nlocal state — last-write-wins single key.\n\nAlways finishes with a --dry-run\n[…]\ns convenience for the\nrepo CI itself. Production deployments should run the script via their\nown platform's cron (Railway / Fly / Vercel cron / systemd timer / k8s\nCronJob) against persistent storage.",
          "is_bot": false,
          "headline": "ci: scheduled workflow for source-outcomes backfill",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T02:01:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f5dcf5696589fffd3da1784724caefc9700316a3",
          "body": "CI on Linux/Python 3.11 failed in test_total_preserved_when_renormalized\nwith sum=1.0000010000000001 vs expected 1.0 ± 1e-6. The bug: each per-\nsource weight was rounded to 6 decimals, so 4 rounded values summed to\n1.0+1e-6 instead of exactly 1.0. Local Windows runs happened to round\nthe other way a\n[…]\ntable) handle that. Internal math stays full-precision so the\npreserve_total invariant holds exactly: sum(adjusted) ≡ sum(base).\n\n25 dynamic_weights tests still pass; the failing CI test now succeeds.",
          "is_bot": false,
          "headline": "fix(ci): remove premature rounding in compute_dynamic_weights",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T01:55:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "366b1f944d5cb4f3f73da4c97583e4ec80294806",
          "body": "Two pieces, both cautious:\n\n1. scripts/eval_context_compression.py — A/B safety harness\n   Generates synthetic Bull/Bear pairs, runs the Judge with full\n   inputs vs compressed inputs (extractive/llm/auto), reports decision\n   agreement + confidence drift + char savings. --offline mode uses a\n   key\n[…]\nthreshold.\n\nThis is the responsible way to ship a compression feature: build the\ninfrastructure, build the eval, leave the kill switch ON until you've\nproved your specific traffic is safe to compress.",
          "is_bot": false,
          "headline": "feat: opt-in context compression + A/B eval framework",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T00:57:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5877c12e2beb60dce85ba2bb9faf07c1f21b87b9",
          "body": "Four pieces, all on the same theme — make the multi-agent pipeline\ncontrollable, swappable, and ready to benchmark.\n\n1. TokenBudget wired into deep-analysis (closes the prior commit's loop)\n\n   engine.multi_agent_analysis.run_multi_agent_analysis takes an\n   optional token_budget=TokenBudget(...). B\n[…]\nllback on errors, auto-\nmode threshold routing, provider registry (default, env var, unknown,\nunimplemented sentinel, protocol compliance), AnthropicProvider\ndelegation. All existing tests still pass.",
          "is_bot": false,
          "headline": "feat: TokenBudget wired + context compressor + provider shim + DSPy plan",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-26T00:17:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a9e30a5b4402524179e3e892bc283e0a0c03285b",
          "body": "Claude Opus 4.7 was released 2026-04-16 — 1M context at standard\npricing, new xhigh effort level, task budgets, native 2576px image\nsupport. We adopt the parts that map directly to our deep-analysis\npath without paying 5× cost on routine calls.\n\nA. Selective Opus routing\n   - llm/claude_client.py: n\n[…]\nth caps, blocked\ncalls don't run, effort kwarg passing + SDK fallback retry, opus-4-7\npricing, OPUS tier label, tokenizer inflation constant. 70 mirofish\ntests + 23 PostHog/Langfuse tests still green.",
          "is_bot": false,
          "headline": "feat: Claude Opus 4.7 routing + xhigh effort + TokenBudget enforcer",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-25T22:49:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0ec04cb85249dabcb5f3584a1e93c45541dfc5f8",
          "body": "The previous commit added a SourceAccuracy ledger and a use_dynamic_weights\nread path, but nothing actually wrote to the ledger — so accuracy stayed\nempty forever and dynamic weighting was structurally dormant. Two-line\ndiagnosis, two-step fix:\n\n1. fuse_signals now auto-records each call's per-sourc\n[…]\n 15 mirofish fusion tests + 51 social/prediction/e2e tests\nall green.\n\nThis is the actual closing of the loop the previous commit only\nscaffolded. Without this, the dynamic_weights work was vaporware.",
          "is_bot": false,
          "headline": "fix: close the dynamic-weights feedback loop (write path was missing)",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-25T22:30:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f8273327ff6281c6a5b72e4eae6a016bcba1ad93",
          "body": "Closes the loop the synthetic-backtest result hinted at: static weights\ncan't tell if a source is helping or hurting on this market. Now they\ncan be measured and adjusted.\n\nengine/source_accuracy.py — append-only JSONL ledger\n- record_scores(ticker, scores) at decision time\n- update_outcomes(ticker,\n[…]\nacross runs, which matters because callers rely on\n±15 thresholds for direction labelling and ±50 for high-conviction\nsignals. Without it, dynamic weighting could silently shift the\nthreshold meaning.",
          "is_bot": false,
          "headline": "feat: per-source accuracy ledger + dynamic fusion weights",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-25T22:20:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1f2bcb2810b38a3d7b443a774c991a26cd60a41b",
          "body": "…chlist\n\nA. scripts/backtest_fusion_partial.py — synthetic time-series sim\n\n   Real social/Polymarket history isn't cached locally so a true walk-\n   forward backtest of the new sources isn't possible. This script\n   isolates the WEIGHT POLICY question instead: given a plausible\n   joint distributio\n[…]\nion, and a\n   warning count badge with tooltip when PM raised non-blocking flags.\n\n   types.ts: WatchlistItem.pm_preview optional field.\n\nVerified: 8 e2e + 245 UI + smoke-imports all green; tsc clean.",
          "is_bot": false,
          "headline": "test+feat: synthetic fusion backtest + e2e pipeline tests + PM in wat…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-25T22:11:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e8793899fef8ba1fe74f2e4e035d221bb3512c9",
          "body": "…cks enrichment\n\nA. POST /api/alpaca/execute — Portfolio Manager gate before order placement\n\n   New form params: portfolio_json (JSON list of {ticker, value_usd,\n   sector?}), portfolio_value, skip_pm. When portfolio + value are\n   supplied and skip_pm=false, PM runs BEFORE the Alpaca order:\n   - P\n[…]\no\n   match.\n\n   types.ts: ai_picks entry extended with optional regime + pm_preview\n   fields (additive, backward-compatible).\n\nVerified: 245 UI tests + 46 daily_intel/PM tests still green; tsc clean.",
          "is_bot": false,
          "headline": "feat: PM gate before alpaca/execute + watchlist fusion toggle + ai_pi…",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-24T21:50:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ca30b60bb8d1c0633fe49a84cc7c1931c223fd3",
          "body": "…scan\n\n1. llm/regime_llm.py — Claude-backed llm_fn for regime_strategist\n\n   Drop-in 'llm_fn' parameter for propose_regime_strategy. Builds a\n   prompt from the heuristic baseline + recent feature snapshot\n   (close trajectory, ADX, ATR/Close, RSI), asks Claude for minor\n   JSON-structured param twe\n[…]\n,\n   yfinance options + insiders). Results sort by |conviction| instead\n   of confidence.\n\n96 affected tests pass (regime_llm 14, regime_strategist 17, PM 32,\nbrain routing 12, prediction_markets 21).",
          "is_bot": false,
          "headline": "feat: LLM-backed regime path + PM in /api/analyze + fusion watchlist …",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-24T21:40:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ff58a18ce3da57273370a61aea5b344a84102182",
          "body": "1. skills/technical_analysis_v2.py:74 — ADX minus_dm zeroing\n\n   The line 'minus_dm[minus_dm <= plus_dm] = 0 if False else ...'\n   was effectively a no-op (False always selects the else branch).\n   Line 73 zeroed plus_dm when dominated, but line 74 never zeroed\n   minus_dm symmetrically, biasing ADX\n[…]\n_TO_NODE24=true at workflow-env\n   level. Eliminates 'Node 20 actions are deprecated' warnings\n   across all jobs without bumping every action version. Works\n   through the 2026-06-02 default cutover.",
          "is_bot": false,
          "headline": "fix+feat+ci: ADX correctness, PM UI card, Node 24 opt-in",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-24T21:34:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6e3cc61fd6e99e901c292f0dc4bc2ef1a3a69195",
          "body": "docs/SESSION_2026-04-24.md captures the full session outcome so\nfuture sessions can resume without replaying context:\n\n- HEAD / branch / CI status\n- Per-phase module list (what shipped where)\n- Pipeline integration points (daily_intel, perspective_panel, brain)\n- Public API surface additions\n- Tooli\n[…]\ntable (26 commits, 159 tests, 5→8 sources)\n- Known follow-ups kept out of scope (ADX bug, walk-forward backtest,\n  SignalFusionCard PM section, Node 20 upgrade)\n- Resume-here commands for next session",
          "is_bot": false,
          "headline": "docs: session checkpoint — Phase 7/8 resumable state",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-24T21:23:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ff442956bbebf11f85cc992989127e72f6c44e69",
          "body": "API (api_server.py):\n- GET /api/regime/{ticker}            → OrallexaBrain.get_regime_strategy\n- GET /api/layered-memory/{role}/{tk} → LayeredMemory tier stats + narrative\n- /api/deep-analysis response now surfaces portfolio_manager verdict\n  from DecisionOutput.extra when upstream populated it\n- Bo\n[…]\nom BULLISH (+21) → NEUTRAL (+8) after\n  adding social/earnings/prediction-markets, confirming the expansion\n  actually moves decisions.\n\n245 UI tests + 37+ affected backend tests all green. tsc clean.",
          "is_bot": false,
          "headline": "feat: API + UI + docs + fusion comparison for Phase 7/8 modules",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-24T21:19:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf19f4b934aab4e3ed5be20dd2f419dde530014e",
          "body": "…pipeline\n\nThree Tier-2 modules hooked into the runtime paths that already existed:\n\n1. engine/daily_intel._fetch_headlines — opt-in Google News + Yahoo RSS\n   path gated on DAILY_INTEL_USE_RSS env flag. Items merged with the\n   existing yfinance NewsSkill output and deduped via fuzzy title match\n  \n[…]\nunknown'} on any data-prep failure.\n\nTests: +2 new (regime proposal happy path + fetch failure). Existing\n39 daily_intel / news_aggregator / 9 perspective-panel / 12 brain\nintegration tests all green.",
          "is_bot": false,
          "headline": "feat: wire news_aggregator + layered_memory + regime_strategist into …",
          "author_name": "orallexa",
          "author_login": "alex-jb09",
          "committed_at": "2026-04-24T20:55:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 5,
      "commits_last_year": 263,
      "latest_release_at": "2026-07-08T14:24:37Z",
      "latest_release_tag": "v1.2.2",
      "releases_from_tags": false,
      "days_since_last_push": 14,
      "active_weeks_last_year": 15,
      "days_since_latest_release": 18,
      "mean_days_between_releases": 23.9
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 85,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 18,
      "stars": 60,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-03",
            "count": 1
          },
          {
            "date": "2026-04-18",
            "count": 3
          },
          {
            "date": "2026-04-27",
            "count": 1
          },
          {
            "date": "2026-05-03",
            "count": 1
          },
          {
            "date": "2026-05-10",
            "count": 1
          },
          {
            "date": "2026-05-12",
            "count": 1
          },
          {
            "date": "2026-05-21",
            "count": 1
          },
          {
            "date": "2026-05-30",
            "count": 2
          },
          {
            "date": "2026-06-02",
            "count": 1
          },
          {
            "date": "2026-06-16",
            "count": 1
          },
          {
            "date": "2026-06-24",
            "count": 1
          },
          {
            "date": "2026-06-25",
            "count": 1
          },
          {
            "date": "2026-07-01",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 18,
        "total_forks": 18
      },
      "star_history": null,
      "open_issues_and_prs": 4
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "orallexa-ui/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 119716,
      "source_files_sampled": 312,
      "oversized_source_files": 3,
      "agent_instruction_files": [
        "CLAUDE.md",
        "orallexa-ui/AGENTS.md",
        "orallexa-ui/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 5621
    },
    "dependencies": {
      "manifests": [
        "orallexa-ui/package.json",
        "requirements-docker.txt",
        "requirements.txt"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "html2canvas",
          "manifest": "orallexa-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.4.1"
        },
        {
          "name": "lightweight-charts",
          "manifest": "orallexa-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.1.0"
        },
        {
          "name": "next",
          "manifest": "orallexa-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "16.2.1"
        },
        {
          "name": "react",
          "manifest": "orallexa-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.4"
        },
        {
          "name": "react-dom",
          "manifest": "orallexa-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.4"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 3,
        "merged_prs": 0,
        "open_issues": 1,
        "closed_ratio": 0.8,
        "closed_issues": 4,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "alex-jb09",
          "commits": 197,
          "avatar_url": "https://avatars.githubusercontent.com/u/43049029?v=4"
        },
        {
          "type": "User",
          "login": "alex-jb",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/43049907?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.995
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "dspy-compile.yml",
        "multimodal-lift.yml",
        "pages.yml",
        "source-outcomes.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "eslint.config.mjs"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "53 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "794a2ec0ce0b1271b468814eee47c2cd4edde147",
        "ran_at": "2026-07-26T17:28:41Z",
        "aggregate_score": 3.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-26T06:05:03Z",
      "oldest_open_prs": [
        {
          "number": 5,
          "created_at": "2026-04-18T02:51:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 6,
          "created_at": "2026-04-18T14:21:16Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 7,
          "created_at": "2026-04-18T21:55:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 10,
          "created_at": "2026-06-18T13:59:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/alex-jb/orallexa-ai-trading-agent",
    "host": "github.com",
    "name": "orallexa-ai-trading-agent",
    "owner": "alex-jb"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 61,
      "inputs": {
        "security": 36,
        "vitality": 80,
        "community": 57,
        "governance": 40,
        "engineering": 88
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 80,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 67,
            "inputs": {
              "commits_last_year": 263,
              "human_commit_share": 1,
              "days_since_last_push": 14,
              "active_weeks_last_year": 15
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 14 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 14
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "15/52 weeks with commits",
                "points": 10.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 15
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "263 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 263
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 5,
              "latest_release_tag": "v1.2.2",
              "releases_from_tags": false,
              "days_since_latest_release": 18,
              "mean_days_between_releases": 23.9
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "5 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 18 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~23.9 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 23.9
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 57,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 39,
            "inputs": {
              "forks": 18,
              "stars": 60,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "60 stars",
                "points": 28.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 60
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "18 forks",
                "points": 10.3,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 40,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 12,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.995
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 61,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 1,
              "closed_issues": 4,
              "issue_closed_ratio": 0.8,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "80% of issues closed",
                "points": 37.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 80
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 53,
            "inputs": {
              "followers": 9,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "alex-jb",
              "public_repos": 67,
              "account_age_days": 2879
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "9 followers of alex-jb",
                "points": 7.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 9,
                      "login": "alex-jb"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "67 public repos, account ~7 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 67
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 7
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 88,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 80,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "5 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "eslint.config.mjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "ai-trading",
                "algorithmic-trading",
                "claude",
                "fintech",
                "llm",
                "machine-learning",
                "multi-agent",
                "python",
                "pytorch",
                "quantitative-finance",
                "reinforcement-learning",
                "trading-bot",
                "agentic",
                "claude-opus",
                "kalshi",
                "kronos",
                "polymarket",
                "prediction-markets",
                "signal-fusion",
                "trading-agent"
              ],
              "has_wiki": true,
              "homepage": "https://orallexa-ui.vercel.app",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://orallexa-ui.vercel.app",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 36,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 36,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 3.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "53 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 75,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md",
                "orallexa-ui/AGENTS.md",
                "orallexa-ui/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 5621
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md, orallexa-ui/AGENTS.md, orallexa-ui/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md, orallexa-ui/AGENTS.md, orallexa-ui/CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "orallexa-ui/tsconfig.json"
              ],
              "agent_commit_share": 0.54,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.mjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "orallexa-ui/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "orallexa-ui/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "54 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 54,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 119716,
              "source_files_sampled": 312,
              "oversized_source_files": 3
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python with type-check config (orallexa-ui/tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "orallexa-ui/tsconfig.json",
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "3/312 source files over 60KB",
                "points": 54.5,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 312,
                      "oversized": 3
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T17:29:06.413895Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/alex-jb/orallexa-ai-trading-agent.svg",
  "full_name": "alex-jb/orallexa-ai-trading-agent",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadas.