Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-27 12:01 UTC

brian-bell / wtui

A terminal UI for conveniently managing multiple git repos.

GoMIT★ 0 Sterne⑂ 0 Forksseit März 2026Auf GitHub ansehen ↗

brian-bell/wtui erreicht einen Gesundheitsindex von 55 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (76/100) ab, am schwächsten bei Community & Adoption (24/100). Zuletzt vor 11 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

55
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

55
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Brian BellPersönliches Konto
12 Follower29 öffentliche Reposseit Juni 2010

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
Gogithub.com/brian-bell/wtuiv0.8.0-13vor 11 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

76Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
28.8/36Push-Aktualität — letzter Push vor 11 Tagen
10.4/36Commit-Rhythmus — 15/52 Wochen mit Commits
18/18Commit-Volumen — 226 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year226
human_commit_share1
days_since_last_push11
active_weeks_last_year15
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 13 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 11 Tagen
27/27Release-Rhythmus — ein Release etwa alle 4,1 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count13
latest_release_tagv0.8.0
releases_from_tagsnein
days_since_latest_release11
mean_days_between_releases4,1

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

24Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 0 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

57Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0.2/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 99 % der Commits
2.7/13.5Breite der Beitragenden — 2 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled2
top_contributor_share0,991
Wie die Bewertung erfolgt
45.4/46.8Issue-Lösungsquote — 97 % der Issues geschlossen
37.5/38.3PR-Annahme — 206/210 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs206
open_issues2
closed_issues68
issue_closed_ratio0,971
closed_unmerged_prs4
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
8/25Reichweite des Inhabers — 12 Follower von brian-bell
22.8/25Kontohistorie — 29 öffentliche Repos, Kontoalter ca. 16 Jahre
Verwendete Eingangsdaten
followers12
owner_typeUser
is_verified
owner_loginbrian-bell
public_repos29
account_age_days5.878
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf go
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 11 Tagen
20/20Versionshistorie — 13 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/brian-bell/wtui
ecosystemsgo
any_deprecatednein
min_days_since_publish11

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

71Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 3 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 26 out of 26 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

41Gefährdet · 16 % des Gesamtindex

Sicherheitslage

41Gefährdet
Wie die Bewertung erfolgt
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.5Lizenz — 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
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate4,1

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

75Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 92 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,92
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes1.392
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Go (statisch typisiert)
10/10Reproduzierbare Umgebung — lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesgo.sum
has_dockerfilenein
typed_languageja
bootstrap_filesMakefile
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
48.7/55Handhabbare Dateigrößen — 13/113 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes439.365
source_files_sampled113
oversized_source_files13

Eckdaten

0GitHub-Sterne
2Mitwirkende
226Commits, letzte 12 Monate
11Tage seit letztem Push
13Releases
1Bus-Faktor
2offene Issues
GoPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

OpenSSF Scorecard 4.1 / 10
4.1Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).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
Direkte Abhängigkeiten 8
RegistryPaketVersionsvorgabeManifest
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
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "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"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo.