Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 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 Sterne⑂ 2 Forksseit März 2026Auf GitHub ansehen ↗

tellang/triflux erreicht einen Gesundheitsindex von 64 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (86/100) ab, am schwächsten bei Security (38/100). Zuletzt vor 1 Tag aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

64
gesamt / 100
Mittel

Software-Gesundheitsindex

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

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

Bewertungsprofil

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

Eigentümerschaft

tellangPersönliches Konto
23 Follower26 öffentliche Reposseit März 2018

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npmtriflux10.44.03.571294vor 4 Tagenclaude-codeplugincodexantigravitycli-routingorchestrationmulti-modeltrifluxtfx

Metriken nach Kategorie

Vitalität

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

86Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 1 Tagen
12.5/36Commit-Rhythmus — 18/52 Wochen mit Commits
18/18Commit-Volumen — 1.445 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year1.445
human_commit_share1
days_since_last_push1
active_weeks_last_year18

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 100 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 4 Tagen
27/27Release-Rhythmus — ein Release etwa alle 3,3 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count100
latest_release_tagv10.44.0
releases_from_tagsnein
days_since_latest_release4
mean_days_between_releases3,3
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

47Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
12.6/60Stars — 7 Stars
0/25Forks — 2 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks2
stars7
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templateja
Wie die Bewertung erfolgt
47.4/80Downloads pro Monat — 3.571 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagestriflux
dependents
ecosystemsnpm
total_downloads
monthly_downloads3.571
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

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

56Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
40.5/46.8Issue-Lösungsquote — 87 % der Issues geschlossen
36.5/38.3PR-Annahme — 277/290 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/22 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs277
open_issues27
closed_issues175
issue_closed_ratio0,866
closed_unmerged_prs13
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
9.9/25Reichweite des Inhabers — 23 Follower von tellang
22.4/25Kontohistorie — 26 öffentliche Repos, Kontoalter ca. 8 Jahre
Verwendete Eingangsdaten
followers23
owner_typeUser
is_verified
owner_logintellang
public_repos26
account_age_days3.058
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 4 Tagen
20/20Versionshistorie — 294 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagestriflux
ecosystemsnpm
any_deprecatednein
min_days_since_publish4

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

86Exzellent · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 3 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — biome.json
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 4 out of 4 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein

Dokumentation

90Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://www.npmjs.com/package/triflux
10/10Repository-Beschreibung
10/10Topics — 10 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsai-routing, claude-code, claude-plugin, cli-orchestrator, codex-cli, developer-tools, gemini-cli, multi-model, task-automation, terminal
has_wikinein
homepagehttps://www.npmjs.com/package/triflux
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

38Gefährdet · 16 % des Gesamtindex

Sicherheitslage

38Gefährdet
Wie die Bewertung erfolgt
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.5Lizenz — 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 — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 30 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,8
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

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

63Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 96 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,96
agent_instruction_filesAGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/CLAUDE.md
agent_instruction_max_bytes11.674
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — biome.json
11/11Statische Typprüfung — jsconfig.json
10/10Reproduzierbare Umgebung — lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
2/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespackage-lock.json
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configsjsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
27/45Typprüfbarer Code — JavaScript mit Typprüfungs-Konfiguration (jsconfig.json)
54.1/55Handhabbare Dateigrößen — 26/1.586 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageJavaScript
largest_source_bytes253.000
source_files_sampled1.586
oversized_source_files26
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
20/20MCP-Server
0/40Lauffähige Beispiele
Verwendete Eingangsdaten
example_dirs
has_mcp_signalja
api_schema_files

Eckdaten

7GitHub-Sterne
1Mitwirkende
1.445Commits, letzte 12 Monate
1Tage seit letztem Push
100Releases
1Bus-Faktor
27offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • 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

Weitere Details

Stern- und Fork-Verlauf 7 ★ / 2 ⇿
7Sterne
2Forks
58Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

01345687212026-042026-042026-05
Major 1Minor 15Patch 42
OpenSSF Scorecard 3.8 / 10
3.8Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-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
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities30 existing vulnerabilities detected
Direkte Abhängigkeiten 8
RegistryPaketVersionsvorgabeManifest
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
Alle Abhängigkeiten nicht erhoben

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

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "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"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.