Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 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 зірок⑂ 18 форківз квіт. 2026 р.Переглянути на GitHub ↗

alex-jb/orallexa-ai-trading-agent має індекс здоров’я 61 зі 100, що відповідає смузі «Помірний». Найвищий показник — Engineering Quality (88/100), найнижчий — Security (36/100). Останнє оновлення було 14 днів тому. Більшість нещодавньої роботи виконує один учасник.

61
загалом / 100
Помірний

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

61
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

OrallexaОсобистий обліковий запис
9 підписників67 публічних репозиторіївз вер. 2018 р.

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

80Добрий · 22% загального індексу
Як обчислюється оцінка
28.8/36Свіжість push — останній push 14 дн. тому
10.4/36Ритм комітів — 15/52 тижнів із комітами
18/18Обсяг комітів — 263 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year263
human_commit_share1
days_since_last_push14
active_weeks_last_year15
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 5 релізів
36/36Свіжість релізів — останній реліз 18 дн. тому
27/27Ритм релізів — реліз кожні ~23,9 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count5
latest_release_tagv1.2.2
releases_from_tagsні
days_since_latest_release18
mean_days_between_releases23,9
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

57Помірний · 18% загального індексу
Як обчислюється оцінка
28.7/60Зірки — 60 зірок
10.3/25Форки — 18 форків
0/15Спостерігачі — 1 спостерігачів
Використані вхідні дані
forks18
stars60
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
18/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingтак
has_issue_templateні
has_code_of_conductні
has_pull_request_templateтак

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

40У зоні ризику · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0.1/22.5Розподіл комітів — головний контриб’ютор — автор 100% комітів
2.7/13.5Широта контриб’юторів — 2 контриб’юторів
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Використані вхідні дані
bus_factor1
contributors_sampled2
top_contributor_share0,995
Як обчислюється оцінка
37.4/46.8Вирішення issue — закрито 80% issue
0/38.3Прийняття PR — немає вирішених pull request-ів або даних
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs0
open_issues1
closed_issues4
issue_closed_ratio0,8
closed_unmerged_prs0
Виключено з оцінювання (немає даних або не застосовно): Прийняття PR. Залишкові ваги перенормовано.
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
7.2/25Охоплення власника — 9 підписників у alex-jb
25/25Послужний список — 67 публічних репозиторіїв, вік облікового запису ~7 р.
Використані вхідні дані
followers9
owner_typeUser
is_verified
owner_loginalex-jb
public_repos67
account_age_days2 879
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

Інженерна якість

Чи наявні базові інженерні практики та документація?

88Відмінний · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 5 процес(ів) CI
24/24Наявні тести
16/16Конфігурація лінтера — eslint.config.mjs
0/9.6Pre-commit-хуки
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — немає даних
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configтак
has_precommit_configні
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: CI-Tests. Залишкові ваги перенормовано.

Документація

100Відмінний
Як обчислюється оцінка
30/30README
25/25Каталог документації
15/15Сайт документації / домашня сторінка — https://orallexa-ui.vercel.app
10/10Опис репозиторію
10/10Теми — 20 тем
10/10Wiki
Використані вхідні дані
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так

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

36У зоні ризику · 16% загального індексу

Стан безпеки

36У зоні ризику
Як обчислюється оцінка
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 — немає даних
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.5Ліцензія — 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 — немає даних
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 — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 53 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate3,6
Виключено з оцінювання (немає даних або не застосовно): ci_tests, packaging, signed_releases. Залишкові ваги перенормовано.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

75Добрий · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — CLAUDE.md, orallexa-ui/AGENTS.md, orallexa-ui/CLAUDE.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 100 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share1
agent_instruction_filesCLAUDE.md, orallexa-ui/AGENTS.md, orallexa-ui/CLAUDE.md
agent_instruction_max_bytes5 621
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
11/11Конфігурація лінтера / форматера — eslint.config.mjs
11/11Статична перевірка типів — orallexa-ui/tsconfig.json
10/10Відтворюване середовище — Dockerfile, lockfile
10/10Підтверджена практика роботи з агентами — 54 з останніх 100 комітів створено агентом або з його зазначенням
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfilespackage-lock.json
has_dockerfileтак
typed_languageні
bootstrap_files
has_devcontainerні
has_linter_configтак
typecheck_configsorallexa-ui/tsconfig.json
agent_commit_share0,54
toolchain_manifests
dependency_bot_commit_share0
Як обчислюється оцінка
27/45Типізований код — Python з конфігурацією перевірки типів (orallexa-ui/tsconfig.json)
54.5/55Керовані розміри файлів — 3/312 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languagePython
largest_source_bytes119 716
source_files_sampled312
oversized_source_files3

Ключові факти

60зірок GitHub
2контриб'юторів
263комітів за останні 12 місяців
14днів від останнього пушу
5релізів
1бас-фактор
1відкритих issue
npm, PyPIпакетних екосистем

Попередження щодо збору даних

  • 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

Докладніше

Історія зірок і форків 0 ★ / 18 ⇿
0Зірки
18Форки
5Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

0481216201832026-042026-052026-07
Мажорні 1Мінорні 2Патчі 2
OpenSSF Scorecard 3.6 / 10
3.6сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).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
н/дCI-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
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities53 existing vulnerabilities detected
Прямі залежності 5
РеєстрПакетОбмеження версіїМаніфест
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
Усі залежності не зібрано

Не вдалося зібрати розв'язаний набір залежностей для цього звіту: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Звіт у форматі JSON машиночитний
{
  "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"
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистика.