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

tellang / triflux

CLI-first multi-model orchestrator — routes tasks to Codex, Gemini, and Claude

JavaScriptMIT★ 7 зірок⑂ 2 форкиз бер. 2026 р.Переглянути на GitHub ↗

tellang/triflux має індекс здоров’я 64 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (86/100), найнижчий — Security (38/100). Останнє оновлення було 1 день тому. Більшість нещодавньої роботи виконує один учасник.

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

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

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

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

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

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

Власність

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

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

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

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікаціяТеги
npmtriflux10.44.03 5712944 дні томуclaude-codeplugincodexantigravitycli-routingorchestrationmulti-modeltrifluxtfx

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

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

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

86Відмінний · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 1 дн. тому
12.5/36Ритм комітів — 18/52 тижнів із комітами
18/18Обсяг комітів — 1 445 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year1 445
human_commit_share1
days_since_last_push1
active_weeks_last_year18
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 100 релізів
36/36Свіжість релізів — останній реліз 4 дн. тому
27/27Ритм релізів — реліз кожні ~3,3 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count100
latest_release_tagv10.44.0
releases_from_tagsні
days_since_latest_release4
mean_days_between_releases3,3
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

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

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

47У зоні ризику · 18% загального індексу
Як обчислюється оцінка
12.6/60Зірки — 7 зірок
0/25Форки — 2 форків
0/15Спостерігачі — 0 спостерігачів
Використані вхідні дані
forks2
stars7
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
18/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingтак
has_issue_templateні
has_code_of_conductні
has_pull_request_templateтак
Як обчислюється оцінка
47.4/80Щомісячні завантаження — 3 571 завантажень/місяць у npm
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagestriflux
dependents
ecosystemsnpm
total_downloads
monthly_downloads3 571
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

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

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

56Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0/22.5Розподіл комітів — головний контриб’ютор — автор 100% комітів
1.4/13.5Широта контриб’юторів — 1 контриб’юторів
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Використані вхідні дані
bus_factor1
contributors_sampled1
top_contributor_share1
Як обчислюється оцінка
40.5/46.8Вирішення issue — закрито 87% issue
36.5/38.3Прийняття PR — злито 277/290 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 0/22 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs277
open_issues27
closed_issues175
issue_closed_ratio0,866
closed_unmerged_prs13
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
9.9/25Охоплення власника — 23 підписників у tellang
22.4/25Послужний список — 26 публічних репозиторіїв, вік облікового запису ~8 р.
Використані вхідні дані
followers23
owner_typeUser
is_verified
owner_logintellang
public_repos26
account_age_days3 058
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

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

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у npm
35/35Свіжість публікацій — остання публікація 4 дн. тому
20/20Історія версій — 294 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagestriflux
ecosystemsnpm
any_deprecatedні
min_days_since_publish4

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

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

86Відмінний · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 3 процес(ів) CI
24/24Наявні тести
16/16Конфігурація лінтера — biome.json
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 4 out of 4 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configтак
has_precommit_configні

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

90Відмінний
Як обчислюється оцінка
30/30README
25/25Каталог документації
15/15Сайт документації / домашня сторінка — https://www.npmjs.com/package/triflux
10/10Опис репозиторію
10/10Теми — 10 тем
0/10Wiki
Використані вхідні дані
topicsai-routing, claude-code, claude-plugin, cli-orchestrator, codex-cli, developer-tools, gemini-cli, multi-model, task-automation, terminal
has_wikiні
homepagehttps://www.npmjs.com/package/triflux
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

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

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

Стан безпеки

38У зоні ризику
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 4 out of 4 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/22 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
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 — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 30 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,8
Виключено з оцінювання (немає даних або не застосовно): signed_releases. Залишкові ваги перенормовано.

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

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

63Помірний · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — AGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/CLAUDE.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 96 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,96
agent_instruction_filesAGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/CLAUDE.md
agent_instruction_max_bytes11 674
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
11/11Конфігурація лінтера / форматера — biome.json
11/11Статична перевірка типів — jsconfig.json
10/10Відтворюване середовище — lockfile
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
2/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
Використані вхідні дані
has_nixні
has_testsтак
lockfilespackage-lock.json
has_dockerfileні
typed_languageні
bootstrap_files
has_devcontainerні
has_linter_configтак
typecheck_configsjsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Як обчислюється оцінка
27/45Типізований код — JavaScript з конфігурацією перевірки типів (jsconfig.json)
54.1/55Керовані розміри файлів — 26/1 586 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageJavaScript
largest_source_bytes253 000
source_files_sampled1 586
oversized_source_files26
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
20/20Сервер MCP
0/40Придатні до запуску приклади
Використані вхідні дані
example_dirs
has_mcp_signalтак
api_schema_files

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

7зірок GitHub
1контриб'юторів
1 445комітів за останні 12 місяців
1днів від останнього пушу
100релізів
1бас-фактор
27відкритих issue
npmпакетних екосистем

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

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:triflux@10.44.0; advisories assessed against the repository dependency graph instead

Докладніше

Історія зірок і форків 7 ★ / 2 ⇿
7Зірки
2Форки
58Релізи

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

01345687212026-042026-042026-05
Мажорні 1Мінорні 15Патчі 42
OpenSSF Scorecard 3.8 / 10
3.8сукупно

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests4 out of 4 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/22 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities30 existing vulnerabilities detected
Прямі залежності 8
РеєстрПакетОбмеження версіїМаніфест
npm@iarna/toml^2.2.5package.json
npm@modelcontextprotocol/sdk^1.29.0package.json
npmbetter-sqlite3^12.10.0package.json
npmpino^10.3.1package.json
npmpino-pretty^13.1.3package.json
npmsystray2^2.1.4package.json
npmtree-kill^1.2.2package.json
npmzod^4.0.0package.json
Усі залежності не зібрано

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

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [
        "ai-routing",
        "claude-code",
        "claude-plugin",
        "cli-orchestrator",
        "codex-cli",
        "developer-tools",
        "gemini-cli",
        "multi-model",
        "task-automation",
        "terminal"
      ],
      "is_fork": false,
      "size_kb": 56423,
      "has_wiki": false,
      "homepage": "https://www.npmjs.com/package/triflux",
      "languages": {
        "HTML": 857305,
        "Shell": 437763,
        "Swift": 14175,
        "JavaScript": 14460412,
        "PowerShell": 12304
      },
      "pushed_at": "2026-07-20T09:30:44Z",
      "created_at": "2026-03-18T13:20:05Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T09:31:35Z",
      "description": "CLI-first multi-model orchestrator — routes tasks to Codex, Gemini, and Claude",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "tellang",
      "type": "User",
      "login": "tellang",
      "company": null,
      "location": null,
      "followers": 23,
      "avatar_url": "https://avatars.githubusercontent.com/u/37146362?v=4",
      "created_at": "2018-03-07T13:04:48Z",
      "is_verified": null,
      "public_repos": 26,
      "account_age_days": 3058
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v10.44.0",
          "kind": "minor",
          "published_at": "2026-07-17T07:35:07Z"
        },
        {
          "tag": "v10.43.0",
          "kind": "minor",
          "published_at": "2026-07-16T08:04:20Z"
        },
        {
          "tag": "v10.42.0",
          "kind": "minor",
          "published_at": "2026-07-07T05:59:43Z"
        },
        {
          "tag": "v10.41.1",
          "kind": "patch",
          "published_at": "2026-07-01T05:38:10Z"
        },
        {
          "tag": "v10.41.0",
          "kind": "minor",
          "published_at": "2026-06-29T08:11:21Z"
        },
        {
          "tag": "v10.40.0",
          "kind": "minor",
          "published_at": "2026-06-26T08:08:57Z"
        },
        {
          "tag": "v10.39.1",
          "kind": "patch",
          "published_at": "2026-06-19T07:27:03Z"
        },
        {
          "tag": "v10.39.0",
          "kind": "minor",
          "published_at": "2026-06-18T03:42:54Z"
        },
        {
          "tag": "v10.38.0",
          "kind": "minor",
          "published_at": "2026-06-18T02:12:23Z"
        },
        {
          "tag": "v10.37.0",
          "kind": "minor",
          "published_at": "2026-06-17T07:34:23Z"
        },
        {
          "tag": "v10.36.0",
          "kind": "minor",
          "published_at": "2026-06-16T03:07:24Z"
        },
        {
          "tag": "v10.35.3",
          "kind": "patch",
          "published_at": "2026-06-16T01:15:23Z"
        },
        {
          "tag": "v10.35.2",
          "kind": "patch",
          "published_at": "2026-06-15T03:06:37Z"
        },
        {
          "tag": "v10.35.1",
          "kind": "patch",
          "published_at": "2026-06-13T14:35:47Z"
        },
        {
          "tag": "v10.35.0",
          "kind": "minor",
          "published_at": "2026-06-11T07:51:04Z"
        },
        {
          "tag": "v10.34.0",
          "kind": "minor",
          "published_at": "2026-06-10T05:51:42Z"
        },
        {
          "tag": "v10.33.1",
          "kind": "patch",
          "published_at": "2026-06-09T07:05:26Z"
        },
        {
          "tag": "v10.33.0",
          "kind": "minor",
          "published_at": "2026-06-09T03:38:48Z"
        },
        {
          "tag": "v10.32.0",
          "kind": "minor",
          "published_at": "2026-06-08T06:14:24Z"
        },
        {
          "tag": "v10.31.0",
          "kind": "minor",
          "published_at": "2026-06-08T03:48:37Z"
        },
        {
          "tag": "v10.30.1",
          "kind": "patch",
          "published_at": "2026-06-08T03:11:06Z"
        },
        {
          "tag": "v10.30.0",
          "kind": "minor",
          "published_at": "2026-06-04T04:18:59Z"
        },
        {
          "tag": "v10.29.0",
          "kind": "minor",
          "published_at": "2026-06-02T01:56:41Z"
        },
        {
          "tag": "v10.28.1",
          "kind": "patch",
          "published_at": "2026-06-01T04:10:00Z"
        },
        {
          "tag": "v10.28.0",
          "kind": "minor",
          "published_at": "2026-05-29T08:53:36Z"
        },
        {
          "tag": "v10.27.0",
          "kind": "minor",
          "published_at": "2026-05-28T07:56:47Z"
        },
        {
          "tag": "v10.26.0",
          "kind": "minor",
          "published_at": "2026-05-28T01:16:40Z"
        },
        {
          "tag": "v10.25.1",
          "kind": "patch",
          "published_at": "2026-05-21T09:47:20Z"
        },
        {
          "tag": "v10.25.0",
          "kind": "minor",
          "published_at": "2026-05-21T02:45:28Z"
        },
        {
          "tag": "v10.24.0",
          "kind": "minor",
          "published_at": "2026-05-20T00:45:55Z"
        },
        {
          "tag": "v10.23.0",
          "kind": "minor",
          "published_at": "2026-05-19T07:52:30Z"
        },
        {
          "tag": "v10.22.0",
          "kind": "minor",
          "published_at": "2026-05-19T00:05:20Z"
        },
        {
          "tag": "v10.21.0",
          "kind": "minor",
          "published_at": "2026-05-16T04:45:16Z"
        },
        {
          "tag": "v10.20.2",
          "kind": "patch",
          "published_at": "2026-05-14T00:25:20Z"
        },
        {
          "tag": "v10.20.1",
          "kind": "patch",
          "published_at": "2026-05-12T00:51:46Z"
        },
        {
          "tag": "v10.20.0",
          "kind": "minor",
          "published_at": "2026-05-12T00:03:27Z"
        },
        {
          "tag": "v10.19.0",
          "kind": "minor",
          "published_at": "2026-05-11T03:59:33Z"
        },
        {
          "tag": "v10.18.2",
          "kind": "patch",
          "published_at": "2026-05-07T03:25:06Z"
        },
        {
          "tag": "v10.18.1",
          "kind": "patch",
          "published_at": "2026-05-07T02:57:46Z"
        },
        {
          "tag": "v10.18.0",
          "kind": "minor",
          "published_at": "2026-04-30T04:08:03Z"
        },
        {
          "tag": "v10.17.4",
          "kind": "patch",
          "published_at": "2026-04-27T14:04:04Z"
        },
        {
          "tag": "v10.17.3",
          "kind": "patch",
          "published_at": "2026-04-27T12:37:27Z"
        },
        {
          "tag": "v10.17.2",
          "kind": "patch",
          "published_at": "2026-04-27T12:03:39Z"
        },
        {
          "tag": "v10.17.1",
          "kind": "patch",
          "published_at": "2026-04-27T11:42:50Z"
        },
        {
          "tag": "v10.17.0",
          "kind": "minor",
          "published_at": "2026-04-26T05:10:57Z"
        },
        {
          "tag": "v10.16.0",
          "kind": "minor",
          "published_at": "2026-04-26T02:02:59Z"
        },
        {
          "tag": "v10.15.0",
          "kind": "minor",
          "published_at": "2026-04-25T10:07:16Z"
        },
        {
          "tag": "v10.14.3",
          "kind": "patch",
          "published_at": "2026-04-24T17:14:11Z"
        },
        {
          "tag": "v10.14.2",
          "kind": "patch",
          "published_at": "2026-04-24T14:23:32Z"
        },
        {
          "tag": "v10.14.1",
          "kind": "patch",
          "published_at": "2026-04-24T13:29:24Z"
        },
        {
          "tag": "v10.14.0",
          "kind": "minor",
          "published_at": "2026-04-24T06:30:17Z"
        },
        {
          "tag": "v10.13.10",
          "kind": "patch",
          "published_at": "2026-04-22T17:03:20Z"
        },
        {
          "tag": "v10.13.9",
          "kind": "patch",
          "published_at": "2026-04-22T16:18:50Z"
        },
        {
          "tag": "v10.13.8",
          "kind": "patch",
          "published_at": "2026-04-22T13:31:27Z"
        },
        {
          "tag": "v10.13.7",
          "kind": "patch",
          "published_at": "2026-04-22T10:29:37Z"
        },
        {
          "tag": "v10.13.6",
          "kind": "patch",
          "published_at": "2026-04-22T08:02:35Z"
        },
        {
          "tag": "v10.13.5",
          "kind": "patch",
          "published_at": "2026-04-22T07:00:47Z"
        },
        {
          "tag": "v10.13.3",
          "kind": "patch",
          "published_at": "2026-04-22T06:31:09Z"
        },
        {
          "tag": "v10.13.2",
          "kind": "patch",
          "published_at": "2026-04-21T06:41:01Z"
        },
        {
          "tag": "v10.13.1",
          "kind": "patch",
          "published_at": "2026-04-21T03:49:18Z"
        },
        {
          "tag": "v10.13.0",
          "kind": "minor",
          "published_at": "2026-04-20T15:35:09Z"
        },
        {
          "tag": "v10.12.0",
          "kind": "minor",
          "published_at": "2026-04-18T14:14:18Z"
        },
        {
          "tag": "v10.11.0",
          "kind": "minor",
          "published_at": "2026-04-18T07:12:48Z"
        },
        {
          "tag": "v10.10.0",
          "kind": "minor",
          "published_at": "2026-04-18T03:57:14Z"
        },
        {
          "tag": "v10.9.32",
          "kind": "patch",
          "published_at": "2026-04-17T17:15:51Z"
        },
        {
          "tag": "v10.9.31",
          "kind": "patch",
          "published_at": "2026-04-17T15:15:32Z"
        },
        {
          "tag": "v10.9.30",
          "kind": "patch",
          "published_at": "2026-04-17T14:03:45Z"
        },
        {
          "tag": "v10.9.29",
          "kind": "patch",
          "published_at": "2026-04-16T13:38:33Z"
        },
        {
          "tag": "v10.9.28",
          "kind": "patch",
          "published_at": "2026-04-15T11:52:05Z"
        },
        {
          "tag": "v10.9.21",
          "kind": "patch",
          "published_at": "2026-04-13T07:29:06Z"
        },
        {
          "tag": "v10.9.20",
          "kind": "patch",
          "published_at": "2026-04-13T04:24:28Z"
        },
        {
          "tag": "v10.9.16",
          "kind": "patch",
          "published_at": "2026-04-11T16:36:18Z"
        },
        {
          "tag": "v10.9.15",
          "kind": "patch",
          "published_at": "2026-04-11T15:52:48Z"
        },
        {
          "tag": "v10.9.14",
          "kind": "patch",
          "published_at": "2026-04-11T14:43:29Z"
        },
        {
          "tag": "v10.9.13",
          "kind": "patch",
          "published_at": "2026-04-11T13:48:54Z"
        },
        {
          "tag": "v10.9.12",
          "kind": "patch",
          "published_at": "2026-04-11T06:25:40Z"
        },
        {
          "tag": "v10.9.11",
          "kind": "patch",
          "published_at": "2026-04-11T06:21:01Z"
        },
        {
          "tag": "v10.9.9",
          "kind": "patch",
          "published_at": "2026-04-11T05:58:51Z"
        },
        {
          "tag": "v10.9.8",
          "kind": "patch",
          "published_at": "2026-04-11T05:56:24Z"
        },
        {
          "tag": "v10.9.7",
          "kind": "patch",
          "published_at": "2026-04-11T05:45:27Z"
        },
        {
          "tag": "v10.9.5",
          "kind": "patch",
          "published_at": "2026-04-11T04:51:35Z"
        },
        {
          "tag": "v10.8.1",
          "kind": "patch",
          "published_at": "2026-04-09T06:53:19Z"
        },
        {
          "tag": "v10.8.0",
          "kind": "minor",
          "published_at": "2026-04-09T06:15:03Z"
        },
        {
          "tag": "v10.7.1",
          "kind": "patch",
          "published_at": "2026-04-09T03:05:24Z"
        },
        {
          "tag": "v10.7.0",
          "kind": "minor",
          "published_at": "2026-04-09T02:47:09Z"
        },
        {
          "tag": "v10.4.0",
          "kind": "minor",
          "published_at": "2026-04-08T11:32:31Z"
        },
        {
          "tag": "v10.3.1",
          "kind": "patch",
          "published_at": "2026-04-07T08:40:51Z"
        },
        {
          "tag": "v10.2.0",
          "kind": "minor",
          "published_at": "2026-04-07T06:22:39Z"
        },
        {
          "tag": "v10.1.1",
          "kind": "patch",
          "published_at": "2026-04-07T00:48:29Z"
        },
        {
          "tag": "v10.0.0",
          "kind": "major",
          "published_at": "2026-04-05T16:01:17Z"
        },
        {
          "tag": "v10.0.3",
          "kind": "patch",
          "published_at": "2026-04-05T16:40:15Z"
        },
        {
          "tag": "v10.0.2",
          "kind": "patch",
          "published_at": "2026-04-05T16:37:05Z"
        },
        {
          "tag": "v9.1.0",
          "kind": "minor",
          "published_at": "2026-03-31T08:46:08Z"
        },
        {
          "tag": "v8.9.2",
          "kind": "patch",
          "published_at": "2026-03-29T23:21:37Z"
        },
        {
          "tag": "v8.8.1",
          "kind": "patch",
          "published_at": "2026-03-29T11:29:27Z"
        },
        {
          "tag": "v8.8.0",
          "kind": "minor",
          "published_at": "2026-03-29T11:23:42Z"
        },
        {
          "tag": "v8.5.0",
          "kind": "minor",
          "published_at": "2026-03-29T06:23:03Z"
        },
        {
          "tag": "v8.4.0",
          "kind": "minor",
          "published_at": "2026-03-29T04:09:21Z"
        },
        {
          "tag": "v7.4.0",
          "kind": "minor",
          "published_at": "2026-03-27T14:00:22Z"
        },
        {
          "tag": "v7.1.4",
          "kind": "patch",
          "published_at": "2026-03-27T00:05:29Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "f1a981bf5e99bd546e7e0d4524d30062135230d2",
          "body": "Codex MCP transport 채널이 실행 중 죽으면 codex exec가 exit 0 + 빈 stdout으로\n끝나고, recover_codex_stdout이 stderr 크래시 노이즈를 STDOUT_LOG에 backfill해\nno-op 가드의 `! -s STDOUT_LOG`를 무력화 → 빈손 실행이 success로 오보고됐다.\n\n원칙(SSOT): 복구된 stderr는 진짜 워커 산출물이 아니다.\n- codex-recovery.sh: 복구 진입 시 CODEX_STDOUT_WAS_RECOVERED=1 노출 +\n  codex_st\n[…]\ndown 로그는 관측 오탐 방지 위해 이슈 미기록.\n\n테스트: 유닛 12 + e2e(exec-mcp-crash 승격 / exec-output-and-crash 성공유지).\n옛 코드에서 exit_code:0/success 재현(RED) → 수정 후 exit 68 승격 확인.\n경계(genuine+서명→성공) 잠금. touched surface 60 green.",
          "is_bot": false,
          "headline": "fix(tfx-route): 복구된 stderr 노이즈를 진짜 산출물로 오인하던 false-success 차단",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T08:57:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "38c17a0583b6ad5cba1fccb7d9f7142c2a46352a",
          "body": null,
          "is_bot": false,
          "headline": "test(hub): close B0 expiry sweep gaps",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T06:45:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6fd92b3bb57862ac9cac94e43fcc468807c0bca2",
          "body": null,
          "is_bot": false,
          "headline": "refactor(hub): remove orphan human request expiry",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T06:45:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69819f05c41aa91f06576c60790f2efe09de429c",
          "body": null,
          "is_bot": false,
          "headline": "test(release): cover core memory store mirror",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T06:45:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe481ed9373dde034ae5b58707bb2612d23e8550",
          "body": null,
          "is_bot": false,
          "headline": "fix(core): resync memory store mirror",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T06:43:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3cfb7b43d5460423f0395994b9f58042b547630",
          "body": "…xpiry sweep\n\nopus 적대 리뷰 MERGE_OK(§4 전항 PASS·신규 회귀 0). 실착지(Hub 재기동) 시\nDLQ 대량 전이 발생 — 착지 직전 expected set 재고정 게이트는 별도 이행.\n\nClaude-Session: https://claude.ai/code/session_01Xg168vibLBvFW9yKbn6mw6",
          "is_bot": false,
          "headline": "Merge branch 'feat/lane2-e-candb-b0' — candB B0 store-authoritative e…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T06:22:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08607f8b11413b911c01c9457e76ad68994ff37b",
          "body": null,
          "is_bot": false,
          "headline": "fix(hub): recover expired messages at startup",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T05:26:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f924476065a7593bba18af9bad5f0af3ef028fe",
          "body": "S01 locks unqualified clarification to the host and reserves tfx-interview for explicit TFX quantified flows; update the legacy unit assertion to that boundary.",
          "is_bot": false,
          "headline": "test(routing): align interview trigger contract",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T05:25:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74c30437cf56132f85c17fcc1ec5c2e62020eb21",
          "body": null,
          "is_bot": false,
          "headline": "fix(routing): narrow legacy trigger examples",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T00:59:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "366cd3e3adbc9057fd8967ad7a46524b70854cd8",
          "body": "…e-2 E 후속)\n\nopus 적대 교차리뷰 완료: P1(packages 미러 드리프트)=a35dc6bb로 수리,\nfull unit suite 3847/3842 pass·0 fail 실측 후 병합.\n원인 서술 교정(리뷰 P2-1): /tmp/cc-daemon-* 스캐너는 리포에 부재 —\n전체 suite RED의 실제 기제는 ambient 테스트가 실 ~/.claude configDir\n해시로 라이브 데몬에 접속하는 역방향 간섭으로 판정. tmpRoot 격리는\n방향과 무관하게 유효한 수리.\n잔여 P2 3건(기본 tmpRoot 검증 테스트 부재·동일 패턴 1건·/tmp 하드코딩)은\nmnk-callbot .tfx/plans/2000-p21-v12-followups.md 백로그에 기록.",
          "is_bot": false,
          "headline": "Merge branch 'feat/test-socket-isolation' — daemon socket 테스트 격리 (Lan…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T12:21:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a35dc6bbe47f37a183cbff14e7909c99631e80d1",
          "body": null,
          "is_bot": false,
          "headline": "test: sync package mirrors for daemon socket isolation",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T12:07:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8a1af407af394d710d4c69e713598da13fb4a74",
          "body": null,
          "is_bot": false,
          "headline": "test: isolate fake daemon sockets",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T11:23:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd01807e788f16174c57bb6267fa17bb560c46a2",
          "body": "…cle (Lane-2 E-A)",
          "is_bot": false,
          "headline": "Merge branch 'feat/lane2-e-presence-fencing' — fenced presence lifecy…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T09:50:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "daa65d4b109591154e948dde02666260d501fe89",
          "body": null,
          "is_bot": false,
          "headline": "test(hub): restore legacy heartbeat coverage",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T09:41:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7741974ec4b33f52d687098a3e42e1795fefdc4",
          "body": null,
          "is_bot": false,
          "headline": "fix(hub): make presence generation fencing opt-in",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T09:36:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86bdcc5f1d7489ccecefbbc950f4b05130bc834b",
          "body": null,
          "is_bot": false,
          "headline": "fix(hub): fenced presence lifecycle and identity gate",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T09:04:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fe3676b47614f60ab92bd447966346b5f050aa7",
          "body": "fix(release): prepare 테스트 출력 실시간 스트리밍 — 실패 로그 절단 제거",
          "is_bot": false,
          "headline": "Merge pull request #492 from tellang/fix/release-prepare-streaming",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T08:12:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b07dbf2c83cfe0ed74563e189394d748c29e2ad7",
          "body": null,
          "is_bot": false,
          "headline": "fix(release): 리뷰 반영 — 회귀 테스트 정합 + timeout/signal 진단 보존 + stdin ignore 유지",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T08:11:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e777a345f75a8f11a24c68772a0376e44d01ddf8",
          "body": "- npm-test 스텝 stdio inherit — GH Actions가 실패 테스트명을 보존\n- 실패 시 대용량 execFileSync output 객체 재던지기 제거 (스텝명+exit code만)\n- 대용량 캡처가 오류 메시지에 포함되지 않는 회귀 테스트 추가\n- packages/triflux 미러 byte-identical 동기",
          "is_bot": false,
          "headline": "fix(release): prepare 테스트 출력을 실시간 스트리밍으로 전환해 실패 로그 절단 제거",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:59:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9b1e82585c123ecb8855ed476ef3a940949ea8d",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.44.0",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:34:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19362cc05c27b769a54bc00c420c662b2085b47a",
          "body": null,
          "is_bot": false,
          "headline": "docs(changelog): v10.44.0 항목 추가",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:28:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "394afae974b7933cef1bd11166384a207466e679",
          "body": "feat(routing): codex max/ultra 프로파일 레인 (A작업 복구 + 중앙화 정책 포팅)",
          "is_bot": false,
          "headline": "Merge pull request #490 from tellang/feat/codex-max-ultra-routing",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:21:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03b1d5a78a18c8d47d7c07a0437986ebc838bb9d",
          "body": null,
          "is_bot": false,
          "headline": "feat(routing): max/ultra 레인을 agent-route-policy로 포팅",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:12:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77bc3741a871f8dc548362977c567863ead135e6",
          "body": "feat(hub): registration plumbing — scoped role 신원/transport locator 배관 (C6a-3)",
          "is_bot": false,
          "headline": "Merge pull request #489 from tellang/feat/c6a3-registration",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:08:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9f1255a8acf9a89d4e80c7ae6c7f43acb5c4cd7",
          "body": null,
          "is_bot": false,
          "headline": "merge: main 병합 (중앙화 정책 채택)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:04:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da04a2bd3afabfb1c6a240c89c1e07eab3be5a09",
          "body": "…riflux into feat/c6a3-registration",
          "is_bot": false,
          "headline": "Merge branch 'feat/c6a3-registration' of https://github.com/tellang/t…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:01:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78b35c8ad1fe423d8a7d0c9488a00f78d1af2512",
          "body": "… 누락)",
          "is_bot": false,
          "headline": "fix(test): check-mirror 픽스처 CORE_MIRRORS에 router 쌍 추가 (cd6e569e 동반 갱신…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:01:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f21dbae993898f506bfe7a483ef270f1ede17a00",
          "body": "fix(swarm): rootDir 통합 제거 — 임시 worktree 통합 + preflight lease-dirty NO-GO (데이터손실 재발 방지)",
          "is_bot": false,
          "headline": "Merge pull request #488 from tellang/feat/swarm-rootdir-integration-fix",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:59:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78f81cd3f1ae5f314c28089530525d5a4723f06b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into feat/c6a3-registration",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:53:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd03b1e482ce1fd9c620fc7136b76f907b16f9fc",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into feat/swarm-rootdir-integration-fix",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:53:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37c5c8604cc85539250c919326fb1a487bf5892c",
          "body": "feat(routing): keyword hook repo_scope/explicit/disabled + 명시토큰 전용 규칙 (A 슬라이스 재구현)",
          "is_bot": false,
          "headline": "Merge pull request #487 from tellang/worktree-keyword-routing-verbs",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:53:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd6e569e66822f204c623b9973d9adeca17405e6",
          "body": "…er 등록 (리뷰 P2)\n\nC6a-3 커밋이 root router만 갱신하고 packages/core/hub/router.mjs를 빠뜨려\npublished @triflux/remote(core router import)가 신원 필드를 조용히 버리는\n드리프트 유발 — 실측: registerAgent ok:true인데 host_id/session_id/locators\n전부 null/[] (ADR-0010 presence 계약 위반). release:check-mirror의\nCORE_FILE_MIRRORS가 router를 미검사하는 사각지대도 함께 봉합.",
          "is_bot": false,
          "headline": "fix(mirror): core router 미러 동기 + check-mirror CORE_FILE_MIRRORS에 rout…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:49:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a8cc90925f59358d64879f1982b4cc606d78a7a",
          "body": "…g red 해소)\n\n151baa86부터 main CI red — lane2-d가 tfx-interview description을 D2 소유권\n경계(무수식 일반 요구사항 명확화 = host deep-interview)로 의도적으로 좁혔는데,\n이 테스트가 이관된 옛 무수식 트리거(딥인터뷰/소크라테스/깊이 탐색)를 계속 잠그고\n있었다. 현 표면(deep-interview/tfx-interview/요구사항 분석) + D2 경계 문장을\n회귀 가드로 재잠금.",
          "is_bot": false,
          "headline": "fix(test): deep-interview 트리거 검증을 lane2-d 좁힌 표면에 정렬 (main pre-existin…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:47:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c70f61a02b60aaac0e2354a94265d4ea4ed0678d",
          "body": "…가드 심링크 허용\n\n- P2-1: 전용 명시토큰 규칙 7종에 explicit:true — 'tfx-prune으로 클린업 해줘'가\n  광역 클린업 매처(host-ai-slop-cleaner, 사전순 선행)에 뺏기던 문제를\n  selectPrimaryMatch explicit 우선으로 해결 + 회귀 테스트\n- P2-2: direct-run 가드가 심링크 설치 경로에서 훅을 무력화(argv[1]=심링크 vs\n  import.meta.url=실경로) → realpathSync 재비교 + 심링크 spawn 회귀 테스트\n- biome 포맷 정규화 (json 배열 스타일)\n\n검증: 152 tests 0 fail, release:check-mirror OK, biome clean",
          "is_bot": false,
          "headline": "fix(routing): Codex 리뷰 P2 2건 반영 — 명시토큰 규칙 explicit:true + direct-run …",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:38:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0df73a3048fb22a48ce18e27538d3c4b32ec8984",
          "body": "…시토큰 규칙 (A 슬라이스 재구현, lane2-d 잠금 조정)\n\n소실된 keyword-rules 슬라이스를 생존 테스트(keyword-routing-verbs.test.mjs)를\n명세로 재구현. lane2-d locked prompt matrix(2026-07-17)와의 충돌은 신규 잠금\n우선으로 조정:\n- 광역 동사(리뷰해/분석해/계획/검증/찾아봐 등)는 tfx-unified 유지 (hook은 broad,\n  세분화는 D-트리) — root cause ①의 hook 계층 분리는 접음\n- root cause ③: tfx-ship \n[…]\nresearch/find)은 명시 토큰 전용,\n  priority 1 + supersedes tfx-unified\n- keyword-detector: 테스트 import 시 stdin 행 방지 direct-run 가드\n\n검증: keyword/routing 계열 149 tests 0 fail, release:check-mirror OK, biome clean",
          "is_bot": false,
          "headline": "feat(routing): keyword hook에 repo_scope/explicit/disabled 메커니즘 + 전용 명…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:30:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "77d5e74c2baa626bc6a76e03c297976cb915abda",
          "body": "…-GO (데이터손실 재발 방지)",
          "is_bot": false,
          "headline": "fix(swarm): rootDir 통합 제거 — 임시 worktree 통합 + preflight lease-dirty NO…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:21:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c00e297567e979c5a7572525c213e9f19830b54",
          "body": "…관 (C6a-3)",
          "is_bot": false,
          "headline": "feat(hub): registration plumbing — scoped role 신원/transport locator 배…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:19:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "151baa86e0ee79d787021b71e15aeafe8580866c",
          "body": "…nable rationale\n\ngstack-ship 재활성화 기록: 519677a7이 사유 미기록 상태로 disable했던 규칙을 50d5b8bf가 H09 잠금(PR 만들어줘→gstack-ship) 달성에 필수라 재활성화함. 충돌 안전(tfx-ship.supersedes가 배포 케이스 해소). 원 disable 사유가 발견되면 H09 잠금 재검토. 리뷰 D-1/D-3 지적에 따른 사후 기록.",
          "is_bot": false,
          "headline": "fix(lint): balanced-paren Agent call parser + record gstack-ship re-e…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:42:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50d5b8bf8f64a019bb3cf868ff27e5758b627daa",
          "body": null,
          "is_bot": false,
          "headline": "fix(routing): apply locked H03 H06 H09 precedence",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:14:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87853c3e1d1dddccca4559ee25efb6ea5a5f7ccf",
          "body": null,
          "is_bot": false,
          "headline": "feat(harness): sync SSOT-reading Codex adapter",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:13:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e290a83040334992e03f5807db7b822da5b4188",
          "body": null,
          "is_bot": false,
          "headline": "docs(routing): lock host and TFX ownership boundaries",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:07:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a51a1bf45300f9e5c461324ce81f8444c731f5ed",
          "body": null,
          "is_bot": false,
          "headline": "fix(skills): require explicit models for Agent handoffs",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:06:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "409f38bbfc635e8a2d2abd796dfe966065d1710f",
          "body": null,
          "is_bot": false,
          "headline": "refactor(routing): centralize Codex agent policy",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:05:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a485b8b6613703bcd3117ff251104094f064967",
          "body": "docs(adr): ADR-0011 accepted 승격",
          "is_bot": false,
          "headline": "Merge pull request #486 from tellang/worktree-adr-0011-accept",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T04:31:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f78f25c39a3ccbaff77d8fe489494523951b4fb",
          "body": null,
          "is_bot": false,
          "headline": "docs(adr): ADR-0011 accepted 승격 (C6a 계약 확정 — C6a-1/C6a-2 랜딩 근거)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T04:25:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bb19eb2a54779ebdbf3fc5d155b9691c578495d",
          "body": "feat(core): register role contract kernel in pack CORE_FILES (C6a-1 follow-up)",
          "is_bot": false,
          "headline": "Merge pull request #485 from tellang/feat/c6a1-pack-core-files",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T04:24:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca12d1993a5b2e2e66c7443e35fcd4e720207e24",
          "body": "feat(hub): schema v6 + store role registry CAS/recovery (C6a-2)",
          "is_bot": false,
          "headline": "Merge pull request #484 from tellang/feat/c6a2-schema-v6-store",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T04:24:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d10b291ce0b998886b89b947663d5ce75acd7ea2",
          "body": "…ules 9파일 미포함)",
          "is_bot": false,
          "headline": "wip(codex): max/ultra 라우팅 A작업 로그 복구분 보존 (blob 해시 검증 74M+3D, keyword-r…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T09:03:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77079826e91d2bd2d3ae9c258ba574b1a56808fa",
          "body": null,
          "is_bot": false,
          "headline": "feat(hub): schema v6 + store role registry CAS/recovery (C6a-2)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T08:19:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "023b7b113655ede9ad0d2fd06f9c30fc3b2ee1af",
          "body": "…ollow-up)",
          "is_bot": false,
          "headline": "feat(core): register role contract kernel in pack CORE_FILES (C6a-1 f…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T08:12:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d4d510af41f294130deb0efe34833a5bc41df54",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.43.0",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T08:02:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ed069a6a6cf3a0f2a292c2150a89486d72fb78c",
          "body": "fix(hub/tfx-live): control-key EAUTH + capture truncation; ADR-0011 active role system (proposed)",
          "is_bot": false,
          "headline": "Merge pull request #483 from tellang/feat/active-role-system",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T08:00:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0aa935c279d03d71316503ed6f5a94cb99fc030",
          "body": "…EACCES\n\nRoot cause c1a15361: TEST_PORT became 0, deriving ports 200/300 which are\nprivileged (<1024) and fail listen EACCES on Ubuntu CI (not an auth/startHub\nregression). Both suites now use port 0, build URLs from the assigned\nhub.port, and use UUID sessionIds. 20x repeat green.",
          "is_bot": false,
          "headline": "fix(test): bind hub-server integration to a dynamic port to avoid CI …",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T07:22:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4381676e230691d96f72db1c34be37cc7973e770",
          "body": "Pure, no-dispatch-change contract kernel per plan-0011a:\n- hub/role-contract.mjs: RoleKey validation/JCS wire, reachability state\n  enum + transition reducer (incl active->elected-probing charter re-issue),\n  v2 snapshot schema + legacy CTO projection.\n- hub/role-control-events.mjs: event allowlist \n[…]\nNAGER/TFX_LEAD_MANAGER), existing exports intact.\nMirrored to packages/core + packages/triflux. No router/schema/hook changes.\npack.mjs CORE_FILES registration deferred (entangled with unrelated WIP).",
          "is_bot": false,
          "headline": "feat(hub): add inert role contract kernel (C6a-1)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T07:22:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7464db6bafc303be919b9cba132a5afff13da68e",
          "body": "10 implementation-gate contracts closing the eng-review REJECT gaps, plus\nthe inert-kernel first slice (C6a-1). Cross-review recorded 3 P1 spec\ncorrections (charter re-issue path, ensureColumn migration seam, legacy\nsnapshot field set). Design gate for ADR-0011 acceptance.",
          "is_bot": false,
          "headline": "docs(plan): add C6a contract spec (Codex draft + Claude cross-review)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T07:01:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c114da71e264a879e9f75cc4955f3544cb5ea24",
          "body": "check-packages-mirror flagged packages/core/hub/team/claude-daemon-control.mjs\nas a byte mirror target (bridge self-import). Sync it to root.",
          "is_bot": false,
          "headline": "fix(hub): mirror control-key fix to packages/core",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T06:36:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8da5561e010702a316e43e2dec15cd9ede75bca2",
          "body": "…h eng-review\n\nADR-0011 records the CTO + scoped-lead role model (C+A hybrid), resolving\nADR-0010 §5 deferred role scope. plan-0011 carries the phased breakdown and\nthe Codex eng-review that rejects implementation start until the C6a\ncontracts (role_key/kind split, reachability state machine, restart\ndurability, v1->v2 migration, transport-aware failover, authority) are\nnailed. Status stays proposed pending those contracts.",
          "is_bot": false,
          "headline": "docs(adr): add ADR-0011 active role system (proposed) + plan-0011 wit…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T06:20:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "408df81bd9d21917714c7f7e34d82bf97407ea74",
          "body": "…s auth doesn't EAUTH\n\nOMC runtime config lives at ~/.claude/.omc-launch but the control-key is\nissued at the profile's sourceConfigDir. readDaemonControlKey now prefers\nthe source config dir and falls back to the runtime dir, fixing tfx multi\nheadless EAUTH rejection. fail-open behavior for keyless daemons preserved.\nMirrored to packages/triflux and packages/remote.",
          "is_bot": false,
          "headline": "fix(hub): read daemon control-key from OMC sourceConfigDir so headles…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T06:14:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48585ecba400a77afe4221d9d0f9729d537a1f84",
          "body": "…ble-assignment\n\nmax(local disk, git ls-tree origin/main) + 1 defends multi-session/swarm\nnumber collisions before they happen.",
          "is_bot": false,
          "headline": "docs(adr): cross-check ADR numbers against origin/main to prevent dou…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T06:07:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3edbf11a99ec92c59fdcf91c35b7d689efa1aabc",
          "body": "… truncated (CL-1)\n\nCAPTURE_START \"-200\" -> \"-\" captures the complete pane history; the\nMAX_BUFFER 10MiB ceiling still bounds runaway output. Adds a regression\ntest for responses exceeding the old 200-line cutoff. packages/triflux\nmirror kept byte-identical.",
          "is_bot": false,
          "headline": "fix(tfx-live): capture full tmux scrollback so long responses are not…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T06:07:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "256f85f398d9c0d7eec6cbff71c19b1bc81f6354",
          "body": null,
          "is_bot": false,
          "headline": "docs(changelog): v10.43.0 항목 추가",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:20:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5e37e21dc98d12c2dab8e657337bd615977e58d",
          "body": null,
          "is_bot": false,
          "headline": "fix(mirror): remote uds-orchestrator import 변환 복원 (cp 클로버 정정)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:20:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d62643ac47080a88bc52977b9368c690965cbcd1",
          "body": null,
          "is_bot": false,
          "headline": "chore(lint): remote uds-orchestrator 미러 재동기 (format 반영)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:17:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d52641a6b8a7784d40b89fd0cd6900db6bed003f",
          "body": null,
          "is_bot": false,
          "headline": "chore(lint): 테스트 파일 format 드리프트 정리",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:16:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bfcd6a6742ec69cd5d15924c792bb9266001724",
          "body": "…Arguments)",
          "is_bot": false,
          "headline": "chore(lint): lifecycle 커밋의 Biome 드리프트 정리 (format/organizeImports + no…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:15:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee9d4b554bbf654c1f96eb846b090d3aa4586416",
          "body": null,
          "is_bot": false,
          "headline": "chore(hud): codex probe 미러 동기 (core/triflux)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:13:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c46b769e18bf2d9dd1cfc419e2d83581e27941a4",
          "body": null,
          "is_bot": false,
          "headline": "feat(hud): codex quota 능동 프로브를 refresh 파이프라인에 통합",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:07:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a96171f9265b31c458404b791dc5ef44ea42d171",
          "body": null,
          "is_bot": false,
          "headline": "feat(hud): probe 대상 계정 열거 + JWT 만료 가드 + TTL 스로틀",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T08:56:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3d7ae1a6e759e6b2ecdba0f46cb1a1073977f1e",
          "body": null,
          "is_bot": false,
          "headline": "feat(hud): app-server stdio 프로브 클라이언트 추가",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T08:55:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ddeb9988b4e22ed520de78d15676ac5a8b655b5",
          "body": null,
          "is_bot": false,
          "headline": "feat(hud): app-server rate limits 응답 정규화기 추가",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T08:54:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ab815507b9bf59eef3cc922165df0ddae7d7b59",
          "body": null,
          "is_bot": false,
          "headline": "fix(hud): remove stale quota dimming",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T08:45:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff9811980a999df1404a091b113f9cf3aaad9418",
          "body": null,
          "is_bot": false,
          "headline": "fix(hud): select weekly quota window independently",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T08:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "341ce1e04b2a9641c3abae9162a1f5c972609e31",
          "body": null,
          "is_bot": false,
          "headline": "fix(hud): separate context planes and select active quota window",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T07:02:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13803fbd06a58e2090a51e03f489085a71e62802",
          "body": "control.sock 존재 후 고정 1초만 기다려 브리지 워커 채택 완료 전 요청하던\nrace가 --test-concurrency=8 CPU 경합에서 간헐 실패를 냈다(release.yml prepare\n차단, v10.42.0도 동일 클래스로 2연패).\n\n- 워커가 present && alive가 될 때까지 최대 15초 폴링\n- 제어/attach/종료 상한을 유한하게 확장, attach는 첫 출력 바이트 수신 즉시 완료\n- claude CLI probe 10초 상한 + 미설치/지연 시 명시적 skip\n\n검증: CI 동일 명령(풀스위트 --test-concurrency=8) 2회 + native 인접 37개 5회\n전부 fail 0. 테스트 전용 변경(프로덕션 코드 무변경).",
          "is_bot": false,
          "headline": "test(native-bridge): worker-adoption-probe를 concurrency 부하에서 deflake",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T08:53:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1a153615ef4ae8cafbb95d350dcfee1b20e3efc",
          "body": "워커를 순수 wall-clock으로 죽이던 킬 평면을 활동 기반으로 재배선한다. 활동\n(stdout/stderr/rollout/resultFile 변화)이 지속되면 6h 최후 방어선 전까지\n생존하고, 무활동 20분(TFX_STALL_INTERVENTION_SEC=1200)일 때만 개입 사다리\n(interrupt+재지시 → graceful+resume → SIGTERM → SIGKILL)를 태운다.\n킬스위치 TFX_ACTIVITY_LIFECYCLE=0으로 legacy wall-clock 복원.\n\n- hub/lib/timeout-def\n[…]\nlts/worker-lifecycle/intervention/bridge-intervene/\n  hard-ceiling/timeout-shim) + 활동 연장 계약 갱신\n\n전체 스위트 4543 pass. Codex 교차리뷰 반영(P1 cli-*.mjs 미러갭, P2 SSOT 중복·\nremote register 409, P3 timeoutSec 방어 가드).",
          "is_bot": false,
          "headline": "feat(hub): 활동 기반 워커 lifecycle — wall-clock 킬 제거 + 개입 사다리",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T05:19:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a97defd2e5d6f63420bb310e61b3bce40bbc82fc",
          "body": "세션 스캔이 파일명(시작시각) 기준 first-wins라 이벤트 timestamp 비교 없이\n낡은 스냅샷이 승리하고, expireStaleCodexBuckets 반환값을 두 호출부가\n폐기해 만료 창의 used_percent가 계속 노출됐다. 라이브 대조로 확증\n(캐시 2%/0% vs 실제 최신 이벤트 100%/18%).\n\n- 이벤트 timestamp 기준 최신 스냅샷 선택 + 파일당 800줄 스캔 상한\n- expireStaleCodexBuckets 반환값 실사용 + expired 마커\n- 멀티계정 혼합 시 mixedWindows 마커, 만료 창은 n/a 표시\n- 30분 초과 스냅샷 dim 렌더\n- packages/{triflux,core}/hud 미러 동기\n\nknown-gap: freshness/expiry 영구 회귀 테스트는 후속(임시 fixture로만 검증됨)",
          "is_bot": false,
          "headline": "fix(hud): codex 5h/1w quota가 낡은 스냅샷을 표시하던 결함 수정",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T05:18:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12671e37c585500f1401a7789382cda9ba2544ec",
          "body": "킬 평면을 활동 기반으로 재배선하는 PRD (T1~T6). 관측 평면(heartbeat 등\n활동 감지기 3개)이 wall-clock 킬 타이머를 연장하지 않는 구조 결함이 근거.\n개입 사다리: interrupt+재지시 → graceful 종료+resume → SIGTERM → SIGKILL.\nCodex 리뷰 P1 반영: tfx-route-worker 내부 --timeout-ms 타이머와\ncodex-app-server-worker 자체 SIGTERM을 T1/T3 범위에 포함",
          "is_bot": false,
          "headline": "docs(prd): activity-based-worker-lifecycle — stall 20분 + 개입 사다리",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T02:23:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf420e9ef432a5a540c2318f9b3b838c32f6349a",
          "body": "타임아웃 전수 감사(272 raw → 95 논리 사이트) no-판정 4건 즉시 수정:\n- skills 6곳(review/prune/qa/analysis/plan/research): foreground\n  --timeout 600 dispatch를 run_in_background + 1800으로 전환 — Claude Code\n  하니스가 fg Bash를 600000ms에 강제 종료해 headroom 0이던 사고 벡터.\n  Codex 교차리뷰 P1 반영: dispatch 후 task-notification 배리어 명시\n- tfx-rou\n[…]\nut 900 재시도\"\n  죽은 지침 정정\n- swarm-hypervisor: 미사용 _integrationTimeoutMs 파라미터 제거\n- packages/{triflux,remote} 미러 동기 (remote는 import 보존 Edit)\n\n검증: lint:skills 44 PASS, swarm-hypervisor 테스트 55/55, 미러 diff 일치",
          "is_bot": false,
          "headline": "fix(timeout): 활동 중 워커를 자르는 600s wall-clock 벡터 제거",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T02:23:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "18f1c03924bd36ef4be6dd081d1feaad9d131ed1",
          "body": null,
          "is_bot": false,
          "headline": "chore: regenerate packages for gpt-5.6 routing",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T01:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "006bb11b3d7ed7a159382ef307d381f19d2073d0",
          "body": null,
          "is_bot": false,
          "headline": "feat: route codex lanes through gpt-5.6 profiles",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T01:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d44f07142c2aae71f288a5cb3250a9ad8d6f5336",
          "body": "The server sends the attach handshake and FIN back-to-back, so whether\nthe client observes close before writing input (inputSent=false) or\nafter (inputSent=true) is kernel-scheduling luck — observed flaking\ntwice on CI today (PR #477 first run, release run 28844278681), both\ngreen on rerun/local. Dr\n[…]\non; the\nessential contract stays locked: close without a completion marker is\nreported as closed, not misclassified as timeout.\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "test(tfx-live): deflake daemon attach socket-close ordering assertion",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:50:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e901e1c957d980b9ce6f10e418f212046e428643",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.42.0",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:39:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "168d858f5b3a0e0904b8c92033be4e1e13d2b1f4",
          "body": "…-note) (#477)\n\n문서 구조 감사(mnk-callbot 대비)에서 나온 3개 공백을 파일럿으로 메운다:\ndocs/req/(issue #178 raw↔refined 추적성 1건), docs/DECISIONS.md(룰 문서가\n가리키기만 하던 경량 결정로그 실체화), ARCHITECTURE.md의 wiki-harness 각주\n리딩 노트(docs/architecture.reading.md, Obsidian vault 신설, polishing-text\n게이트 통과). 공개 저장소라 신규 docs 하위경로를 .gitignore 화이트리스트에\n명시 추가하고, Obsidian 로컬 UI 세션 상태(workspace.json)는 제외했다.",
          "is_bot": false,
          "headline": "docs: document-harness/wiki-harness 갭 3건 부트스트랩 (req/DECISIONS/reading…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:29:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e30799350e2b8c8326cf092ad3cf5bc22269f568",
          "body": "…hy fix (#475)\n\n* feat(skills): tfx-harness Claude-canonical skill + demoted meta-routing keyword patterns\n\nThe bundled tfx-harness SKILL.md was the Codex-host contract (English,\n$skill syntax, 'Claude execution disallowed') — injected into Claude\nsessions via keyword hooks it contradicts itself and\n[…]\n\na meta-router invoked via keyword rules, not a user-facing surface, so\nit carries internal: true like the bundle original did.\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "feat(skills): tfx-harness Claude-canonical + keyword priority hierarc…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:28:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "55817b5e2f00b981148ba0f42cb8e31c7eafd5e4",
          "body": "…opy commands (#474)\n\nThe tray Focus button posted to /api/focus-session which cannot reach\ncross-terminal sessions; replace it with a copy button that yields the\nexact attach/resume command per agent CLI (claude --resume, codex\nresume, agy --conversation), quoted for shell safety. Mirrors synced\n(packages/remote + packages/triflux tray.html).\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "fix(tray): replace broken focus button with per-agent attach/resume c…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:28:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a84a80325ff2dc495f9b50d1890480927c677cd",
          "body": "…ce with guardrails (#473)\n\n* fix(tfx-live): follow symlinks in CLI main-module guard\n\nbin/tfx-live.mjs compared fileURLToPath(import.meta.url) against\npathResolve(process.argv[1]) to decide whether to run main(). path.resolve()\ndoes not follow symlinks, but the npm global install always exposes the\n[…]\nrd steal the lock mid-work — refresh on\nan unref'd heartbeat interval (staleMs/3, min 30s) from acquisition to\nrelease instead.\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "feat(cto): resident CTO manager precursor (T1/T4/T5) + steward T2 sli…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:28:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ced3bf55ed173b5ba097b137b7e53c90f1ba59b6",
          "body": "2026-07-07 CTO/Hub 감사(23-agent 워크플로우 + 적대적 검증)에서 확인된\n경계 미정의를 결정으로 고정한다: hub=liveness/coordination 평면(presence\nSSOT=store agents 테이블), cto lake=history/authority 평면(durable,\nhub 없이 동작), 의존은 hub→cto 단방향(공용 하위 계층 allowlist 예외),\n소비 표면은 lake/live 형제 키 분리. false-positive 성공 금지를 presence\n계약으로 명문화하고, stale \n[…]\n feat(cto))을 실행 규칙으로 분리한다.\n\ntfx-mirror-policy에 cto/ 미러 행을 추가한다 — remote가 cto/ 8모듈을\nmirror함에도 대상 표에 없어 이번 감사에서 미러 범위 과소산정이 발생했다.\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "docs(adr): ADR-0010 CTO lake ↔ Hub role 경계 + 실행 규칙 SSOT (#476)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:28:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "532ccc11279cd033ab2297b071b2bf107edfedc4",
          "body": "* fix(hub): verify register presence persistence\n\n* fix(remote): preserve register presence contract\n\n* feat(hub): expose hub identity + store type in register response\n\nSame-store readback cannot detect the #454 failure mode where register\nlands on a different hub instance (or a silent memory fallb\n[…]\n and\nstore_type/db_path in effective so callers can compare against the\nexpected hub/db and detect non-persistent registration.\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "fix(hub): verify register presence persistence (#455)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T03:16:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7e95d4fcb5764c0d398b59b9285e7fadc04586a1",
          "body": "문서 파운데이션 PR #452(Phase 0-3)에 이어 확정된 횡단 결정 6건을 소급 ADR로 기록(Phase 4).\n\n- 0004 기본 구현 CLI = Codex (tfx-routing)\n- 0005 packages/ 3-layer single-source 미러 (tfx-mirror-policy, #219/#222/#314/#320)\n- 0006 재시도 승격 체인 codex→claude opus 2단계 (tfx-escalation-chain, #356/#363)\n- 0007 hub 기본 포트 27888 고정 (tfx-update\n[…]\nce)\n\n각 accepted + 상태보드 등재(9행) + 대응 .claude/rules/ 역참조 링크(순수 additive).\nPhase 5 자동화는 automation_trigger(ADR>25 또는 drift 2회) 미충족으로 의도적 defer.\nnpm test 4437 pass/0 fail, biome clean, critic 독립 리뷰 ACCEPT.",
          "is_bot": false,
          "headline": "docs(adr): 과거 횡단 결정 backfill (ADR-0004..0009) + Phase 5 게이트 defer (#453)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-01T08:26:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f0a4f60b15d440251877797f087a9d38a6d8749d",
          "body": "흩어진 triflux 문서를 목적별 아키텍처로 정돈하고 docs/adr/ ADR 체계·개발 플로우·공개/비공개 경계를 명시적 SSOT로 확립. Phase 0-3.\n\n- Phase 0: .gitignore 공개경계 교정(allowlist docs/adr·process·_archive) · ADR 부트스트랩(0001/0002 + 상태보드 + CONVENTIONS) · .document-harness.toml · 구조 검증 테스트.\n- Phase 1: docs/README 문서 지도 · CONTRIBUTING · ARCHITECTURE \n[…]\n: psmux 정책 3-way 정합 · CODEX/GEMINI resync · ROADMAP/TODOS stale 배너 · PRD 템플릿 축약.\n\n정본 계획: .triflux/plans/2026-07-01-docs-adr-foundation.md\nCross-model: Claude 작성 → Codex 교차리뷰 APPROVE-WITH-FIXES, 6건 반영.",
          "is_bot": false,
          "headline": "docs: 문서 파운데이션 + ADR 체계 + 개발 플로우 확립 (Phase 0-3) (#452)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-01T07:35:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9bbab20f1a664d4a320fbb746f5650b902cb9bc6",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.41.1",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-01T05:33:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da42ea648fc562e34b43041c1fc823aaf4da2ebb",
          "body": "… (#449)\n\nbin/tfx-doctor.mjs and bin/tfx-setup.mjs inject a subcommand into\nprocess.argv and `await import(\"./triflux.mjs\")`, but left\nprocess.argv[1] pointing at the shim's own path. triflux.mjs's\nisMainModule() guard compares process.argv[1] against its own resolved\nmodule path to decide whether t\n[…]\nttern.\n\nRegression tests invoke both shims directly and through a symlink;\nconfirmed failing against the pre-fix shims and passing after (git\nstash before/after). Cross-reviewed by Codex: no findings.",
          "is_bot": false,
          "headline": "fix(bin): tfx-doctor/tfx-setup shims silently no-op via installed CLI…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-01T05:26:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d6955a092e713cca18d5a5ce982246111ce8a54",
          "body": "bin/tfx-live.mjs compared fileURLToPath(import.meta.url) against\npathResolve(process.argv[1]) to decide whether to run main(). path.resolve()\ndoes not follow symlinks, but the npm global install always exposes the CLI\nas a symlink (tfx-live -> .../triflux/bin/tfx-live.mjs), so every real\ninvocation \n[…]\nich is why `tfx`/`triflux` were unaffected), mirror it to\npackages/triflux/bin/tfx-live.mjs, and add a regression test that invokes the\nCLI through a real symlink so this can't silently regress again.",
          "is_bot": false,
          "headline": "fix(tfx-live): follow symlinks in CLI main-module guard (#448)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-01T05:25:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "15635c117ef5ff24db7d5bb4f1e59a3bc8e8929f",
          "body": "…iance) (#445)",
          "is_bot": false,
          "headline": "test(hub): lock CTO sweeper live-leader no-op (epoch + transfer invar…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-30T08:43:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa82f7aae3512f1f409cc926ee408ab5ca598746",
          "body": "…adiness poll (#446)",
          "is_bot": false,
          "headline": "fix(release): tag-only push with stale-HEAD preflight + remote-tag re…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-30T08:38:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "940973a60788c3a81b7c82bcc5385d9b84c68146",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.41.0",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-29T07:57:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "099f216226cd215f13c9592ce4c687bee97d1ebf",
          "body": "…) (#444)\n\n- add reelectStaleRoles method for stale role succession\n- wire staleTimer to re-elect after stale agent sweep\n- cover deterministic heir tiebreak, backlog handoff, and sweep-driven chain failover\n- mirror router changes to core and triflux packages",
          "is_bot": false,
          "headline": "fix(hub): sweeper actively re-elects stale role leaders (CTO failover…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-29T07:52:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5163d5f76f2aada68ce2d26bbd4cbc03aaef18b3",
          "body": "* feat(route): claude --model/--effort ladder; drop dead ultracode effort branch\n\n- Wire Claude native --model/--effort through route metadata, worker args, and mirrored package files.\n- Drop dead ultracode effort mapping and cover CLI argv passthrough with an integration assertion test.\n\n* fix(rout\n[…]\nunknown effort routes\n\n- append claude --effort only when a non-empty effort is resolved\n\n- add worker-boundary omit test for missing claude effort\n\n- mirror tfx-route.sh changes into packages/triflux",
          "is_bot": false,
          "headline": "feat(route): claude --model/--effort ladder (Claude lane) (#443)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-29T07:52:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a3b1a6740a14040fe06f687f6bffa57c72d77d58",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.40.0",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-26T08:05:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c13a8246cb0942eec4cfd0d6789b8c8941a0948",
          "body": "Elect a single live leader for the `topic:cto` role and fail over to a\nstandby heir when the leader goes offline, so an offline CTO no longer\nstalls live cross-session coordination (#441).\n\n- hub/router.mjs: role candidate tracking, lease-based liveness, single\n  leader election (chooseRoleLeader/en\n[…]\ntray-state, cto-status,\n  conductor-registry (succession election, takeover, backlog transfer).\n\nMirrored byte-identical to packages/{core,remote,triflux}; remote keeps\nits @triflux/core import paths.",
          "is_bot": false,
          "headline": "feat(cto): role-based succession/failover for CTO coordinator (#442)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-26T07:58:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 1445,
      "latest_release_at": "2026-07-17T07:35:07Z",
      "latest_release_tag": "v10.44.0",
      "releases_from_tags": false,
      "days_since_last_push": 1,
      "active_weeks_last_year": 18,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 3.3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "triflux",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "claude-code",
            "plugin",
            "codex",
            "antigravity",
            "cli-routing",
            "orchestration",
            "multi-model",
            "triflux",
            "tfx"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/triflux",
          "is_deprecated": false,
          "latest_version": "10.44.0",
          "repository_url": "https://github.com/tellang/triflux",
          "versions_count": 294,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3571,
          "first_published_at": "2026-03-05T07:36:01.682000Z",
          "latest_published_at": "2026-07-17T07:35:06.254000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 2,
      "stars": 7,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-09",
            "count": 1
          },
          {
            "date": "2026-04-15",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 2,
        "total_forks": 2
      },
      "star_history": {
        "days": [
          {
            "date": "2026-04-01",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 1
          },
          {
            "date": "2026-04-08",
            "count": 1
          },
          {
            "date": "2026-04-09",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-11",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 7,
        "total_stars": 7
      },
      "open_issues_and_prs": 29
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "jsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 253000,
      "source_files_sampled": 1586,
      "oversized_source_files": 26,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md",
        "GEMINI.md",
        "packages/triflux/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 11674
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@iarna/toml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.5"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "better-sqlite3",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.10.0"
        },
        {
          "name": "pino",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.3.1"
        },
        {
          "name": "pino-pretty",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^13.1.3"
        },
        {
          "name": "systray2",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.4"
        },
        {
          "name": "tree-kill",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.2"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.0"
        }
      ],
      "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": 2,
        "merged_prs": 277,
        "open_issues": 27,
        "closed_ratio": 0.866,
        "closed_issues": 175,
        "closed_unmerged_prs": 13
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "tellang",
          "commits": 1441,
          "avatar_url": "https://avatars.githubusercontent.com/u/37146362?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "npm-publish.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "biome.json"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "4 out of 4 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/22 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "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 28 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": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "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": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "30 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "f1a981bf5e99bd546e7e0d4524d30062135230d2",
        "ran_at": "2026-07-22T02:58:57Z",
        "aggregate_score": 3.8,
        "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-20T09:32:27Z",
      "oldest_open_prs": [
        {
          "number": 493,
          "created_at": "2026-07-17T12:54:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 494,
          "created_at": "2026-07-17T13:04:03Z",
          "last_comment_at": "2026-07-17T16:57:42Z",
          "last_comment_author": "tellang"
        }
      ],
      "last_merged_pr_at": "2026-07-17T08:12:17Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 437,
          "created_at": "2026-06-18T06:58:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 447,
          "created_at": "2026-06-30T08:31:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 450,
          "created_at": "2026-07-01T05:35:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 451,
          "created_at": "2026-07-01T05:36:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 454,
          "created_at": "2026-07-07T00:47:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 456,
          "created_at": "2026-07-07T03:11:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 457,
          "created_at": "2026-07-07T03:11:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 458,
          "created_at": "2026-07-07T03:11:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 459,
          "created_at": "2026-07-07T03:11:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 460,
          "created_at": "2026-07-07T03:11:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 461,
          "created_at": "2026-07-07T03:11:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 462,
          "created_at": "2026-07-07T03:11:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 463,
          "created_at": "2026-07-07T03:11:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 464,
          "created_at": "2026-07-07T03:11:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 465,
          "created_at": "2026-07-07T03:11:39Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 466,
          "created_at": "2026-07-07T03:11:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 467,
          "created_at": "2026-07-07T03:11:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 468,
          "created_at": "2026-07-07T03:11:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 469,
          "created_at": "2026-07-07T03:11:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 470,
          "created_at": "2026-07-07T03:11:46Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/tellang/triflux",
    "host": "github.com",
    "name": "triflux",
    "owner": "tellang"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 64,
      "inputs": {
        "security": 38,
        "vitality": 86,
        "community": 47,
        "governance": 56,
        "engineering": 86
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 86,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 1445,
              "human_commit_share": 1,
              "days_since_last_push": 1,
              "active_weeks_last_year": 18
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "18/52 weeks with commits",
                "points": 12.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1445 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1445
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v10.44.0",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 3.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.3
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 47,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "forks": 2,
              "stars": 7,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "7 stars",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "2 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 59,
            "inputs": {
              "packages": [
                "triflux"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 3571
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "3,571 downloads/month across npm",
                "points": 47.4,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 3571,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 56,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "merged_prs": 277,
              "open_issues": 27,
              "closed_issues": 175,
              "issue_closed_ratio": 0.866,
              "closed_unmerged_prs": 13
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "87% of issues closed",
                "points": 40.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 87
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "277/290 decided PRs merged",
                "points": 36.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 277,
                      "decided": 290
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/22 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 53,
            "inputs": {
              "followers": 23,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "tellang",
              "public_repos": 26,
              "account_age_days": 3058
            },
            "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": "23 followers of tellang",
                "points": 9.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 23,
                      "login": "tellang"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "26 public repos, account ~8 yr old",
                "points": 22.4,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 26
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 8
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "triflux"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "294 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 294
                    }
                  }
                ],
                "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": "excellent",
        "name": "Engineering Quality",
        "value": 86,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "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": "biome.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "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": "4 out of 4 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "ai-routing",
                "claude-code",
                "claude-plugin",
                "cli-orchestrator",
                "codex-cli",
                "developer-tools",
                "gemini-cli",
                "multi-model",
                "task-automation",
                "terminal"
              ],
              "has_wiki": false,
              "homepage": "https://www.npmjs.com/package/triflux",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://www.npmjs.com/package/triflux",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "10 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 38,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 38,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "4 out of 4 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/22 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "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 28 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 2",
                "points": 1,
                "status": "partial",
                "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": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "30 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 63,
        "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.96,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md",
                "GEMINI.md",
                "packages/triflux/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 11674
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/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": "96 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 96,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "jsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "biome.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "jsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "jsconfig.json"
                    }
                  }
                ],
                "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 2",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 253000,
              "source_files_sampled": 1586,
              "oversized_source_files": 26
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript with type-check config (jsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "jsconfig.json",
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "26/1586 source files over 60KB",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1586,
                      "oversized": 26
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "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",
    "deps.dev does not index npm:triflux@10.44.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T02:59:08.817582Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/tellang/triflux.svg",
  "full_name": "tellang/triflux",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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