Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-07-27 12:01 UTC

brian-bell / wtui

A terminal UI for conveniently managing multiple git repos.

GoMIT★ 0 зірок⑂ 0 форківз бер. 2026 р.Переглянути на GitHub ↗

brian-bell/wtui має індекс здоров’я 55 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (76/100), найнижчий — Community & Adoption (24/100). Останнє оновлення було 11 днів тому. Більшість нещодавньої роботи виконує один учасник.

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

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

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

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

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

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

Власність

Brian BellОсобистий обліковий запис
12 підписників29 публічних репозиторіївз черв. 2010 р.

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

Пакетні екосистеми

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
Gogithub.com/brian-bell/wtuiv0.8.0-1311 днів тому

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

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

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

76Добрий · 22% загального індексу
Як обчислюється оцінка
28.8/36Свіжість push — останній push 11 дн. тому
10.4/36Ритм комітів — 15/52 тижнів із комітами
18/18Обсяг комітів — 226 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year226
human_commit_share1
days_since_last_push11
active_weeks_last_year15
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 13 релізів
36/36Свіжість релізів — останній реліз 11 дн. тому
27/27Ритм релізів — реліз кожні ~4,1 дн.
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Використані вхідні дані
releases_count13
latest_release_tagv0.8.0
releases_from_tagsні
days_since_latest_release11
mean_days_between_releases4,1

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

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

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

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

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

57Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0.2/22.5Розподіл комітів — головний контриб’ютор — автор 99% комітів
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,991
Як обчислюється оцінка
45.4/46.8Вирішення issue — закрито 97% issue
37.5/38.3Прийняття PR — злито 206/210 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs206
open_issues2
closed_issues68
issue_closed_ratio0,971
closed_unmerged_prs4
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
8/25Охоплення власника — 12 підписників у brian-bell
22.8/25Послужний список — 29 публічних репозиторіїв, вік облікового запису ~16 р.
Використані вхідні дані
followers12
owner_typeUser
is_verified
owner_loginbrian-bell
public_repos29
account_age_days5 878
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у go
35/35Свіжість публікацій — остання публікація 11 дн. тому
20/20Історія версій — 13 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesgithub.com/brian-bell/wtui
ecosystemsgo
any_deprecatedні
min_days_since_publish11

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

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

71Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 3 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 26 out of 26 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні
Як обчислюється оцінка
30/30README
25/25Каталог документації
0/15Сайт документації / домашня сторінка
10/10Опис репозиторію
0/10Теми
10/10Wiki
Використані вхідні дані
topics
has_wikiтак
homepage
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

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

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

Стан безпеки

41У зоні ризику
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 26 out of 26 merged PRs checked by a CI test -- score normalized to 10
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 30 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate4,1

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

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

75Добрий · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — AGENTS.md, CLAUDE.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 92 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,92
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes1 392
Як обчислюється оцінка
18/18Розгортання однією командою — Makefile
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — Go (статично типізована)
10/10Відтворюване середовище — lockfile
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfilesgo.sum
has_dockerfileні
typed_languageтак
bootstrap_filesMakefile
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — Go (статично типізована)
48.7/55Керовані розміри файлів — 13/113 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageGo
largest_source_bytes439 365
source_files_sampled113
oversized_source_files13

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

0зірок GitHub
2контриб'юторів
226комітів за останні 12 місяців
11днів від останнього пушу
13релізів
1бас-фактор
2відкритих issue
Goпакетних екосистем

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

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Докладніше

OpenSSF Scorecard 4.1 / 10
4.1сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-27 12:00 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests26 out of 26 merged PRs checked by a CI test -- score normalized to 10
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 30 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
8Vulnerabilities2 existing vulnerabilities detected
Прямі залежності 8
РеєстрПакетОбмеження версіїМаніфест
Gogithub.com/charmbracelet/bubbleteav1.3.10go.mod
Gogithub.com/charmbracelet/lipglossv1.1.0go.mod
Gogithub.com/charmbracelet/x/ansiv0.11.6go.mod
Gogithub.com/charmbracelet/x/vtv0.0.0-20260305213658-fe36e8c10185go.mod
Gogithub.com/creack/ptyv1.1.24go.mod
Gogithub.com/google/shlexv0.0.0-20191202100458-e7afc7fbc510go.mod
Gogithub.com/muesli/termenvv0.16.0go.mod
Gogithub.com/pelletier/go-toml/v2v2.3.1go.mod
Усі залежності не зібрано

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

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1705,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 3272591,
        "Shell": 19615,
        "Makefile": 596
      },
      "pushed_at": "2026-07-16T00:59:30Z",
      "created_at": "2026-03-03T15:15:35Z",
      "owner_type": "User",
      "updated_at": "2026-07-15T23:14:06Z",
      "description": "A terminal UI for conveniently managing multiple git repos.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Brian Bell",
      "type": "User",
      "login": "brian-bell",
      "company": null,
      "location": "Pittsburgh, PA",
      "followers": 12,
      "avatar_url": "https://avatars.githubusercontent.com/u/312039?v=4",
      "created_at": "2010-06-22T19:17:11Z",
      "is_verified": null,
      "public_repos": 29,
      "account_age_days": 5878
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-07-16T00:59:30Z"
        },
        {
          "tag": "v0.7.3",
          "kind": "patch",
          "published_at": "2026-07-02T00:08:21Z"
        },
        {
          "tag": "v0.7.2",
          "kind": "patch",
          "published_at": "2026-06-29T16:46:55Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-06-16T21:50:05Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-06-16T21:30:15Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2026-06-15T12:59:28Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2026-06-13T17:29:02Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-06-13T00:31:23Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-06-12T00:08:45Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-06-08T19:23:23Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-06-07T18:17:48Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-06-02T02:24:01Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-05-13T02:38:28Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "009d776c8f46d826288cac31815903626ea0df84",
          "body": "* Fix issue 277 P0 concurrency and transcript security\n\n* Reject transcript path swaps after validation\n\n* Fix resumed session end-time ordering\n\n* Keep ordinary session resumes untracked",
          "is_bot": false,
          "headline": "Fix issue #277 P0 concurrency and transcript safety (#280)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-15T23:14:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2608d762aa8d3c9b0a5632816edee272ba12b910",
          "body": "A directory whose .git file points at a .git/worktrees/<name> admin dir\nthat no longer exists (parent repo deleted, or worktree metadata pruned)\nwas misclassified as a normal repo: isLinkedWorktreeGitFile's health\nchecks all failed, so repoInfo fell through to including it. Selecting\nsuch an entry t\n[…]\nir is missing entirely as\na linked worktree and exclude it. Pointers whose admin dir exists but is\nmalformed still fail open and are discovered, preserving the existing\nwhen-in-doubt-show-it behavior.",
          "is_bot": false,
          "headline": "Exclude dangling linked-worktree checkouts from repo scan (#279)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-15T03:14:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "02b1ed57f8bd857f49037a6f1789930f44e05054",
          "body": "Adopt the Beads-style entrypoint pattern: keep CLAUDE.md and AGENTS.md\nshort and routing-only, with substance in linked docs that own their\nsingle source of truth.\n\n- Break the CLAUDE.md -> AGENTS.md symlink so each is a real file with a\n  distinct role: CLAUDE.md is a Claude-specific shell that def\n[…]\n docs/agent-operations.md.\n- Keep only immediate ground rules and the literal CI gate in AGENTS.md,\n  plus a conflict rule pointing to linked sources.\n\ngofmt clean, make test, and make build all pass.",
          "is_bot": false,
          "headline": "Refactor agent entrypoints into thin routing docs (#278)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-06T04:01:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0976948075f396309c9a25ab95a5090f89e1c4fa",
          "body": "Summary:\n- Add configurable Flow phase graph presets from TOML, including reserved/duplicate preset validation and wtui flow create --preset support.\n- Generalize Flow startup and launch behavior around first-ready root phases and preset-derived phase graphs.\n- Redesign AutoMode DAG drain behavior and update README, config docs, Flow phase docs, and agent skill docs for custom graphs.\n\nVerification:\n- gofmt -l .\n- make test\n- make build\n- GitHub CI passed\n\nCloses #269",
          "is_bot": false,
          "headline": "Flow graph M4: configurable phase graph surface",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-03T14:23:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd9421bb551839f89b705a1b5cec39d5c3093a91",
          "body": "* Add flow phase graph presets\n\n* Address flow preset review findings",
          "is_bot": false,
          "headline": "Flow graph M3: PhaseSpec presets (#275)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-03T00:03:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "166000ea53a7862fa37ba8f7b6b4122240589c56",
          "body": "Implements Flow graph M2 for issue #267 by routing Flow gate and semantic decisions by phase kind.\\n\\nVerification completed before merge: gofmt -l ., make test, make build, and GitHub CI.\\n\\nCloses #267.",
          "is_bot": false,
          "headline": "Route Flow phase gates by semantic kind (#274)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-02T23:11:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04e537483e5ebe64ee906a12256ce188e0762fb3",
          "body": "Squash merge PR #273: implement explicit Flow phase dependency edges and topological readiness for milestone M1 of #266.",
          "is_bot": false,
          "headline": "Flow graph M1: dependencies and topological readiness",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-02T18:34:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f425e95af0aa9c2ff70d79ec550ca83e225eda1",
          "body": "Squash merge PR #272: auto-expiring unified status messages.",
          "is_bot": false,
          "headline": "Auto-expire model status messages",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-02T11:43:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8eb721ad0543919fcfb6efd91f4731f9a17b1665",
          "body": "Squash merge PR #271. Verified against current origin/main c399314: clean local merge simulation, gofmt -l ., make test, and make build passed.",
          "is_bot": false,
          "headline": "Make active flows a ctrl-a toggle (#271)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-02T03:28:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3993148cae04d625280b314e157dd585a9a0f32",
          "body": "* Compact flow model shortcut label\n\n* Scope Claude model shortcut trimming",
          "is_bot": false,
          "headline": "Compact Flow model shortcut labels (#270)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-02T03:18:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8fe6e50970fb508bc59d1e29393b348b4ea82ad2",
          "body": "… (#265)\n\n* Group git views under one top-level Git view\n\nNumber keys become 1 Git / 2 Sessions / 3 Plans / 4 Flows / 5 Active\nFlows, with 6-9 reserved as silent no-ops. Inside Git, the w/b/s/h/r\nletters switch directly between the worktrees, branches, stashes,\nhistory, and reflog subviews, and Git \n[…]\n in config docs\n\nAutoreview caught a leftover paragraph in docs/config.md that still\ntold users to switch the current view with 1-9 and h/l; it now points\nat the grouped keys (1-5, w/b/s/h/r, arrows).",
          "is_bot": false,
          "headline": "Group git views under one top-level Git view with letter-key subviews…",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-02T01:40:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1f0af52eb28e337b1f97b776ca757dcb74985a83",
          "body": "Squash merge PR #263: make AutoMode Flow auto-advance view-independent with always-on polling, headless auto launches, transient status messages, documentation, and regression coverage.",
          "is_bot": false,
          "headline": "Make Flow auto-advance view independent",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-02T00:05:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83a62bba587a647bbede7cd579a64a605796e487",
          "body": "Squash merge PR #264: recover stale Flow phases whose latest provider launch ended or never attached a session, including CLI reset support, UI recovery labels, docs, and tests.",
          "is_bot": false,
          "headline": "Recover stale Flow phase reset",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-01T23:06:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6534537c7d3e0d3921228bd0ed6be6ea2d645aa5",
          "body": null,
          "is_bot": false,
          "headline": "Document lenient config parsing",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-01T19:56:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf885d225350658c64574894c09fbe4923b4389f",
          "body": null,
          "is_bot": false,
          "headline": "Cover unknown config sections",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-01T19:55:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc2e21a658475bc17fb170c70a7354f565248b72",
          "body": null,
          "is_bot": false,
          "headline": "Allow unknown config fields",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-01T19:50:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce21abc239592e6b0932f008f1786859377f6446",
          "body": "Summary:\n- add optional GitHub issue metadata to Flow records and expose wtui flow issue set\n- show linked issue numbers in the Flow list between Phase and Plan\n- add the i shortcut to open linked issues, plus launch prompt/template/env plumbing\n\nVerification:\n- CI passed on PR #262\n- git diff --check origin/main..HEAD",
          "is_bot": false,
          "headline": "Add optional GitHub issue metadata for Flows",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-01T19:37:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcf21fc455004088240fb0a3ab73fb8441d80a68",
          "body": "Move Flow auto-mode toggling from m to a, move manual merge marking from M to m, and keep the model picker available on selected Flow phase rows.\\n\\nVerification:\\n- gofmt -l .\\n- make test\\n- make build",
          "is_bot": false,
          "headline": "Rearrange Flow shortcut keys (#261)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-01T14:05:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0bc0df45b841d0cf57e141eb86e32f05f794dbb",
          "body": "Add a Flow shortcut to mark an already-merged GitHub PR as merged after verification, preserving Flow metadata and UI state.",
          "is_bot": false,
          "headline": "Add manual Flow merge shortcut",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-01T03:44:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "095f1978d233018653448e1e6e7292cb5e28e7e1",
          "body": "## Summary\n- add agent model selection support for Flow launches via the `M` shortcut\n- persist provider-specific model defaults in config and pass selected models into CLI launch/resume commands\n- document supported model values and update Flow UI/tests around model labels and launch behavior\n\n## Verification\n- `gofmt -l .`\n- `make test`\n- `make build`",
          "is_bot": false,
          "headline": "Add Flow agent model selection",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-01T03:36:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14b3eaea1ee3e293a525b8ef52cb00c4fa2eaadb",
          "body": "Add c handling to copy the selected Flow ID from the Flows and Active Flows panes.\\n\\nKeep the shortcut scoped away from non-Flow contexts, preserve the existing c open-code behavior elsewhere, and update shortcut hints, docs, and model/ui coverage.\\n\\nResolved conflicts with current main before merging. Verified with gofmt -l ., go test -count=1 ./model ./ui, make test, make build, and GitHub CI.",
          "is_bot": false,
          "headline": "Add Flow ID copy shortcut (#258)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-01T03:27:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c228b847267fe8636d62a3a6d4203c371b33cebc",
          "body": "Summary:\\n- make Tab cycle pane focus forward across the repo pane and right pane\\n- include Flow terminal focus in the Tab cycle when a Flow embedded terminal is open\\n- let session embedded terminals yield Tab back to wtui focus navigation while preserving normal PTY key forwarding\\n- update keybinding docs for the new pane cycling behavior\\n\\nVerification:\\n- local integration merge against origin/main completed without conflicts\\n- gofmt -l .\\n- make test\\n- make build",
          "is_bot": false,
          "headline": "Cycle pane focus with tab (#256)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-01T03:21:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d0ba763b014eff4bbffb4d3168d6b39d0d9930c",
          "body": "Add a p shortcut for opening linked Flow PRs from flows and active flows views.",
          "is_bot": false,
          "headline": "Add Flow PR browser shortcut (#255)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-07-01T03:10:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0fc25221965234e28f829a1b644e9f39a3032d1d",
          "body": "* Render headless claude stream-json in flow terminal\n\nHeadless claude flow launches ran `claude --print`, which buffers plain-text\noutput until the run completes and then exits, so the embedded flow terminal\nstayed blank for the whole run (and the auto-dismiss-on-exit erased the final\nblock). codex\n[…]\nreadable output, bypasses\n  tmux, and is non-detachable.\n- Document the renderer's protocol assumptions (stream deltas precede the\n  aggregated assistant event; one in-flight content block at a time).",
          "is_bot": false,
          "headline": "Render headless claude stream-json in the flow embedded terminal (#254)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-30T12:33:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "982e6c05e57ce856fe222f5ce5cbaa2bd08e3688",
          "body": "The flow-create skill assumed the wtui repo's own conventions, so Flows\ncreated from other repos either failed or did not surface in wtui:\n\n- Base ref was hard-coded to origin/main, so any repo on a different\n  default branch (e.g. master) or with no origin failed the mandatory\n  fetch and aborted f\n[…]\nFlow would not appear under the repo. Now it resolves the main worktree\n  (first `git worktree list` entry), which is exactly what the scanner\n  discovers, even when run from inside a linked worktree.",
          "is_bot": false,
          "headline": "Make wtui-flow-create skill work on any repo",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-30T04:22:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2fbb6488c56051e44f9d743e9542f0e912376d86",
          "body": null,
          "is_bot": false,
          "headline": "Add prompt template editor",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-19T20:01:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99bc370d9c554c0f655832a92b4a53171d15ab30",
          "body": "* Move active flows to view 9\n\n* Address active flows review feedback\n\n* Fix README view navigation docs\n\n* Restore active flows after repo-pane enter",
          "is_bot": false,
          "headline": "Move active flows to view 9 (#250)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-19T14:14:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebd5831831abbd187876e8191a415af6bece0ca2",
          "body": "* Fix backspace pane navigation\n\n* Tighten backspace review coverage\n\n* Clarify flow back key coverage test",
          "is_bot": false,
          "headline": "Fix right-pane Backspace navigation (#247)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-19T13:52:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e8dc6f55bda2be4c065691790eb9036d0539af2",
          "body": null,
          "is_bot": false,
          "headline": "Add Plan Now option for new Flow creation",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-19T13:47:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58bba0079be9ad447499b2437b91995a0610c0c1",
          "body": "* Default new flows to auto mode\n\n* Harden flow auto mode default coverage",
          "is_bot": false,
          "headline": "Default new flows to auto mode (#246)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-19T13:42:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74f11109ec0aa1224e542d5453c3e782164e7e8a",
          "body": "Block the n shortcut from opening the new Flow modal while active flows are shown, preserve normal Flow-list creation, and cover active-flow shortcut/status-bar behavior.",
          "is_bot": false,
          "headline": "Block new Flow shortcut in active flows (#244)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-19T13:30:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bceb4db6c728aebf3503a2884a16d1edd265f347",
          "body": "* Default new flow launches to headless\n\n* Cover interactive new flow headless independence",
          "is_bot": false,
          "headline": "Default new Flow plan launches to headless (#243)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-19T13:27:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0cb2978dd2aebe9648a6350611c9259cb3ec780",
          "body": "* Map numbered review loop prompts\n\nTreat review-loop-1 as the standard Review Loop prompt and review-loop-2 as the Autoreview prompt, including configured flow prompt templates and plan-body read behavior. Add coverage for both aliases and document the mapping.\n\n* Review local worktree in autorevie\n[…]\nequiring PR metadata for recovery launches, and move missing-PR UI state to Merge.\n\n* Remove stale autoreview PR metadata references\n\n* Add default view picker\n\n* Handle commented config table headers",
          "is_bot": false,
          "headline": "Add default view picker (#242)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-19T04:07:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8a603733f7e2aa8925285aa18b2edf7167e42d79",
          "body": "This reverts commit 8c6da91ca062d3eaa1b1e1c820c8d191c1e2df95.",
          "is_bot": false,
          "headline": "Revert \"Update Flow review and PR phase order (#238)\" (#241)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-19T04:04:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "952985e1d2bcde656bf2e54218992d2807d4c9ef",
          "body": null,
          "is_bot": false,
          "headline": "Add Flow pane Tab and Backspace shortcuts",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-19T03:49:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5a874a45af50510f076e6aa3148ea373c066921",
          "body": "* Create worktree before Flow in wtui-flow-create skill\n\nUpdate the wtui-flow-create skill so it fetches the base ref (default\norigin/main) and creates a dedicated flow/<slug> branch and worktree\nbefore running wtui flow create, then passes --worktree-path, --branch,\n--base-ref, and --commit and ver\n[…]\ning a\nworktree by path alone failed the gate. Derive WTUI_BRANCH and\nWTUI_COMMIT from the reused worktree when unset (base_ref still defaults\nto origin/main) so the reuse path ships complete metadata.",
          "is_bot": false,
          "headline": "Create worktree before Flow in wtui-flow-create skill (#239)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-18T00:07:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8c6da91ca062d3eaa1b1e1c820c8d191c1e2df95",
          "body": "* Map numbered review loop prompts\n\nTreat review-loop-1 as the standard Review Loop prompt and review-loop-2 as the Autoreview prompt, including configured flow prompt templates and plan-body read behavior. Add coverage for both aliases and document the mapping.\n\n* Review local worktree in autorevie\n[…]\n. Keep review-loop-2 on the Autoreview prompt/outcome path without requiring PR metadata for recovery launches, and move missing-PR UI state to Merge.\n\n* Remove stale autoreview PR metadata references",
          "is_bot": false,
          "headline": "Update Flow review and PR phase order (#238)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-17T19:32:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ba3d51848a31447ce05448c94d2461368570189e",
          "body": "* Show repository in active flows\n\nAdd an active-flows-only Repo column to the Flow table, deriving the label from each record's repo path while leaving the normal scoped Flow view unchanged.\n\nCover the active Flow list, selected rows, expanded phase rows, split-pane rendering, and the normal Flow h\n[…]\nscanner repo display name when rendering the active flows Repo column so grouped repositories keep parent context. Keep the basename fallback for flows whose repo path is not in the scanned repo list.",
          "is_bot": false,
          "headline": "Show repository in active flows (#236)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-16T00:06:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3fb1aea1e43d3915c06f6d9cf1aa4c60430f82c7",
          "body": "Make the F3 active-flows surface load records globally, apply repo filtering locally only while the left repo pane is focused, preserve F2 pane switching semantics, and keep active-flow refreshes on the global path.\\n\\nVerified with go test ./model, gofmt -l ., make test, make build, and GitHub CI.",
          "is_bot": false,
          "headline": "Make active flows global (#235)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-15T16:43:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6d4bb585cdb38f32ed69154b149c41b05be54fe",
          "body": "## Summary\n- Make Flow mode pane navigation use tab/backtab instead of left/right pane swapping.\n- Keep active Flow focus cleanup consistent when expanded phases or terminal panes change.\n- Update Flow/navigation tests and README shortcut docs for the new behavior.\n\n## Verification\n- gofmt -l .\n- make test\n- make build\n- temporary merge validation against origin/main at c102d8d: gofmt -l ., make test, make build",
          "is_bot": false,
          "headline": "Refine Flow pane navigation (#233)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-15T16:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c102d8d382f96b727871427f32f24d93c568f6c3",
          "body": "* Wrap arrow view navigation at edges\n\nMake left and right arrow navigation wrap between the first and last right-pane views while preserving the separate h/l clamping path and active Flow surface no-op behavior.\n\nUpdate model and Flow tests to assert the wrapped destination fetches and the unchange\n[…]\n wrap navigation review coverage\n\nAdd review-loop coverage for active Flow surface visibility after right/l no-op navigation and for left-arrow wrapping into Flows through the refresh scheduling path.",
          "is_bot": false,
          "headline": "Wrap arrow navigation at pane edges (#234)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-15T15:39:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac9f4256a0ec7e4daf4540fec1d47ec158fb6f97",
          "body": "* Clamp arrow navigation to right-pane views\n\nLeft and right arrows no longer move focus between the repo pane and content pane. Right-pane arrow navigation still moves between views, but clamps at worktrees and flows while preserving selection state and Flow terminal command-mode behavior.\n\nUpdate \n[…]\n review feedback for arrow navigation\n\nKeep active-flow numbered mode switching scoped to the right pane, suppress misleading active-flow arrow hints, and document clamped right-pane arrow navigation.",
          "is_bot": false,
          "headline": "Remove left/right pane swapping (#232)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-15T13:00:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c2f2227aa0e919937477100f73c319759e251cca",
          "body": "Switch Flow phase launch from ctrl+j to g, keep the shortcut scoped to Flow surfaces, and preserve the updated active-flow/F2 behavior from main.",
          "is_bot": false,
          "headline": "Change Flow launch shortcut to g",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-15T02:58:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "124e07fee7ce009cb5293bfc8a88b2911fb7388b",
          "body": "Add F2 as an alternate pane-switch key, update shortcut rendering/docs, and preserve the behavior across Flow embedded-terminal routing and the active-flows surface.",
          "is_bot": false,
          "headline": "Add F2 pane switching shortcut (#230)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-15T02:51:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c71859d10a4cb1684d3c40291159d12827afc70c",
          "body": "* Add F3 active flows view\n\nIntroduce a current-repo active Flow surface that preserves the numbered mode while showing non-merged Flow records. Route Flow selection, actions, refreshes, and embedded terminal focus through the visible Flow surface so hidden merged rows are not action targets.\n\nDocum\n[…]\n hints\n\nMake F3 active-flow entry supersede stale Flow refresh requests, matching explicit Flow refresh behavior. Render Flow terminal prefix shortcuts when Active Flows is layered over Sessions mode.",
          "is_bot": false,
          "headline": "Add F3 active flows view (#229)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-15T00:19:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "426995abec59aa7373034b22a55862fb314a38b3",
          "body": "Extract Flow phase launch orchestration and deepen launch coordinator coverage.",
          "is_bot": false,
          "headline": "Deepen Flow launch phase orchestration (#228)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-14T15:42:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "198e1d816da10651f993a410d4180288e7ebcd1d",
          "body": "Defer Flow auto-mode launches while the completed CLI phase terminal is still running or auto-closing, refresh Flows after terminal exit, and suppress stale failed/manual terminal launches by launch ID.\\n\\nUpdate Flow auto-mode docs and regression coverage for deferred launches, exit-triggered refresh, stale auto-mode no-ops, failed terminal guardrails, and stale failed terminal suppression.",
          "is_bot": false,
          "headline": "Trigger Flow auto mode after terminal exit",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-14T13:06:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "485748342b7b3fecb0265e8bfa42735499e4db46",
          "body": "* Ensure Flow prompts include done instruction\n\nAppend a common wtui-flow done-marking instruction to built-in and configured Flow phase prompts, with duplicate guarding based on the final standalone template line.\n\nCover default prompts, all configured template keys, and duplicate-guard cases, then\n[…]\nn guard\n\nApply review-loop feedback by requiring an exact final guard line for custom Flow prompt templates, expanding generic prompt coverage, and quoting the appended phase-done instruction in docs.",
          "is_bot": false,
          "headline": "Ensure Flow prompts require completion persistence (#225)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-14T12:44:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "863039a81418c669f740bc49eac7750ae2893448",
          "body": "* Focus interactive Flow terminals\n\nSwitch successful non-headless Flow embedded launches into terminal input focus so interactive Codex and Claude phases receive ordinary keys immediately. Preserve list focus for headless launches and manual command-mode behavior for tabbed terminal focus.\n\nDocumen\n[…]\nturn focus to the list even when a previous interactive terminal was in input mode. Also apply the interactive terminal focus behavior to Flow phase resumes and cover both paths with regression tests.",
          "is_bot": false,
          "headline": "Focus interactive Flow terminals after launch (#223)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-14T03:21:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "552289e31023d413c4e9fcbf0a19dafe312cf6c4",
          "body": "* Auto-open detached embedded terminals\n\nWhen a tmux-backed embedded terminal detaches, open the generated reattach command in an external terminal using TERMINAL, configured terminal command, or the macOS Terminal AppleScript fallback. Keep active/current multiplexers out of this handoff so wtui do\n[…]\nmands with the selected cwd before running the tmux attach target. Add regression coverage for Terminal fallback, configured Terminal.app, and iTerm while keeping CLI terminal argv behavior unchanged.",
          "is_bot": false,
          "headline": "Auto-open detached embedded terminals (#224)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-14T03:16:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4b4e9aba9537adf64230f1fb601d016efecb6854",
          "body": "Split Flow mode shortcut hints into Actions, Mode, Agent, and Global groups, and make Flow y copy the selected Flow worktree path instead of Flow or phase IDs. Hide the copy shortcut when no worktree path is available and update docs/tests for the new behavior.\n\nReview follow-up: keep the full Flow footer ordered by those shortcut sections, add regression coverage for that ordering, and update stale Flow launch docs/test text to use ctrl+j terminology.",
          "is_bot": false,
          "headline": "Reorganize Flow shortcuts",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-14T03:08:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c0be5b13db43ec9173afc07b26e7de882368b4e",
          "body": "* Detach embedded terminals to tmux\n\nStart embedded CLI agent launches through per-launch tmux sessions when tmux is available, with direct PTY fallback when it is not. Add a tmux-backed terminal runtime that detaches by closing wtui's client while preserving terminate semantics for owned sessions.\n\n[…]\nt multiplexer env for embedded agents\n\nFilter TMUX and ZELLIJ out of the generated tmux-backed agent script so tools run inside the isolated agent pane do not inherit stale parent multiplexer sockets.",
          "is_bot": false,
          "headline": "Detach embedded terminals to tmux (#221)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T23:44:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dd892bb0b8076fe9d6ea8805054cc1f22e167305",
          "body": "Interactive tracked Flow CLI launches now prefill provider prompts into embedded PTYs without submitting them, wait for terminal readiness before paste, and sanitize terminal controls before bracketed paste.\\n\\nVerified with gofmt -l ., make test, make build, and GitHub CI.",
          "is_bot": false,
          "headline": "Prefill interactive Flow launch prompts",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T23:35:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9d5100545623183ec81926cb6d95d594636a579",
          "body": "Show active terminal markers in the repo list and keep repo row spacing stable when any filtered repo has a running embedded terminal.",
          "is_bot": false,
          "headline": "Show active terminal markers in repo list",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T18:18:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "312cbeaa077014fd46017623b579bcce3018ca25",
          "body": "* Update Plan Review prompt goal\n\nRoute the built-in Plan Review Flow launch prompt through the review-loop workflow goal review-and-revise while preserving the minimal saved-plan metadata and wtui-flow persistence guidance. Update prompt coverage and docs to match.\n\n* Fix Flow terminal sync after f\n[…]\nd Flow when right-pane filtering changes the selected row, unless terminal focus owns the active terminal. Document the Flow auto-mode m shortcut and add a regression test for filtered Flow selection.",
          "is_bot": false,
          "headline": "Revise Plan Review prompt goal (#218)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T17:14:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eb4f36306084b8ff8bbd77ef51492e6997e9bc18",
          "body": "* Show Flow auto-mode shortcut\n\nExpose the existing m auto-mode toggle in the Flows shortcut footer for both selected Flow rows and selected phase rows. Add UI coverage for the on/off labels so the control stays discoverable.\n\n* Keep Flow auto-mode hint in compact footer\n\nAdd the auto-mode toggle to Flow footer fallback lists so selected Flow and phase rows still show m: auto in compact terminal widths. Cover the 120-column compact status bar case that previously dropped the hint.",
          "is_bot": false,
          "headline": "Show Flow auto-mode shortcut (#216)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T03:12:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bebca880f6698460761472775a2c4b608be8be8a",
          "body": "Bubble Tea v1 never reports a distinct ctrl+enter key (CR is always\n\"enter\", LF is \"ctrl+j\"), so the ctrl+enter case and hints were dead or\nmisleading in terminals like iTerm2 where Ctrl+Enter transmits CR. Drop\nthe ctrl+enter key case, hint text, and README wording in favor of the\nctrl+j binding that actually works.",
          "is_bot": false,
          "headline": "Advertise ctrl+j as the Flow launch-next binding (#215)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T03:01:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fab302edbc91fe1dd061234cd05c52d417521902",
          "body": "* Auto-select active Flow terminal\n\nSync the active Flow embedded terminal to the selected Flow after list navigation, expanded phase boundary movement, and Flow refresh reconciliation. The sync uses structured Flow terminal slot metadata, keeps an already-active matching terminal, and leaves the cu\n[…]\nve so periodic Flow refreshes do not override an explicitly selected terminal tab.\n\nAdd a regression test for preserving the active Flow terminal across accepted Flow refreshes while terminal-focused.",
          "is_bot": false,
          "headline": "Auto-select active Flow terminal (#208)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T02:54:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aaf69b090088d18fd55a49110b71b45140ea69ac",
          "body": "Set the built-in Review Loop Flow launch prompt to use the review-and-revise goal while preserving the minimal metadata and persistence guidance. Add coverage proving custom review_loop templates still replace the built-in prompt unchanged, and update the prompt summaries in docs.",
          "is_bot": false,
          "headline": "Update Review Loop prompt goal (#211)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T02:46:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a430b4a04ca8c6b21a42b53d8236d2231e400d8e",
          "body": "* Add single-form Flow creation\n\nReplace the multi-step Flow creation prompt sequence with one form containing title, multiline instructions, and optional base ref fields. Add opt-in multiline form field behavior and compact Flow form rendering over the normal TUI background.\n\n* Scope Flow creation \n[…]\nocused on the compact single-form workflow.\\n\\nAlso tighten the Flow form overlay so it composites over the app, advertise multiline form newlines, and document the single Flow creation form behavior.",
          "is_bot": false,
          "headline": "Add single-form Flow creation (#214)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T02:21:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2553653d6684633a305a85cfb65404685ad81ff4",
          "body": "* Use default agent settings for Flow launches\n\nNormalize the configured Flow launch agent once and pass that command plus its provider-specific reasoning effort through new Flow Plan launches, manual phase launches, and auto-launched phases. Preserve codex-app effort omission and existing resume se\n[…]\n\n\nRename configured-agent Flow launch tests to avoid implying fallback default behavior.\n\nAdd direct codex-app auto-launch coverage to verify the external route is used without reasoning effort flags.",
          "is_bot": false,
          "headline": "Use default agent settings for Flow launches (#210)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T02:05:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "654218a18f321e8cbb0ce3fb320dd49f6da4793f",
          "body": "Show the configured Flow agent as the A shortcut label, keep reasoning effort separate, and preserve the current launch-next footer behavior from main.",
          "is_bot": false,
          "headline": "Clarify Flow agent shortcut hint",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T01:54:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38668546381c6d186e4c164532e19ca7eefcf13b",
          "body": "* Add Flow create headless option\n\nInsert a final Flow create options form with a default-off Headless checkbox and use that value for the initial CLI Plan launch. Keep the flows-mode h toggle scoped to selected phase launches, preserve create request tagging, and update docs and model tests for the\n[…]\nthrough the Flow create prompt messages so stale async submissions cannot open the options form or start a Flow after the selected repo changes. Add a regression test for the base-ref submit boundary.",
          "is_bot": false,
          "headline": "Add Flow create headless option (#213)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T01:49:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c45d16b4b7bd65ee2ccea007ef42f7a1d959a64",
          "body": "* Update Flow phase launch shortcuts\n\nMake Enter consistently toggle Flow phase rows and add Ctrl+Enter/Ctrl+J handling to launch the first launchable phase for the selected Flow. Update shortcut rendering, stale phase selection scoping, README docs, and model/UI coverage for the new launch behavior\n[…]\n remove the obsolete selected-phase launch plumbing left after moving Flow launches to Ctrl+Enter.\n\nRefresh the affected model and UI tests so their names and diagnostics describe Ctrl+Enter behavior.",
          "is_bot": false,
          "headline": "Update Flow phase launch shortcuts (#212)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-13T01:02:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2c9c1a8a51adb513f669cda50d92e585f92694ce",
          "body": "Add per-Flow auto mode controls, persistence, UI indication, and automatic progression through non-merge phases.\\n\\nStops automation before Merge and preserves manual merge launch semantics.\\n\\nVerified with CI after syncing the branch with main.",
          "is_bot": false,
          "headline": "Add Flow auto mode (#207)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T20:25:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90dd7ba4526ab95df274036da5ecd1d36d347f46",
          "body": "Add provider-specific reasoning effort configuration and Flow launch picker support.",
          "is_bot": false,
          "headline": "Enable Flow reasoning effort selection",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T19:26:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1b89e56577daa9cbef4f14014659ecde5a68679",
          "body": "* Add repo creation workflow\n\nAdd local-first repository creation with optional GitHub origin setup and retry metadata for partial remote failures. Wire the resolved scanner root into the model, add a generic modal form renderer, and expose the left-pane new repo workflow with refresh-and-select beh\n[…]\nth identity so repo creation destinations from an absolute parent still match relative scanner results.\n\nClear unmatched pending selections after refresh to avoid repeatedly resetting the repo filter.",
          "is_bot": false,
          "headline": "Add repo creation workflow (#206)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T19:23:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fa799711a37658a1293a3ed71162ce820bc7551e",
          "body": "Update the built-in Flow Plan Review launch prompt to invoke review-loop with max 6 loops.\n\nCover the new built-in prompt and Plan Review template override behavior, and align the README/config prompt summaries.",
          "is_bot": false,
          "headline": "Increase Plan Review review-loop cap (#204)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T18:40:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1cf64c28a0ab4e3b315991af87a29803bbaf937",
          "body": "* Add Flow await-session reset recovery\n\nAdd a UI-owned Flow store mutation that removes orphaned latest launch attempts and re-derives ready state without exposing ready as an agent transition.\n\nWire Flow mode to show x reset ready only for eligible await-session phases, confirm before persisting, \n[…]\non-mismatched only after legacy duplicate phase rows are collapsed. This preserves the supported duplicate-row recovery path while preventing merged session history from detaching from its launch IDs.",
          "is_bot": false,
          "headline": "Add Flow phase reset recovery key (#202)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T18:21:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "247cb7dc004b92f6df2d5e180135652ef6fd0429",
          "body": "Embedded terminals bound ctrl+g as the wtui command prefix (sessions\nscope) and command-mode toggle (flows scope), so interactive agents in\nthe PTY never received it — Claude Code binds ctrl+g to open the prompt\nin an external editor. Pressing it in input mode silently switched to\nwtui command mode \n[…]\nnds a literal ctrl+]\nto the agent. Status-bar hints, the terminal header badge, and the\nREADME/config/AGENTS docs now reflect the new key and call out that\nagent shortcuts such as ctrl+g pass through.",
          "is_bot": false,
          "headline": "Move embedded terminal command key off ctrl+g (#205)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T18:11:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0871693728ef688d357bb8810862a4fb5e91ef78",
          "body": "Merge PR #200 after resolving current main conflicts and passing CI.",
          "is_bot": false,
          "headline": "Support non-headless Flow CLI launches (#200)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T14:16:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84671fb14badd7b0196b13c3d12d21b403a889f4",
          "body": "* Add wtui Flow creation skill\n\nDocument a new provider-agnostic wtui-flow-create skill for ad hoc sessions that need to create a persisted Flow and optionally import an existing plan.\n\nCover the skill with agent-skill contract tests, verify documented runnable flags against the implemented Flow and\n[…]\n after a failed command.\n\nStrengthen the agent-skill contract tests to cover guarded failure bodies, unset-safe shell variables, shared state-root usage, and command-specific runnable flag validation.",
          "is_bot": false,
          "headline": "Add wtui Flow creation skill (#201)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T13:51:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0dde55afe38301609237132c0ded03b280d6fe4c",
          "body": "Add confirmed Flow deletion from the flows pane via the d key.\n\nDelete only persisted Flow metadata/artifacts while preserving repositories, worktrees, sessions, transcripts, and unrelated lock files. Refresh Flow UI state safely after deletion and document the behavior.\n\nVerification:\n- gofmt -l .\n- make test\n- make build",
          "is_bot": false,
          "headline": "Add confirmed Flow deletion (#199)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T13:45:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a42b0b939016a8d17712f1a315719be30f53d9e1",
          "body": null,
          "is_bot": false,
          "headline": "add resolve conflicts to merge phase",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T13:37:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a8db9dc21ac2994b112f0269dcdf3273161e90a",
          "body": "* Auto-refresh Flow list in flows mode\n\nSchedule a one-second Flow list refresh loop when the TUI starts in or enters flows mode, while ignoring stale generations and ticks outside flows mode.\n\nPreserve expanded Flow phase selection across accepted refresh results when the refreshed records still co\n[…]\ned request completes.\n\nExpand model coverage for startup, flows-mode entry paths, slow and fast manual refetch ordering, stale tracked completions, fetch errors, and embedded terminal tick assertions.",
          "is_bot": false,
          "headline": "Auto-refresh Flow list in flows mode (#198)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T13:25:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8a524726a3e1d8227a22258d326844291a51c63c",
          "body": "* Add compact select modal layout\n\nIntroduce select modal layout metadata and pass it through the model-to-UI boundary. Render select overlays as bounded panels composited over the current view with explicit/auto sizing, placement, ANSI-safe slicing, and viewporting for short panels.\n\nMigrate the ag\n[…]\nlicate rows from hiding the active phase after resume attempts.\n\nAlso keep auto-sized select panels wide enough for the longest unselected item and add regression coverage for the reviewed edge cases.",
          "is_bot": false,
          "headline": "Extract compact picker modal (#197)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T13:19:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8105c6c91a3d0156993602092ca625415ca0b10e",
          "body": "Render empty input modal placeholders with the existing muted italic placeholder style while keeping the prompt and cursor outside that styling. Add focused render coverage for single-line, wrapped, and non-empty input cases.",
          "is_bot": false,
          "headline": "Fade input modal placeholders (#196)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T13:16:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b78dac7a49bf878e693304cb7b03a47466c6398",
          "body": "* Disable custom Codex PR reviewer workflow\n\nRemove the resolve_pr/codex/post_feedback job chain and the pull_request\ntrigger so the openai/codex-action reviewer no longer runs on PRs or\n@codex mentions. The @autoreview pipeline is unchanged, and PR review\nremains handled by the chatgpt-codex-connec\n[…]\nshared terminal command-prefix state if the Flow terminal pane currently owns that interaction context. This keeps a Sessions terminal ctrl-g prefix active when Flow PTYs auto-close in the background.",
          "is_bot": false,
          "headline": "Make Flow terminals command-driven (#195)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T11:22:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4cade60cbd9bfd551f1e225ffdb09d20434f1485",
          "body": "* Preserve terminal Flow phase status on session resume\n\nResuming an attached session of a completed or skipped Flow phase\npreviously went through the same AddPhaseLaunchID path as fresh\nlaunches, which forced the phase back to running, cleared its outcome,\nand reverted downstream readiness (e.g. pr\n[…]\ng readable hint text.\n\n* Tighten headless shortcut styling\n\nRestore footer status styling after the green headless-on indicator and strengthen Flow shortcut tests for on/off pane and footer rendering.",
          "is_bot": false,
          "headline": "Highlight Flow headless mode indicator (#194)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T04:05:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1b22f6cf0f08616cfaf30696b8eaa7fbb518328f",
          "body": "Reserve one horizontal column between embedded terminal borders and header/live output, while keeping tiny panes usable and PTY width aligned with the rendered content width.\n\nCover the width helpers, frame rendering, split-flow/session assertions, and model start sizing.",
          "is_bot": false,
          "headline": "Pad embedded terminal content (#193)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T03:59:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39c7e5baf9908db566877148903ff3c0c315546f",
          "body": "* Disable custom Codex PR reviewer workflow\n\nRemove the resolve_pr/codex/post_feedback job chain and the pull_request\ntrigger so the openai/codex-action reviewer no longer runs on PRs or\n@codex mentions. The @autoreview pipeline is unchanged, and PR review\nremains handled by the chatgpt-codex-connec\n[…]\nlose-confirm state when an exited Flow embedded terminal is auto-dismissed. Add regression coverage for promoted Flow terminals so subsequent keys and confirmations do not apply to the wrong terminal.",
          "is_bot": false,
          "headline": "Auto-close exited Flow embedded terminals (#192)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T03:45:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9651c1c1ffe7df558673e475ed74e5d89a94f4be",
          "body": "* Preserve terminal Flow phase status on session resume\n\nResuming an attached session of a completed or skipped Flow phase\npreviously went through the same AddPhaseLaunchID path as fresh\nlaunches, which forced the phase back to running, cleared its outcome,\nand reverted downstream readiness (e.g. pr\n[…]\nmodel phase lookup with normalized store phase IDs when interpreting the persisted record returned from AddPhaseLaunchID, and document that codex-app resume deep links remain untracked app navigation.",
          "is_bot": false,
          "headline": "Preserve terminal Flow phase status on session resume (#189)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T03:30:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "79756115145bc42236e1832f511b34c555b0c4bf",
          "body": "* Mark active Flow terminals\n\nTrack flow-scoped embedded terminal activity by structured Flow and phase IDs, pass active running/starting terminals into the renderer, and show a success-colored marker on matching Flow and phase rows without shifting columns.\n\nAdd UI and model coverage for selected r\n[…]\nive Flow and phase rows.\n\n* Align Flow marker tests with phase launches\n\nUpdate the active Flow terminal marker tests to use the current Enter-on-selected-phase launch path after restacking onto main.",
          "is_bot": false,
          "headline": "Mark active Flow terminals in flows mode (#190)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T02:30:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d407e27649fd158d064ec88a9354d7eef7c69ef",
          "body": "* Disable custom Codex PR reviewer workflow\n\nRemove the resolve_pr/codex/post_feedback job chain and the pull_request\ntrigger so the openai/codex-action reviewer no longer runs on PRs or\n@codex mentions. The @autoreview pipeline is unchanged, and PR review\nremains handled by the chatgpt-codex-connector GitHub App.\n\n* Remove @autoreview pipeline as well\n\nWith the custom Codex reviewer already removed, the autoreview jobs were\nall that remained in codex.yml, so delete the workflow entirely.",
          "is_bot": false,
          "headline": "Remove Codex reviewer and autoreview GHA workflow (#191)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T02:18:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fcca59886c9a76c8b42f32f71a38f39bca76777",
          "body": "* Add embedded terminal pane border\n\nRender embedded session and Flow terminals inside a focus-aware frame and share geometry helpers for right-pane and PTY sizing. Adjust model sizing so PTY start, visible-line, and resize calls receive the framed body dimensions, including shortcut suppression and\n[…]\nut-pane visibility so PTY width stays aligned with the rendered frame.\n\nGuard Flow split rendering for tiny viewport allocations and add regression coverage for search resize and tiny split rendering.",
          "is_bot": false,
          "headline": "Add embedded terminal pane border (#187)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T02:17:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c15e9026a7e605b57a2c308e3416cdd431a934aa",
          "body": "Add reusable single-line and multi-line modal input state with cursor movement, insertion, deletion, and newline handling.\n\nMigrate prompt flows to the common modal input types and update UI modal rendering to constrain width, wrap long input lines, and render cursor-aware input content.\n\nVerification: gofmt -l .; make test; make build.",
          "is_bot": false,
          "headline": "Add common cursor-aware input modals",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T02:04:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bce78e0f36d85faab3075bbd8147b13a577165d1",
          "body": "Renumber embedded terminal tab labels within each scope after close/dismiss actions while preserving stable internal PTY identity for close and terminate paths.\\n\\nAlso refresh the PR on top of current main and update the regression tests for the context-aware Flow phase launch shortcut.",
          "is_bot": false,
          "headline": "Renumber embedded terminal tabs on close (#184)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T02:01:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dead4dc46490c80a7b1f014d436072ba619a6b7a",
          "body": "* Make Flow shortcuts context-aware\n\nRoute flows-view enter through the selected row: Flow rows expand phases, and selected launchable phase rows launch that exact phase. Add default-on headless mode with h toggling, remove legacy x/a/i Flow behavior, and update hints/docs for the new shortcut contr\n[…]\nessage when a selected Implementation phase is still gated, and keep Flow terminal prefix hints visible in narrow footers.\n\nUpdate agent-facing project docs and add regression coverage for both fixes.",
          "is_bot": false,
          "headline": "Make Flow shortcuts context-aware (#185)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T01:50:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a84905e953fe21c9acd7ef03cee4e463e79e90d3",
          "body": "* Embed new flow plan launches\n\nRoute new Flow Plan launches for CLI providers through the existing flow-scoped embedded terminal path, while preserving the external codex-app route. Add request tagging for embedded create results so stale new-Flow launches are ignored without affecting requestless \n[…]\n\n\n* Test stale codex-app flow launches\n\nAdd coverage for stale new-Flow create messages on the codex-app external launch path so the request guard is exercised alongside the embedded CLI launch route.",
          "is_bot": false,
          "headline": "Embed new Flow plan launches (#183)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T01:48:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "99c9b819f107610ef20e1f44d018fa44e2f3f0fe",
          "body": "Align the wtui-flow skill's Merge Phase goal and the default merge\nlaunch prompt on the same phrasing: the phase merges a single PR\ndeliberately, without implying a separate review-approval condition\nthe prompt never checked.",
          "is_bot": false,
          "headline": "Simplify merge phase wording to \"merge the PR deliberately\" (#186)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T01:43:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2f1ec5cee0d5089aa29f5277dac8b6a4e3a7d5f",
          "body": "* Point plan-review launches at the wtui-flow skill\n\nPlan Review was the only Flow phase launch prompt with no completion\nsignal: it told the agent to run the review-loop skill but never said\nthis is a wtui Flow phase or that a verdict must be recorded. The\nwtui-flow skill's env-var trigger (WTUI_FL\n[…]\nheadless agents could finish the work without\npersisting the phase result. Add the one-line wtui-flow pointer to both\nprompts, keeping them free of embedded status commands as the launch\ntests assert.",
          "is_bot": false,
          "headline": "Point plan-review launches at the wtui-flow skill (#182)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-12T01:14:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dcd0161165b0df9ae662159989f974b1e1e4cb2b",
          "body": "* Embed headless Flow phase agents\n\nAdd an explicit headless launch mode for CLI agents, wiring Codex exec and Claude --print without JSON output while preserving hook metadata.\n\nSplit Flow launch shortcuts so a keeps the external route and i starts scoped embedded PTYs with Flow metadata, focus rou\n[…]\nery other unmapped prefix key, instead of silently switching focus.\n- Correct README and config docs: codex exec streams progress, while\n  claude --print only prints its result when the run completes.",
          "is_bot": false,
          "headline": "Embed headless Flow phase agents (#181)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-11T23:45:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b7977cb6bf0bb038a1c29d013257ce8999ffc9e3",
          "body": "* Embed CLI session resumes in sessions pane\n\nAdd an embeddedterm PTY package and route full sessions-view Codex/Claude resumes into runtime-only terminal slots with ctrl+g command handling for input, switching, picker resume, close, termination, quit cleanup, and resize.\n\nKeep codex-app resumes on \n[…]\nme embedded terminal fallback and repaint behavior.\n\nRename terminal query filtering and post-exit snapshot tests to match the vt emulator implementation introduced by the embedded terminal reshaping.",
          "is_bot": false,
          "headline": "Embed CLI session resumes in sessions pane (#178)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-11T16:53:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1d23b8e9906717a068bdf9d2969bc4b08648f554",
          "body": "* Replace autoreview workflow with Codex action\n\nRun the standard openai/codex-action review flow directly instead of the reusable autoreview ship workflow. Resolve PR context for pull request, comment, review, and manual triggers, and allow chatgpt-codex-connector[bot] to trigger Codex runs.\n\n* Spl\n[…]\nd trigger instructions as JSON string outputs before interpolating them into the Codex prompt. This prevents untrusted PR text from breaking out of Markdown code fences with embedded fence delimiters.",
          "is_bot": false,
          "headline": "Split Codex and autoreview workflow triggers (#179)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-11T01:43:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f2ec2de5e23c8babc09a27564ecae2c45ee5b13b",
          "body": "* Document Flow linked plan sync\n\nExplain that completed Flow phases sync matching linked saved-plan phases, including the needs_attention failure mode. Also update roadmap language now that scan depth is already configurable and remaining scan work is focused on additional excludes.\n\n* Clarify comp\n[…]\nn sync failures mark a Flow phase needs_attention only when transitioning into completed. Note that idempotent completed retries preserve the completed Flow phase even if linked-plan sync later fails.",
          "is_bot": false,
          "headline": "Document Flow linked plan sync (#177)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-10T23:27:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d77e773f64f8c5d80331f190f4bea900ee709c91",
          "body": "Update the README, config reference, roadmap notes, and agent context to reflect the Flow UI's expanded-phase resume behavior and current recoverable phase labels.",
          "is_bot": false,
          "headline": "Document Flow phase session resume (#176)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-10T21:19:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41a97ba23c179e7a892c5f046280952042e44f8b",
          "body": "* Add automatic Codex PR review\n\nRun the Codex autoreview workflow when pull requests are opened, reopened, or marked ready for review while skipping drafts.\n\nRemove the Claude GitHub Actions workflows so GHA only uses the Codex review path.\n\n* Guard automatic Codex reviews for forks\n\nRestrict the pull_request-triggered Codex autoreview path to same-repository PRs so forked PRs do not fail when repository secrets are unavailable.",
          "is_bot": false,
          "headline": "Add automatic Codex PR review (#175)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-10T21:17:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8cf27eac70d688d2f2d7a31c6ec56f0ed8679e82",
          "body": "Add a high-level Flow phase restart command for blocked and needs-attention phases, with atomic store validation and merge metadata reset handling.\n\nDefault Autoreview action outcomes, shorten Autoreview launch prompts, improve missing-PR recovery messaging, and update the Flow docs and bundled skill contract.",
          "is_bot": false,
          "headline": "Simplify Autoreview recovery handling (#174)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-10T19:30:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bab2ce713ce5b808a4c53eaf884e903ff2f48fc7",
          "body": "Add configurable Flow phase prompt templates and wire them from config into model launch contexts. Update built-in Flow prompts to steer agents toward planning-only, commit, review-loop, and ship workflows where appropriate, and shorten Autoreview launch instructions.",
          "is_bot": false,
          "headline": "Tighten Flow phase launch prompts (#173)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-10T18:35:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ef7db2844cf5cd4d868397a970f44031c2fa02f",
          "body": "Add complete, block, and needs-attention wrappers for Flow phase updates. The wrappers reuse canonical SetPhase validation, default unambiguous Plan Review outcomes, and return JSON with the updated phase plus next actionable phase state.\\n\\nUpdate CLI help, docs, and the wtui-flow agent skill, with tests for success paths, invalid Plan Review outcomes, and help coverage.",
          "is_bot": false,
          "headline": "Add high-level Flow phase commands (#172)",
          "author_name": "Brian Bell",
          "author_login": "brian-bell",
          "committed_at": "2026-06-10T15:17:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 13,
      "commits_last_year": 226,
      "latest_release_at": "2026-07-16T00:59:30Z",
      "latest_release_tag": "v0.8.0",
      "releases_from_tags": false,
      "days_since_last_push": 11,
      "active_weeks_last_year": 15,
      "days_since_latest_release": 11,
      "mean_days_between_releases": 4.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/brian-bell/wtui",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/brian-bell/wtui",
          "is_deprecated": false,
          "latest_version": "v0.8.0",
          "repository_url": "https://github.com/brian-bell/wtui",
          "versions_count": 13,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T23:14:01Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 11
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 2
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 439365,
      "source_files_sampled": 113,
      "oversized_source_files": 13,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 1392
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "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": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/charmbracelet/bubbletea",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.10"
        },
        {
          "name": "github.com/charmbracelet/lipgloss",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/charmbracelet/x/ansi",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.11.6"
        },
        {
          "name": "github.com/charmbracelet/x/vt",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20260305213658-fe36e8c10185"
        },
        {
          "name": "github.com/creack/pty",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.24"
        },
        {
          "name": "github.com/google/shlex",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20191202100458-e7afc7fbc510"
        },
        {
          "name": "github.com/muesli/termenv",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.16.0"
        },
        {
          "name": "github.com/pelletier/go-toml/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.3.1"
        }
      ],
      "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": 0,
        "merged_prs": 206,
        "open_issues": 2,
        "closed_ratio": 0.971,
        "closed_issues": 68,
        "closed_unmerged_prs": 4
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "brian-bell",
          "commits": 224,
          "avatar_url": "https://avatars.githubusercontent.com/u/312039?v=4"
        },
        {
          "type": "User",
          "login": "brianbell-nyt",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/297165134?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.991
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release-snapshot.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "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": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "26 out of 26 merged PRs checked by a CI test -- score normalized to 10",
            "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 30 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": 10,
            "reason": "packaging workflow 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": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "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": 8,
            "reason": "2 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "009d776c8f46d826288cac31815903626ea0df84",
        "ran_at": "2026-07-27T12:00:50Z",
        "aggregate_score": 4.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-16T01:00:37Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-15T23:14:02Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 252,
          "created_at": "2026-06-19T15:41:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 277,
          "created_at": "2026-07-04T23:08:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/brian-bell/wtui",
    "host": "github.com",
    "name": "wtui",
    "owner": "brian-bell"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 55,
      "inputs": {
        "security": 41,
        "vitality": 76,
        "community": 24,
        "governance": 57,
        "engineering": 71
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 76,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 67,
            "inputs": {
              "commits_last_year": 226,
              "human_commit_share": 1,
              "days_since_last_push": 11,
              "active_weeks_last_year": 15
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 11 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 11
                    }
                  }
                ],
                "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": "226 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 226
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 30 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": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 13,
              "latest_release_tag": "v0.8.0",
              "releases_from_tags": false,
              "days_since_latest_release": 11,
              "mean_days_between_releases": 4.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "13 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 11 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 11
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~4.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 4.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "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": 0,
                "status": "missed",
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 57,
        "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.991
            },
            "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 99% of commits",
                "points": 0.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "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": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "merged_prs": 206,
              "open_issues": 2,
              "closed_issues": 68,
              "issue_closed_ratio": 0.971,
              "closed_unmerged_prs": 4
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "97% of issues closed",
                "points": 45.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "206/210 decided PRs merged",
                "points": 37.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 206,
                      "decided": 210
                    }
                  }
                ],
                "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": 51,
            "inputs": {
              "followers": 12,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "brian-bell",
              "public_repos": 29,
              "account_age_days": 5878
            },
            "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": "12 followers of brian-bell",
                "points": 8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 12,
                      "login": "brian-bell"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "29 public repos, account ~16 yr old",
                "points": 22.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 29
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 16
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/brian-bell/wtui"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 11
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 11 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 11
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "13 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 71,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "26 out of 26 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "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": null,
                "points": 0,
                "status": "missed",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 41,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 41,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 4.1
            },
            "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 is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "26 out of 26 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "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 30 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "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": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "2 existing vulnerabilities detected",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "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": 0.92,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 1392
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, 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": "92 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 92,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "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": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 94,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 439365,
              "source_files_sampled": 113,
              "oversized_source_files": 13
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "13/113 source files over 60KB",
                "points": 48.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 113,
                      "oversized": 13
                    }
                  }
                ],
                "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": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T12:01:06.963768Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/brian-bell/wtui.svg",
  "full_name": "brian-bell/wtui",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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