Raw JSON report machine-readable
{
"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"
}