Public record
Software health reportschema 0.26.0 · metrics 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 stars⑂ 2 forkssince Mar 2026View on GitHub ↗

tellang/triflux holds a health index of 64 out of 100, placing it in the Moderate band. It scores highest on Vitality (86/100) and lowest on Security (38/100). It was last updated 1 day ago. A single contributor accounts for most of its recent work.

64
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

64
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

tellangPersonal account
23 followers26 public repossince Mar 2018

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
npmtriflux10.44.03,5712944 days agoclaude-codeplugincodexantigravitycli-routingorchestrationmulti-modeltrifluxtfx

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

86Excellent · 22% of overall
How it's scored
36/36Push recency — last push 1 days ago
12.5/36Commit cadence — 18/52 weeks with commits
18/18Commit volume — 1,445 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year1,445
human_commit_share1
days_since_last_push1
active_weeks_last_year18

Release discipline

100Excellent
How it's scored
27/27Ships releases — 100 releases published
36/36Release recency — latest release 4 days ago
27/27Release cadence — a release every ~3.3 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count100
latest_release_tagv10.44.0
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases3.3
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

47At risk · 18% of overall
How it's scored
12.6/60Stars — 7 stars
0/25Forks — 2 forks
0/15Watchers — 0 watchers
Inputs used
forks2
stars7
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
18/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductno
has_pull_request_templateyes
How it's scored
47.4/80Monthly downloads — 3,571 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagestriflux
dependents
ecosystemsnpm
total_downloads
monthly_downloads3,571
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

56Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0/22.5Commit distribution — top contributor authored 100% of commits
1.4/13.5Contributor breadth — 1 contributors
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Inputs used
bus_factor1
contributors_sampled1
top_contributor_share1
How it's scored
40.5/46.8Issue resolution — 87% of issues closed
36.5/38.3PR acceptance — 277/290 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/22 approved changesets -- score normalized to 0
Inputs used
merged_prs277
open_issues27
closed_issues175
issue_closed_ratio0.866
closed_unmerged_prs13
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
9.9/25Owner reach — 23 followers of tellang
22.4/25Track record — 26 public repos, account ~8 yr old
Inputs used
followers23
owner_typeUser
is_verified
owner_logintellang
public_repos26
account_age_days3,058
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 4 days ago
20/20Version history — 294 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagestriflux
ecosystemsnpm
any_deprecatedno
min_days_since_publish4

Engineering Quality

Are baseline engineering and documentation practices in place?

86Excellent · 20% of overall
How it's scored
24/24CI workflows — 3 workflow(s)
24/24Tests present
16/16Linter config — 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
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno

Documentation

90Excellent
How it's scored
30/30README
25/25Documentation directory
15/15Documentation / homepage site — https://www.npmjs.com/package/triflux
10/10Repository description
10/10Topics — 10 topics
0/10Wiki
Inputs used
topicsai-routing, claude-code, claude-plugin, cli-orchestrator, codex-cli, developer-tools, gemini-cli, multi-model, task-automation, terminal
has_wikino
homepagehttps://www.npmjs.com/package/triflux
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

38At risk · 16% of overall
How it's scored
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.5License — 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 — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 30 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3.8
Excluded from scoring (no data or not applicable): signed_releases. Remaining weights renormalized.

AI Readiness

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.

63Moderate · 0% of overall
How it's scored
45/45Agent instructions — AGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 96 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.96
agent_instruction_filesAGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/CLAUDE.md
agent_instruction_max_bytes11,674
How it's scored
0/18One-command bootstrap
22/22Automated tests
11/11Lint / format config — biome.json
11/11Static type checking — jsconfig.json
10/10Reproducible environment — lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
0/8Automated maintenance — no automated dependency updates observed
2/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configyes
typecheck_configsjsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
How it's scored
27/45Type-checkable code — JavaScript with type-check config (jsconfig.json)
54.1/55Manageable file sizes — 26/1,586 source files over 60KB
Inputs used
primary_languageJavaScript
largest_source_bytes253,000
source_files_sampled1,586
oversized_source_files26
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
20/20MCP server
0/40Runnable examples
Inputs used
example_dirs
has_mcp_signalyes
api_schema_files

Key facts

7GitHub stars
1contributors
1,445commits, last 12 months
1days since last push
100releases
1bus factor
27open issues
npmpackage ecosystems

Data collection 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

More detail

Star and fork history 7 ★ / 2 ⇿
7Stars
2Forks
58Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

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

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).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
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities30 existing vulnerabilities detected
Direct dependencies 8
RegistryPackageVersion constraintManifest
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
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.26.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsnpm.