Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-26 17:13 UTC

thibaultcha / lua-nginx-module

Embed the Power of Lua into NGINX HTTP servers

CNo license detected★ 3 stars⑂ 1 forksince Dec 2015forkView on GitHub ↗

thibaultcha/lua-nginx-module holds a health index of 18 out of 100, placing it in the Critical band. It scores highest on AI Readiness (46/100) and lowest on Community & Adoption (3/100). It was last updated 2211 days ago. A single contributor accounts for most of its recent work.

18
overall / 100
Critical

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.

18
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.

Abandonment Policy applies a 85% multiplier to weighted overall health.

Ownership

Thibault CharbonnierPersonal account
637 followers76 public repossince Oct 2011

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

Metrics by category

Vitality

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

17Critical · 22% of overall
How it's scored
0/36Push recency — last push 2,211 days ago
0/36Commit cadence — 0/52 weeks with commits
0/18Commit volume — 0 commits in the last year
0/10OpenSSF Scorecard: Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Inputs used
commits_last_year0
human_commit_share1
days_since_last_push2,211
active_weeks_last_year0
How it's scored
16.2/27Ships releases — 71 version tags (no GitHub releases)
0/36Release recency — latest release 3,910 days ago
19.8/27Release cadence — a release every ~54.5 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count71
latest_release_tagv0.9.19
releases_from_tagsyes
days_since_latest_release3,910
mean_days_between_releases54.5
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?

3Critical · 18% of overall
How it's scored
4.9/60Stars — 3 stars
0/25Forks — 1 forks
0/15Watchers — 1 watchers
Inputs used
forks1
stars3
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
0/22.5README
0/22.5License — no license file detected
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeno
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

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

35At risk · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
3.4/22.5Commit distribution — top contributor authored 85% of commits
13.5/13.5Contributor breadth — 71 contributors
10/10OpenSSF Scorecard: Contributors — project has 24 contributing companies or organizations
Inputs used
bus_factor1
contributors_sampled71
top_contributor_share0.849
How it's scored
0/46.8Issue resolution — no issues or no data
0/38.3PR acceptance — no decided pull requests or no data
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
20.2/25Owner reach — 637 followers of thibaultcha
25/25Track record — 76 public repos, account ~14 yr old
Inputs used
followers637
owner_typeUser
is_verified
owner_loginthibaultcha
public_repos76
account_age_days5,400
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.

Engineering Quality

Are baseline engineering and documentation practices in place?

21Critical · 20% of overall
How it's scored
0/24CI workflows
0/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_cino
has_testsno
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.

Documentation

50Moderate
How it's scored
0/30README
25/25Documentation directory
15/15Documentation / homepage site — https://openresty.org
0/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepagehttps://openresty.org
has_readmeno
has_docs_diryes
has_descriptionno

Security

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

23Critical · 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
0/2.5CI-Tests — no data
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 24 contributing companies or organizations
0/10Dangerous-Workflow — no data
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5License — license file not detected
0/7.5Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
0/5Packaging — no data
0/5Pinned-Dependencies — no data
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — no data
5.2/7.5Vulnerabilities — 3 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2.3
Excluded from scoring (no data or not applicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. 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.

46At risk · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 93 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.93
agent_instruction_files
agent_instruction_max_bytes
How it's scored
18/18One-command bootstrap — misc/recv-until-pm/Makefile
0/22Automated tests
0/11Lint / format config
11/11Static type checking — C (statically typed)
0/10Reproducible environment
0/10Demonstrated agent practice — no agent-authored commits among the last 100
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — no data
Inputs used
has_nixno
has_testsno
lockfiles
has_dockerfileno
typed_languageyes
bootstrap_filesmisc/recv-until-pm/Makefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.
How it's scored
45/45Type-checkable code — C (statically typed)
53.1/55Manageable file sizes — 4/116 source files over 60KB
Inputs used
primary_languageC
largest_source_bytes182,978
source_files_sampled116
oversized_source_files4

Key facts

3GitHub stars
71contributors
0commits, last 12 months
2,211days since last push
71releases
1bus factor
0open issues
package ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Community profile unavailable
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

More detail

OpenSSF Scorecard 2.3 / 10
2.3aggregate

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-26 17:13 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/aCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 24 contributing companies or organizations
n/aDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
0Maintained0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
n/aPackagingpackaging workflow not detected
n/aPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
n/aToken-PermissionsNo tokens found
7Vulnerabilities3 existing vulnerabilities detected
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": [],
      "is_fork": true,
      "size_kb": 14699,
      "has_wiki": true,
      "homepage": "https://openresty.org",
      "languages": {
        "C": 1388420,
        "Lua": 57005,
        "Perl": 13519,
        "Shell": 4017,
        "DTrace": 2269,
        "Makefile": 25
      },
      "pushed_at": "2020-07-06T02:33:43Z",
      "created_at": "2015-12-16T05:30:25Z",
      "owner_type": "User",
      "updated_at": "2021-07-16T09:37:35Z",
      "description": "Embed the Power of Lua into NGINX HTTP servers",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "master",
      "license_spdx_raw": null,
      "primary_language": "C",
      "significant_languages": [
        "C"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Thibault Charbonnier",
      "type": "User",
      "login": "thibaultcha",
      "company": null,
      "location": null,
      "followers": 637,
      "avatar_url": "https://avatars.githubusercontent.com/u/1125431?v=4",
      "created_at": "2011-10-13T12:24:25Z",
      "is_verified": null,
      "public_repos": 76,
      "account_age_days": 5400
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.9.19",
          "kind": "patch",
          "published_at": "2015-11-11T09:49:24Z"
        },
        {
          "tag": "v0.9.18",
          "kind": "patch",
          "published_at": "2015-11-04T14:42:39Z"
        },
        {
          "tag": "v0.9.17",
          "kind": "patch",
          "published_at": "2015-10-27T09:11:14Z"
        },
        {
          "tag": "v0.9.16",
          "kind": "patch",
          "published_at": "2015-06-23T14:25:43Z"
        },
        {
          "tag": "v0.9.15",
          "kind": "patch",
          "published_at": "2015-02-18T23:29:39Z"
        },
        {
          "tag": "v0.9.14",
          "kind": "patch",
          "published_at": "2015-01-21T22:24:58Z"
        },
        {
          "tag": "v0.9.13",
          "kind": "patch",
          "published_at": "2014-11-22T05:09:29Z"
        },
        {
          "tag": "v0.9.12",
          "kind": "patch",
          "published_at": "2014-09-03T03:48:16Z"
        },
        {
          "tag": "v0.9.11",
          "kind": "patch",
          "published_at": "2014-08-16T20:36:35Z"
        },
        {
          "tag": "v0.9.10",
          "kind": "patch",
          "published_at": "2014-07-08T20:47:41Z"
        },
        {
          "tag": "v0.9.9",
          "kind": "patch",
          "published_at": "2014-07-01T04:21:03Z"
        },
        {
          "tag": "v0.9.8",
          "kind": "patch",
          "published_at": "2014-06-01T04:45:29Z"
        },
        {
          "tag": "v0.9.7",
          "kind": "patch",
          "published_at": "2014-04-07T00:04:11Z"
        },
        {
          "tag": "v0.9.6",
          "kind": "patch",
          "published_at": "2014-03-20T20:18:51Z"
        },
        {
          "tag": "v0.9.5",
          "kind": "patch",
          "published_at": "2014-03-12T22:50:02Z"
        },
        {
          "tag": "v0.9.4",
          "kind": "patch",
          "published_at": "2014-01-10T23:13:54Z"
        },
        {
          "tag": "v0.9.3",
          "kind": "patch",
          "published_at": "2013-12-14T21:29:06Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2013-11-06T20:05:58Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2013-10-29T19:05:54Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2013-09-30T03:39:13Z"
        },
        {
          "tag": "v0.8.10",
          "kind": "patch",
          "published_at": "2013-09-22T21:52:32Z"
        },
        {
          "tag": "v0.8.9",
          "kind": "patch",
          "published_at": "2013-09-15T20:46:28Z"
        },
        {
          "tag": "v0.8.8",
          "kind": "patch",
          "published_at": "2013-09-08T23:51:32Z"
        },
        {
          "tag": "v0.8.7",
          "kind": "patch",
          "published_at": "2013-09-02T19:58:33Z"
        },
        {
          "tag": "v0.8.6",
          "kind": "patch",
          "published_at": "2013-08-06T23:21:39Z"
        },
        {
          "tag": "v0.8.5",
          "kind": "patch",
          "published_at": "2013-07-18T19:53:33Z"
        },
        {
          "tag": "v0.8.4",
          "kind": "patch",
          "published_at": "2013-07-11T06:09:09Z"
        },
        {
          "tag": "v0.8.3",
          "kind": "patch",
          "published_at": "2013-06-20T23:02:01Z"
        },
        {
          "tag": "v0.8.2",
          "kind": "patch",
          "published_at": "2013-05-23T19:21:18Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2013-04-26T19:27:52Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2013-04-23T19:29:14Z"
        },
        {
          "tag": "v0.7.21",
          "kind": "patch",
          "published_at": "2013-04-16T23:17:17Z"
        },
        {
          "tag": "v0.7.20",
          "kind": "patch",
          "published_at": "2013-04-09T23:59:46Z"
        },
        {
          "tag": "v0.7.19",
          "kind": "patch",
          "published_at": "2013-03-27T19:41:19Z"
        },
        {
          "tag": "v0.7.18",
          "kind": "patch",
          "published_at": "2013-03-25T05:15:48Z"
        },
        {
          "tag": "v0.7.17",
          "kind": "patch",
          "published_at": "2013-03-11T19:23:08Z"
        },
        {
          "tag": "v0.7.16",
          "kind": "patch",
          "published_at": "2013-02-23T06:43:34Z"
        },
        {
          "tag": "v0.7.15",
          "kind": "patch",
          "published_at": "2013-02-13T05:59:26Z"
        },
        {
          "tag": "v0.7.14",
          "kind": "patch",
          "published_at": "2013-01-29T00:37:30Z"
        },
        {
          "tag": "v0.7.13",
          "kind": "patch",
          "published_at": "2013-01-04T00:55:34Z"
        },
        {
          "tag": "v0.7.12",
          "kind": "patch",
          "published_at": "2012-12-30T05:29:42Z"
        },
        {
          "tag": "v0.7.11",
          "kind": "patch",
          "published_at": "2012-12-28T01:37:11Z"
        },
        {
          "tag": "v0.7.10",
          "kind": "patch",
          "published_at": "2012-12-26T05:51:53Z"
        },
        {
          "tag": "v0.7.9",
          "kind": "patch",
          "published_at": "2012-12-23T06:58:51Z"
        },
        {
          "tag": "v0.7.8",
          "kind": "patch",
          "published_at": "2012-12-09T07:39:19Z"
        },
        {
          "tag": "v0.7.7",
          "kind": "patch",
          "published_at": "2012-12-08T08:06:42Z"
        },
        {
          "tag": "v0.7.6",
          "kind": "patch",
          "published_at": "2012-12-05T23:24:58Z"
        },
        {
          "tag": "v0.7.5",
          "kind": "patch",
          "published_at": "2012-11-20T22:57:52Z"
        },
        {
          "tag": "v0.7.4",
          "kind": "patch",
          "published_at": "2012-11-11T20:35:00Z"
        },
        {
          "tag": "v0.7.3",
          "kind": "patch",
          "published_at": "2012-10-31T00:12:17Z"
        },
        {
          "tag": "v0.7.2",
          "kind": "patch",
          "published_at": "2012-10-17T22:20:37Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2012-10-14T03:02:59Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2012-10-11T00:26:54Z"
        },
        {
          "tag": "v0.6.10",
          "kind": "patch",
          "published_at": "2012-10-06T02:48:53Z"
        },
        {
          "tag": "v0.6.9",
          "kind": "patch",
          "published_at": "2012-10-03T01:08:01Z"
        },
        {
          "tag": "v0.6.8",
          "kind": "patch",
          "published_at": "2012-09-29T03:33:38Z"
        },
        {
          "tag": "v0.6.7",
          "kind": "patch",
          "published_at": "2012-09-27T05:10:30Z"
        },
        {
          "tag": "v0.6.6",
          "kind": "patch",
          "published_at": "2012-09-20T21:54:17Z"
        },
        {
          "tag": "v0.6.5",
          "kind": "patch",
          "published_at": "2012-09-15T20:16:22Z"
        },
        {
          "tag": "v0.6.4",
          "kind": "patch",
          "published_at": "2012-09-10T04:30:41Z"
        },
        {
          "tag": "v0.6.3",
          "kind": "patch",
          "published_at": "2012-08-26T06:55:22Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2012-08-22T22:25:54Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2012-08-19T23:14:01Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2012-08-18T16:17:24Z"
        },
        {
          "tag": "v0.5.14",
          "kind": "patch",
          "published_at": "2012-08-14T05:22:25Z"
        },
        {
          "tag": "v0.5.13",
          "kind": "patch",
          "published_at": "2012-08-12T18:18:23Z"
        },
        {
          "tag": "v0.5.12",
          "kind": "patch",
          "published_at": "2012-08-04T23:56:24Z"
        },
        {
          "tag": "v0.5.11",
          "kind": "patch",
          "published_at": "2012-07-31T04:57:17Z"
        },
        {
          "tag": "v0.5.10",
          "kind": "patch",
          "published_at": "2012-07-30T06:46:25Z"
        },
        {
          "tag": "v0.5.9",
          "kind": "patch",
          "published_at": "2012-07-26T18:20:41Z"
        },
        {
          "tag": "v0.5.8",
          "kind": "patch",
          "published_at": "2012-07-21T17:59:41Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "028c0d4951c7ad99dabf32b3a931d8caac7a5c63",
          "body": null,
          "is_bot": false,
          "headline": "doc: mentioned that 1.17.8 is the latest NGINX core version tested.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2020-01-22T23:16:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c06793c3e1431b24332b8b0239cc43df43361941",
          "body": null,
          "is_bot": false,
          "headline": "travis-ci: bumped the NGINX core to 1.17.8.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2020-01-22T22:22:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d328e5620eaebe3e61fb7ce795a39ede5ce81f46",
          "body": "…derr.",
          "is_bot": false,
          "headline": "tests: 025-codecache.t: updated a test case to avoid error logs in st…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2020-01-22T22:20:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2390abb584e7aa69894e7d8a6acc7dd7879a753",
          "body": "… NGINX module's main_conf.\"\n\nThis reverts commit 09484e8fda2f1c1970a898a8c08111af13d69930.",
          "is_bot": false,
          "headline": "Revert \"bugfix: ensured 'init_worker_by_lua*' does not mutate another…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2020-01-17T22:46:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3286454308863f4ea8d0090c900da3ab74bd1fa",
          "body": "… without PCRE support.",
          "is_bot": false,
          "headline": "change: we now ignore 'lua_regex_*' directives when NGINX is compiled…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2020-01-14T00:32:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f518e7d92314b961cada4c9ba9e45d15f7b25f7",
          "body": null,
          "is_bot": false,
          "headline": "travis-ci: bumped OpenSSL to 1.0.2u.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2020-01-06T22:26:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "760f7073da87da23bb4f024943089edfad35c72e",
          "body": "… API.\n\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "feature: implemented the FFI interface for the 'ngx_req.add_header()'…",
          "author_name": "spacewander",
          "author_login": "spacewander",
          "committed_at": "2019-12-03T19:15:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c5b11d73785fa72291e3280e293b3e0cfab57db",
          "body": null,
          "is_bot": false,
          "headline": "tests: 124-init-worker.t: fixed a few failing test cases.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-12-03T00:13:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3ac3f557eed7efa3460d0870684f18d232adf5f",
          "body": "…ined.\n\nNo need to check if `nginx_version` is defined, as of NGINX 1.6.0+\n(today's minimum supported core version), always is.",
          "is_bot": false,
          "headline": "style: updated 'nginx_version' guard macros assuming it is always def…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-09-30T22:07:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "771eb231e59770f544055633992f3cac10c890d9",
          "body": "…defined in NGINX 1.6.0+\n\nNGINX 1.6.0+ (the minimum NGINX core version supported as of this\ncommit) already defines it.",
          "is_bot": false,
          "headline": "misc: ngx_http_lua_util.h: removed 'ngx_str_set' definition as it is …",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-09-30T22:07:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1e55394ea70be0a95d2e429fce489fbb263a50c",
          "body": "…fixed styling issues.",
          "is_bot": false,
          "headline": "misc: removed dead code, guard non-OpenResty LuaJIT definitions, and …",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-09-30T22:07:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "478bae6fc14359fe5b07f66f9fa721efe3eb0a9b",
          "body": null,
          "is_bot": false,
          "headline": "doc: readme: mentioned that the latest tested NGINX core is 1.17.4.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-09-27T23:20:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e593c335ffff5af1f3465bc6a71500951222331",
          "body": null,
          "is_bot": false,
          "headline": "travis-ci: bumped the NGINX core to 1.17.4.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-09-27T23:18:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69780f676900fb861cc4fa116e6dbe28d805da74",
          "body": null,
          "is_bot": false,
          "headline": "bugfix: config: fallback to '--undefined' option for ld 2.25 and below.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-09-24T22:04:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d062170e94141b236483d86067cdb0d0a596353d",
          "body": "… APIs.",
          "is_bot": false,
          "headline": "feature: implemented the 'ngx.crc32_short' and 'ngx.crc32_long' C FFI…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-09-13T17:46:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50dabbc3ae2e4123a004ba68c92ef889026df0b4",
          "body": null,
          "is_bot": false,
          "headline": "travis-ci: bumped OpenSSL versions to 1.0.2t, 1.1.0l, and 1.1.1d.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-09-12T17:55:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd1e0f89e495bcec9e930cb8c3525e953baa6f4a",
          "body": null,
          "is_bot": false,
          "headline": "feat: config: added a check for Lua language version 5.1.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-28T20:59:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b224957f696af2a3d642b3a5380f3227b327b03",
          "body": "…ADME.",
          "is_bot": false,
          "headline": "doc: readme: minor updates to align with the ngx_stream_lua module RE…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-27T22:47:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c943b9447784439153a2f4adec69f2fd6520d10",
          "body": null,
          "is_bot": false,
          "headline": "tests: 087-udp-socket.t: removed a duplicated test case.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-27T22:47:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70484bcbe4a0dcc67137df6387b3a7bed205fff8",
          "body": "…_lua module.",
          "is_bot": false,
          "headline": "tweaks: ported adjustments and missing test cases from the ngx_stream…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-27T22:47:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "315330ac099a35f5f17a0d453b7c001fe1181148",
          "body": "…ed on all platforms.\n\n- fix the LuaJIT FFI check (tested on Linux and Darwin)\n- fix static libpcre builds on Darwin\n- ensure previous config scripts do not make the LuaJIT check fail",
          "is_bot": false,
          "headline": "bugfix: config: ensured LuaJIT FFI check and static PCRE builds succe…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-27T21:04:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a190736a58674086c3a27bf71a7993383fffb55",
          "body": null,
          "is_bot": false,
          "headline": "change: removed error logging on coroutine runtime errors.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-13T01:55:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a892b8d5dc1fe3eb21882b318a1e3260330ad5c",
          "body": null,
          "is_bot": false,
          "headline": "bugfix: coroutine.wrap: propagate errors to the parent coroutine.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-13T01:55:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c658e22606c504b96e6408554cac8c1fefcfd0ea",
          "body": "…read.kill()' and 'ngx.socket.udp' in 'ssl_certificate_by_lua*'.",
          "is_bot": false,
          "headline": "tests: 139-ssl-cert.t: added test cases asserting support for 'ngx.th…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-12T23:21:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97f0101e525b8f0c0f125ab50e381c936f0c2f10",
          "body": "…ssion_fetch_by_lua*.\n\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "feature: enabled the 'ngx.thread' and 'ngx.socket.udp' APIs in ssl_se…",
          "author_name": "Tom Thorogood",
          "author_login": "tmthrgd",
          "committed_at": "2019-08-12T23:13:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97431d814114b5f94c5076557fbab3e0624b900f",
          "body": "A follow-up commit to 947fa00 in which removed the `NGX_LUA_NO_FFI_API`\nmacro. Doing so prevents the `cln` variable from being declared, which\nit previously was before even with such older NGINX core versions.",
          "is_bot": false,
          "headline": "bugfix: fixed compilation with NGINX cores < 1.11.11",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-09T20:06:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "189ba24ef4ebdeced25fe2994fbf4b03113225fb",
          "body": "…ction's definition.\n\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "feature: when a timer fails to run we now log the location of its fun…",
          "author_name": "spacewander",
          "author_login": "spacewander",
          "committed_at": "2019-08-08T23:39:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b9e53f74812cb9694397a4f3c3795989fc2962e",
          "body": "…)' on a sub-process when a light thread is waiting on it.\n\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "feature: ngx.pipe: allowed for calling resty.core 'ngx_pipe.shutdown(…",
          "author_name": "spacewander",
          "author_login": "spacewander",
          "committed_at": "2019-08-07T18:32:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8573c1c5d88a9d0438a4c51f8b74163e47dc1be1",
          "body": "…_pipe.spawn()'.\n\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "feature: ngx.pipe: allowed for specifying timeouts in resty.core 'ngx…",
          "author_name": "spacewander",
          "author_login": "spacewander",
          "committed_at": "2019-08-07T01:23:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d154e5a7c1cbb7810d0224862e577fc8a6b8e3ac",
          "body": "…d grammatical issues.\n\n* Removed mentions of PUC-Rio Lua, or hints that this module may work\n  with it.\n* Clarified that this module only supports LuaJIT 2.x starting with\n  v0.10.16.\n* Clarified that the terms \"Lua\" and \"LuaJIT\" are used interchangeably\n  in this document.\n* Consistently capitalized \"Nginx\".\n* Many styling and grammatical fixes.",
          "is_bot": false,
          "headline": "doc: readme: removed all mentions of PUC-Rio Lua and fixed styling an…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-05T23:16:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5135a051162e58a30fe65af97b14d7fb7dac354",
          "body": "…1.6.0).",
          "is_bot": false,
          "headline": "change: removed compatibility code for unsupported NGINX versions (< …",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-05T22:23:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "947fa0088b7a0387f43eb016436a2e4462eb5746",
          "body": "…are available.",
          "is_bot": false,
          "headline": "change: retired the old CFunction API when newer FFI implementations …",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-05T22:23:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60736e686ac5ca5af9a5bf118cb9bd4a9126cefc",
          "body": "…ty_core' directive is deprecated.",
          "is_bot": false,
          "headline": "change: 'resty.core' is now mandatorily loaded, and the 'lua_load_res…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-05T22:23:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a96e99ab1a770d261fa9eecbd9c7d112f39aa34b",
          "body": "…is supported.",
          "is_bot": false,
          "headline": "change: we now prevent compilation with PUC-Rio Lua; only LuaJIT 2.x …",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-05T22:23:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f270642bfd3fc252a278a48860ff168d65be703",
          "body": "Fix #1572",
          "is_bot": false,
          "headline": "bugfix: fixed file cache key size allocation.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-05T22:19:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b3822b18c3ac0b2d4d61a02b32d10a6207e1a4d",
          "body": "…ttp_lua_pipe.c.",
          "is_bot": false,
          "headline": "bugfix: added missing arguments to an 'ngx_log_error()' call in ngx_h…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-01T21:50:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fa316f50b980eb2e26a8271e9927359ba77b95e",
          "body": "…cleanup()' to align with the meta_lua module.",
          "is_bot": false,
          "headline": "tweak: updated the debug log in 'ngx_http_lua_socket_tcp_conn_op_ctx_…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-01T21:50:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba182dd599d5383e53c5b8837c565f3ee42aa806",
          "body": "…ule.",
          "is_bot": false,
          "headline": "style: fixed some minor styling issues to align with the meta_lua mod…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-01T21:50:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eed28fca8d46dd0cf5d5486b6545e943a30c8415",
          "body": "…cp' table.",
          "is_bot": false,
          "headline": "optimize: fixed the pre-allocated number of keys in the 'ngx.socket.t…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-01T21:50:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c25b7bea9eae8ab14d3bd6ac4a68ad1a348a238",
          "body": "…ngx_api' function.\n\nThis function was removed in 5078b14431f612693a4d468f200b792d128347d6.",
          "is_bot": false,
          "headline": "optimize: removed declaration of obsolete 'ngx_http_lua_inject_logby_…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-08-01T21:50:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d313bf8dea8d697cffa8fd08224febd0db3d6046",
          "body": "… platforms.\n\nFollow-up commit to 2014dd80fe4f299ad68c3b60a2c5f846b4286b6f",
          "is_bot": false,
          "headline": "bugfix: ensured the 'pcre_version' symbol is also preserved on Darwin…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-27T17:39:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c618d0d2391f493a3394a3978957ee3de449100c",
          "body": "…to a recent commit.\n\nA follow-up commit to 39c2ead3cb7efae4456494ea27a348fa1eca6c5c.",
          "is_bot": false,
          "headline": "bugfix: fixed compilation errors encountered with ngx_stream_lua due …",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-27T16:48:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "881bf91da6853446398cebc1b2d6a01f8d7939d6",
          "body": "…ntain '\\r' and '\\n' characters.\n\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "bugfix: ensured arguments of APIs mutating response headers do not co…",
          "author_name": "doujiang24",
          "author_login": "doujiang24",
          "committed_at": "2019-07-25T23:50:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "246ec8ac482d13770c545f2cf59355df50ce843b",
          "body": null,
          "is_bot": false,
          "headline": "refactor: simplified Lua chunk and file cache key generation.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-25T21:56:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f45908cd32025d107c84f16aed5f6829aabcf536",
          "body": "…mponent.",
          "is_bot": false,
          "headline": "refactor: reduced cache key size by removing unnecessary chunkname co…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-25T21:56:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd83c656d55c573caf186c0f2cd603191a724e33",
          "body": "… directives with identical Lua chunks produce distinct cache keys.",
          "is_bot": false,
          "headline": "tests: codecache.t: moved and reinforced a test case ensuring *by_lua…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-25T21:56:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c755ed892f4586536e7a0ad482e5a3feaa22ab9",
          "body": "…ures code cache key.",
          "is_bot": false,
          "headline": "bugfix: ensured set_by_lua_file with nginx variables re-computes clos…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-25T21:56:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39c2ead3cb7efae4456494ea27a348fa1eca6c5c",
          "body": "…' to avoid the costly 'lj_str_new()'.",
          "is_bot": false,
          "headline": "optimize: improved code cache lookup performance by using 'luaL_ref()…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-25T21:56:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf11f67d8cddec3554baf7c4c0142b2f1db984ab",
          "body": "…_file directives containing NGINX variables.",
          "is_bot": false,
          "headline": "tests: codecache.t: added tests for code cache behavior with *_by_lua…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-25T21:56:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e42f9b5f6520d7d5f51b6742134377f66bcdf841",
          "body": "…tificate_by_lua*' documentation.",
          "is_bot": false,
          "headline": "doc: updated the section on OpenSSL and NGINX patches in the 'ssl_cer…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-25T17:39:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09484e8fda2f1c1970a898a8c08111af13d69930",
          "body": "…odule's main_conf.\n\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "bugfix: ensured 'init_worker_by_lua*' does not mutate another NGINX m…",
          "author_name": "wangfakang",
          "author_login": "wangfakang",
          "committed_at": "2019-07-25T04:58:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6875300b7bd2425fd6f93de1e55e47685425b18",
          "body": null,
          "is_bot": false,
          "headline": "doc: mentioned that we support NGINX 1.17.x.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-18T00:18:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf77a42c4ec4cc87734c0179fde972e7f2d204f7",
          "body": "Signed-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "doc: removed TODO items that have been taken care of.",
          "author_name": "doujiang24",
          "author_login": "doujiang24",
          "committed_at": "2019-07-18T00:17:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de60e555a3463f78a05f91ac28641d623f556c2f",
          "body": null,
          "is_bot": false,
          "headline": "travis: added OpenSSL 1.1.1c to the tests matrix.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-17T20:38:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "467f0134dbf53737a0cf26de7ccb2c35bd490d85",
          "body": "…session_fetch_by_lua*' can yield when reading early data.\n\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "tests: added tests asserting that 'ssl_certificate_by_lua*' and 'ssl_…",
          "author_name": "spacewander",
          "author_login": "spacewander",
          "committed_at": "2019-07-17T20:35:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3dbc0c8102a9978d649c99e3261d93aac547378",
          "body": "…_lua*' when using TLS 1.3.\n\nPreviously, we used the OpenSSL 1.1.1 ClientHello callback to do ssl\nsession fetching non-blockingly. However, this way cannot handle an edge\ncase: the ssl session resumption via session ticket might fail, and the\nclient fallbacks to session ID resumption. The ClientHell\n[…]\n ID is not so profitable. If someone needs\nthis feature, they can contribute it themselves.\n\nThanks Yongjian Xu and crasyangel for their help.\n\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "bugfix: skipped 'ssl_session_store_by_lua*' and 'ssl_session_fetch_by…",
          "author_name": "spacewander",
          "author_login": "spacewander",
          "committed_at": "2019-07-17T20:35:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2014dd80fe4f299ad68c3b60a2c5f846b4286b6f",
          "body": "…hen PCRE is statically linked.\n\nWhen using `--with-pcre=...`, NGINX is statically linked against\nlibpcre.a. Since `pcre_version()` is unused, its symbol is stripped by\nthe linker. Because lua-resty-core's `resty.core.regex` module needs it,\nwe here ensure that the symbol is entered as undefined in our final\nbinary.\n\nThis should not be an issue for win32 builds since\n`--export-all-symbols` is already set.",
          "is_bot": false,
          "headline": "bugfix: ensured the 'pcre_version' symbol is preserved as undefined w…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-12T00:06:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "277d382f51067c0550a8264cb278e1364ba40e9c",
          "body": null,
          "is_bot": false,
          "headline": "api: bumped API version to 0.10.16.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-12T00:06:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2524330e59f0a385a9c77d4d1b957476dce7cb33",
          "body": null,
          "is_bot": false,
          "headline": "travis-ci: bumped the NGINX core version to 1.17.1.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-11T19:39:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65bdd4a838a72dc7d9dedc2add58b72aa3a5dfd1",
          "body": "… failures from 'crit' to 'info'.\n\nSee NGINX commit\nhttps://github.com/nginx/nginx/commit/99d7bb690924e60e9e03096ac5e507111f7c182d\nwhich landed in 1.15.10.",
          "is_bot": false,
          "headline": "tests: 139-ssl-cert-by.t: downgraded error log level of SSL handshake…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-11T19:39:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e974ba96150d0f5493f7e41c7523f1a3c2e0bef",
          "body": "…SSL and NGINX core patches.",
          "is_bot": false,
          "headline": "doc: updated ssl_session_fetch_by_lua_block documentation around Open…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-02T19:07:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0c7373917c63af3a06474df0ff9f1a65939d3e1",
          "body": "…lua*.\"\n\nThis reverts commit a38d9066787f6fe311135fc512004b1bc19ba1ac.\n\nAs put by @spacewander:\n\n> Previously, we used ClientHello callback to do ssl session fetching\nnon-blockingly. However, this way can not handle an edge case: the ssl\nsession resumption via session ticket might fail, and the clie\n[…]\nor TLS\n1.3 connections.\n\nSee:\n\nhttps://github.com/openresty/lua-nginx-module/issues/1539\nhttps://github.com/openresty/lua-nginx-module/pull/1540\nhttps://github.com/openresty/lua-nginx-module/pull/1544",
          "is_bot": false,
          "headline": "Revert \"feature: added OpenSSL 1.1.1 support to ssl_session_fetch_by_…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-07-02T18:57:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "81344434aa625878cb33bf0090a8c951a0979a64",
          "body": null,
          "is_bot": false,
          "headline": "doc: fixed a mistake in ngx.location.capture() example in README.md.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-06-28T00:08:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32dd6a34a17d6f1f094552a45c204ef614f5fbb5",
          "body": null,
          "is_bot": false,
          "headline": "style: fixed a minor alignment issue in ngx_http_lua_ssl_certby.c.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-06-15T00:21:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59b6430f7b7c407e15b19035c566a56cfd2eb3e8",
          "body": null,
          "is_bot": false,
          "headline": "bugfix: LuaJIT sets currentline to -1 if it is unavailable.",
          "author_name": "spacewander",
          "author_login": "spacewander",
          "committed_at": "2019-06-05T12:20:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a38d9066787f6fe311135fc512004b1bc19ba1ac",
          "body": "See openresty/openresty#456.\r\n\r\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "feature: added OpenSSL 1.1.1 support to ssl_session_fetch_by_lua*.",
          "author_name": "罗泽轩",
          "author_login": "spacewander",
          "committed_at": "2019-06-05T02:19:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a5872969cce758eedbd0e750522afb877734195",
          "body": null,
          "is_bot": false,
          "headline": "travis-ci: bumped OpenSSL to 1.0.2s and 1.1.0k.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-06-05T00:58:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33a5517c9c4e1a6d1415c2a59a51b0f75e3c8b04",
          "body": null,
          "is_bot": false,
          "headline": "tweak: fixed some warnings from the clang static code analyzer.",
          "author_name": "Yichun Zhang (agentzh)",
          "author_login": "agentzh",
          "committed_at": "2019-06-03T03:20:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4102b82cd0971c93663fe89eabd75b73741c4213",
          "body": "…nors 'lua_package_path'.",
          "is_bot": false,
          "headline": "tests: 161-load-resty-core.t: added a test asserting the directive ho…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-05-28T17:57:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1882c30a087168051a8292d0fcd199c0408da814",
          "body": "Thanks Antoine for the reminder in #1534.",
          "is_bot": false,
          "headline": "doc: we now work with nginx 1.14.x and 1.15.x.",
          "author_name": "Yichun Zhang (agentzh)",
          "author_login": "agentzh",
          "committed_at": "2019-05-27T17:40:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7afd56c66284db64d2dde74e6d9c11d06668e38",
          "body": "…pe spawn() FFI API.\n\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "feature: added support for specifying environment variables in ngx.pi…",
          "author_name": "spacewander",
          "author_login": "spacewander",
          "committed_at": "2019-05-24T16:46:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c756b385dc6812b8e7a90f9a690f16a775792c9",
          "body": null,
          "is_bot": false,
          "headline": "doc: fixed a mistake in tcpsock:receiveany() example in README.md.",
          "author_name": "Luke Gorrie",
          "author_login": "lukego",
          "committed_at": "2019-05-22T22:06:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30678fd5b9bbe344920278916f73cc0eb946db19",
          "body": "… default cipher.",
          "is_bot": false,
          "headline": "tests: ssl-socket.t: fixed a failing test case due to openresty.org's…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-05-22T22:02:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "441c7f626ae934a7d385a020ecce664a26792adf",
          "body": null,
          "is_bot": false,
          "headline": "tests: re-enabled a test case for using ngx.re.match in init_by_lua*.",
          "author_name": "Yichun Zhang (agentzh)",
          "author_login": "agentzh",
          "committed_at": "2019-05-20T19:16:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "28cf5ce3b6ec8e7ab44eadac9cc1c3b6f5c387ba",
          "body": null,
          "is_bot": false,
          "headline": "feature: added the FFI API for 'str_replace_char()'.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-05-07T23:02:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f87d1f16516b9cc2a78690eee863d38310db5533",
          "body": null,
          "is_bot": false,
          "headline": "bugfix: ngx.pipe: cleared the pending event after aborting the uthread.",
          "author_name": "罗泽轩",
          "author_login": "spacewander",
          "committed_at": "2019-05-06T00:36:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86941a706bb8522aee973640305ed3e443ae57e6",
          "body": "…ua suite.\n\nIn to-ngx_lua, the paths to lua-resty-core and lua-resty-lrucache are\nnot included by default, but is still required for Nginx to start due to\nthe default value of `lua_load_resty_core`.\n\nHence, we always provide those paths via the `LUA_PATH` env variable. In\nnon-to-* suites, those paths will thus be present twice, so the regexes\ntake that into consideration.",
          "is_bot": false,
          "headline": "tests: 123-lua-path.t: fixed a few test cases failing in EC2 to-ngx_l…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-04-28T19:48:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7be0a4dc9325e35bcfe33e967ba0654e5fe80153",
          "body": "Signed-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "doc: fixed a typo in README.md.",
          "author_name": "Keith Walsh",
          "author_login": "coderbydesign",
          "committed_at": "2019-04-28T19:42:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61e4d0aac8974b8fad1b5b93d0d3d694d257d328",
          "body": null,
          "is_bot": false,
          "headline": "tests: fixed a few failing test cases due to loading resty.core.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-04-09T20:39:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fccf383ae8a4b9d53487b0dfe1f3d92a11239a13",
          "body": null,
          "is_bot": false,
          "headline": "tests: fixed default lua path to load resty.core from many test cases.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-04-09T20:39:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87f0a09a60e6a51c99cd896dc02229f9b87e2607",
          "body": "….core by default.",
          "is_bot": false,
          "headline": "feat: implemented the lua_load_resty_core directive which loads resty…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-04-09T20:39:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ac6f3f67dad6ba9ce2eea85285c5177bcf9d589",
          "body": null,
          "is_bot": false,
          "headline": "doc: fixed a typo in a comment from ngx_http_lua_common.h.",
          "author_name": "uudiin",
          "author_login": "uudiin",
          "committed_at": "2019-04-08T23:28:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95a2e59bfb466e220d69d9953f29b12464ad687e",
          "body": null,
          "is_bot": false,
          "headline": "tests: removed obsolete drizzle upstream block in init.t.",
          "author_name": "Datong Sun",
          "author_login": "dndx",
          "committed_at": "2019-04-08T23:24:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12d991e182ec0e742b200405b65150cba8659e3d",
          "body": null,
          "is_bot": false,
          "headline": "api: bumped API version to 0.10.15.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-03-26T16:36:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "afeeb84b0840061d52e3e5686dd00142139ecd31",
          "body": "…syslog.\n\nFix https://github.com/openresty/lua-resty-shell/issues/7.",
          "is_bot": false,
          "headline": "bugfix: ngx.pipe: fixed a segfault when error_log is configured with …",
          "author_name": "罗泽轩",
          "author_login": "spacewander",
          "committed_at": "2019-03-10T00:30:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2bc20ccb04a1e87dc9b22fb84173995ae33b0ed3",
          "body": null,
          "is_bot": false,
          "headline": "travis-ci: switch to xenial image",
          "author_name": "Ilya Shipitsin",
          "author_login": "chipitsine",
          "committed_at": "2019-03-09T19:35:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15b01c66f737f2b6ea4dcd3dfb525c2f2c023fcb",
          "body": null,
          "is_bot": false,
          "headline": "tests: fixed the tests using iscribblet.org which would time out now.",
          "author_name": "Yichun Zhang (agentzh)",
          "author_login": "agentzh",
          "committed_at": "2019-03-09T19:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a92cf7255cf5132fc887bfccc937eebb29b30a14",
          "body": null,
          "is_bot": false,
          "headline": "tests: fixed failures due to recent CDN changes.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-02-27T06:37:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83ca6b57ae5ede2b9ff987babff323e5814cebaf",
          "body": null,
          "is_bot": false,
          "headline": "doc: bumped version to 0.10.14.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-02-24T06:14:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee47e55eb5c36ef8eb7937a232f3ec0fcd22ec33",
          "body": "… exited abnormally.",
          "is_bot": false,
          "headline": "bugfix: ngx.pipe: proc:wait() returns false only when the sub-process…",
          "author_name": "spacewander",
          "author_login": "spacewander",
          "committed_at": "2019-02-21T03:50:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c368af2f0784b1472741ad7be834ab4853bba1a8",
          "body": "…orker process.\n\nThe handler for this signal falls-through to a graceful shutdown in\ndaemonized worker processes.",
          "is_bot": false,
          "headline": "tests: 159-sa-restart.t: avoided sending SIGWINCH to the test nginx w…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-02-19T18:36:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "761ddca72deb4595ff93df7840dfa39854126123",
          "body": "Signed-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "bugfix: ensured we cleanup up aborted queued connect operations.",
          "author_name": "spacewander",
          "author_login": "spacewander",
          "committed_at": "2019-02-16T00:43:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8edb21abcc4ee3ccc2d50c63bbc7c3ca4553b374",
          "body": "…ated with the socket pool.\n\nSigned-off-by: Thibault Charbonnier <thibaultcha@me.com>",
          "is_bot": false,
          "headline": "bugfix: only update connections count when cosockets are truly associ…",
          "author_name": "spacewander",
          "author_login": "spacewander",
          "committed_at": "2019-02-16T00:43:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd90f4e8252e9d06419317fdf525b55c65e15a50",
          "body": null,
          "is_bot": false,
          "headline": "doc: one followup tweak.",
          "author_name": "Yichun Zhang (agentzh)",
          "author_login": "agentzh",
          "committed_at": "2019-02-08T20:20:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ebab2b8a3cbf6d79eeced86fa2ae1497f0d12e6",
          "body": null,
          "is_bot": false,
          "headline": "doc: emphasized that this module is a core component of OpenResty.",
          "author_name": "Yichun Zhang (agentzh)",
          "author_login": "agentzh",
          "committed_at": "2019-02-08T20:18:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf887654a2ac36b6747c54a11f50ca56f88d6dbd",
          "body": "…ed tests.",
          "is_bot": false,
          "headline": "tests: switched to 127.0.0.2 instead of agentzh.org for timeout-relat…",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-02-08T03:19:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01735c27fe2ffa9185bc3f9b8d0162f6b263717f",
          "body": null,
          "is_bot": false,
          "headline": "tests: hardened a few flaky test cases from recent CI runs.",
          "author_name": "Thibault Charbonnier",
          "author_login": "thibaultcha",
          "committed_at": "2019-02-07T20:08:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70dd0bee4c69c5dd7f87f848606d94b0f721a7f5",
          "body": "… when a local dns server is running.",
          "is_bot": false,
          "headline": "tests: fixed a test case in 068-socket-keepalive.t which always fails…",
          "author_name": "Yichun Zhang (agentzh)",
          "author_login": "agentzh",
          "committed_at": "2019-02-07T19:42:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9750a81731b5ab3fd29881eb1c1e8b0061a96e73",
          "body": null,
          "is_bot": false,
          "headline": "tests: fixed new test failure due to openresty.org server changes.",
          "author_name": "Yichun Zhang (agentzh)",
          "author_login": "agentzh",
          "committed_at": "2019-02-07T19:32:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2af4d36906dea4404bbc9ca00800900bbbf6eb9",
          "body": "… source checksum as part of the Lua code cache key. thanks Oleg A. Mamontov for the report in #1428.\n\nFix #1428.",
          "is_bot": false,
          "headline": "bugfix: inlined Lua code snippets in nginx.conf failed to use the Lua…",
          "author_name": "Yichun Zhang (agentzh)",
          "author_login": "agentzh",
          "committed_at": "2019-02-05T01:53:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 71,
      "commits_last_year": 0,
      "latest_release_at": "2015-11-11T09:49:24Z",
      "latest_release_tag": "v0.9.19",
      "releases_from_tags": true,
      "days_since_last_push": 2211,
      "active_weeks_last_year": 0,
      "days_since_latest_release": 3910,
      "mean_days_between_releases": 54.5
    },
    "community": {
      "has_readme": false,
      "has_license": false,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": null,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 1,
      "stars": 3,
      "watchers": 1,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "misc/recv-until-pm/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 182978,
      "source_files_sampled": 116,
      "oversized_source_files": 4,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [],
      "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": [],
      "dependencies": [],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "agentzh",
          "commits": 2907,
          "avatar_url": "https://avatars.githubusercontent.com/u/56241?v=4"
        },
        {
          "type": "User",
          "login": "chaoslawful",
          "commits": 159,
          "avatar_url": "https://avatars.githubusercontent.com/u/56617?v=4"
        },
        {
          "type": "User",
          "login": "thibaultcha",
          "commits": 99,
          "avatar_url": "https://avatars.githubusercontent.com/u/1125431?v=4"
        },
        {
          "type": "User",
          "login": "spacewander",
          "commits": 52,
          "avatar_url": "https://avatars.githubusercontent.com/u/4161644?v=4"
        },
        {
          "type": "User",
          "login": "doujiang24",
          "commits": 20,
          "avatar_url": "https://avatars.githubusercontent.com/u/570391?v=4"
        },
        {
          "type": "User",
          "login": "jinglong",
          "commits": 15,
          "avatar_url": "https://avatars.githubusercontent.com/u/853403?v=4"
        },
        {
          "type": "User",
          "login": "chipitsine",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/2217296?v=4"
        },
        {
          "type": "User",
          "login": "zhuzhaoyuan",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/74670?v=4"
        },
        {
          "type": "User",
          "login": "liseen",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/94178?v=4"
        },
        {
          "type": "User",
          "login": "bakins",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/205350?v=4"
        }
      ],
      "contributors_sampled": 71,
      "top_contributor_share": 0.849
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": false,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "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": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 24 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "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": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "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": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 7,
            "reason": "3 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "028c0d4951c7ad99dabf32b3a931d8caac7a5c63",
        "ran_at": "2026-07-26T17:13:31Z",
        "aggregate_score": 2.3,
        "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": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/thibaultcha/lua-nginx-module",
    "host": "github.com",
    "name": "lua-nginx-module",
    "owner": "thibaultcha"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "critical",
      "name": "Overall health",
      "note": "Abandonment Policy applies a 85% multiplier to weighted overall health.",
      "notes": [
        {
          "code": "abandonment_overall_adjustment",
          "params": {
            "cap": 0,
            "pct": 85
          }
        }
      ],
      "value": 18,
      "inputs": {
        "security": 23,
        "vitality": 17,
        "community": 3,
        "governance": 35,
        "engineering": 21,
        "abandonment_cap": null,
        "abandonment_state": "at_risk",
        "abandonment_multiplier": 85,
        "weighted_overall_before_abandonment": 21,
        "overall_after_abandonment_multiplier": 18
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "critical",
        "name": "Vitality",
        "value": 17,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "critical",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "commits_last_year": 0,
              "human_commit_share": 1,
              "days_since_last_push": 2211,
              "active_weeks_last_year": 0
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 2211 days ago",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 2211
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "0/52 weeks with commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "0 commits in the last year",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "at_risk",
            "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": 40,
            "inputs": {
              "releases_count": 71,
              "latest_release_tag": "v0.9.19",
              "releases_from_tags": true,
              "days_since_latest_release": 3910,
              "mean_days_between_releases": 54.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "71 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 71
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 3910 days ago",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 3910
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~54.5 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 54.5
                    }
                  }
                ],
                "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": 85,
            "inputs": {
              "cap": null,
              "state": "at_risk",
              "guards": [
                "no_open_demand"
              ],
              "signals": [
                "release_stall",
                "scorecard_unmaintained"
              ],
              "red_flag": true,
              "multiplier_pct": 85,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": 0,
              "unanswered_open_issues": 0,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 2376,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "no human commit for 2376 days; 2 unmet obligation(s): releases stalled, Scorecard reports it unmaintained",
                "points": 85,
                "status": "partial",
                "details": [
                  {
                    "code": "abandonment_flagged",
                    "params": {
                      "days": 2376,
                      "count": 2,
                      "signals": "releases stalled, Scorecard reports it unmaintained"
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 3,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 5,
            "inputs": {
              "forks": 1,
              "stars": 3,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "3 stars",
                "points": 4.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "has_readme": false,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 35,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 36,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 71,
              "top_contributor_share": 0.849
            },
            "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 85% of commits",
                "points": 3.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 85
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "71 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 71
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 24 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 69,
            "inputs": {
              "followers": 637,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "thibaultcha",
              "public_repos": 76,
              "account_age_days": 5400
            },
            "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": "637 followers of thibaultcha",
                "points": 20.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 637,
                      "login": "thibaultcha"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "76 public repos, account ~14 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 76
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "critical",
        "name": "Engineering Quality",
        "value": 21,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "critical",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "has_ci": false,
              "has_tests": false,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "https://openresty.org",
              "has_readme": false,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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://openresty.org",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 23,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 23,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 2.3
            },
            "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 24 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "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": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "3 existing vulnerabilities detected",
                "points": 5.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 25
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 46,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.93,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "93 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 93,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 32,
            "inputs": {
              "has_nix": false,
              "has_tests": false,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "misc/recv-until-pm/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "misc/recv-until-pm/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "misc/recv-until-pm/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "C (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "primary_language": "C",
              "largest_source_bytes": 182978,
              "source_files_sampled": 116,
              "oversized_source_files": 4
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "C (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "4/116 source files over 60KB",
                "points": 53.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 116,
                      "oversized": 4
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Community profile unavailable",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T17:13:46.982223Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/thibaultcha/lua-nginx-module.svg",
  "full_name": "thibaultcha/lua-nginx-module",
  "license_state": "absent",
  "license_spdx": null
}

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.27.0 — full methodology · metrics wiki.

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