Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-29 07:55 UTC

linuxwacom / input-wacom

Linux kernel driver for Wacom devices

CGPL-2.0★ 719 stars⑂ 65 forkssince Mar 2012View on GitHub ↗

linuxwacom/input-wacom holds a health index of 61 out of 100, placing it in the Moderate band. It scores highest on Vitality (69/100) and lowest on AI Readiness (34/100). It was last updated 21 days ago. A single contributor accounts for most of its recent work.

61
overall / 100
Moderate

Software health index

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

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

Score profile

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

Ownership

linuxwacomOrganization
193 followers7 public repossince Sep 2015

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Metrics by category

Vitality

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

69Moderate · 22% of overall
How it's scored
28.8/36Push recency — last push 21 days ago
6.9/36Commit cadence — 10/52 weeks with commits
13.6/18Commit volume — 32 commits in the last year
10/10OpenSSF Scorecard: Maintained — 21 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year32
human_commit_share1
days_since_last_push21
active_weeks_last_year10
How it's scored
27/27Ships releases — 24 releases published
36/36Release recency — latest release 21 days ago
12.6/27Release cadence — a release every ~193.8 days
8/10OpenSSF Scorecard: Signed-Releases — 5 out of the last 5 releases have a total of 5 signed artifacts.
Inputs used
releases_count24
latest_release_tagv1.7.0
releases_from_tagsno
days_since_latest_release21
mean_days_between_releases193.8

Community & Adoption

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

60Moderate · 18% of overall
How it's scored
46.3/60Stars — 719 stars
15.1/25Forks — 65 forks
7/15Watchers — 19 watchers
Inputs used
forks65
stars719
watchers19
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (GPL-2.0)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
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?

62Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
10.5/22.5Commit distribution — top contributor authored 54% of commits
13.5/13.5Contributor breadth — 40 contributors
10/10OpenSSF Scorecard: Contributors — project has 4 contributing companies or organizations
Inputs used
bus_factor1
contributors_sampled40
top_contributor_share0.535
How it's scored
45.2/46.8Issue resolution — 97% of issues closed
25.2/38.3PR acceptance — 77/117 decided PRs merged
12/15OpenSSF Scorecard: Code-Review — Found 6/7 approved changesets -- score normalized to 8
Inputs used
merged_prs77
open_issues13
closed_issues378
issue_closed_ratio0.967
closed_unmerged_prs40
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
16.4/25Owner reach — 193 followers of linuxwacom
18.6/25Track record — 7 public repos, account ~10 yr old
Inputs used
followers193
owner_typeOrganization
is_verified
owner_loginlinuxwacom
public_repos7
account_age_days3,967

Engineering Quality

Are baseline engineering and documentation practices in place?

50Moderate · 20% of overall
How it's scored
24/24CI workflows — 3 workflow(s)
0/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 6 out of 6 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsno
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentation

60Moderate
How it's scored
30/30README
0/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
10/10Topics — 7 topics
10/10Wiki
Inputs used
topicswacom, drivers, kernel, kernel-module, kernel-driver, backports, tablet
has_wikiyes
homepage
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

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

63Moderate · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
3.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 6 out of 6 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
6/7.5Code-Review — Found 6/7 approved changesets -- score normalized to 8
2.5/2.5Contributors — project has 4 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
7.5/7.5Maintained — 21 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — no data
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
6/7.5Signed-Releases — 5 out of the last 5 releases have a total of 5 signed artifacts.
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate6.3
Excluded from scoring (no data or not applicable): packaging. 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.

34At 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 — 90 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.9
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
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 — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsno
lockfiles
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — C (statically typed)
41.2/55Manageable file sizes — 2/8 source files over 60KB
Inputs used
primary_languageC
largest_source_bytes164,276
source_files_sampled8
oversized_source_files2

Key facts

719GitHub stars
40contributors
32commits, last 12 months
21days since last push
24releases
1bus factor
13open issues
package ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

More detail

Star and fork history 0 ★ / 65 ⇿
0Stars
65Forks
24Releases

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

01325385063756332015-082021-022026-07
Major 1Minor 7Patch 0

Each point covers 10 days.

OpenSSF Scorecard 6.3 / 10
6.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-29 07:54 UTC

10Binary-Artifactsno binaries found in the repo
5Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests6 out of 6 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
8Code-ReviewFound 6/7 approved changesets -- score normalized to 8
10Contributorsproject has 4 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained21 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10
n/aPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
8Signed-Releases5 out of the last 5 releases have a total of 5 signed artifacts.
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
10Vulnerabilities0 existing vulnerabilities detected
All dependencies 0

Full resolved dependency set from the GitHub dependency graph: 0 direct and 0 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
Dependency advisories not assessed

Advisory matching could not run for this report: No resolved dependencies to assess

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [
        "wacom",
        "drivers",
        "kernel",
        "kernel-module",
        "kernel-driver",
        "backports",
        "tablet"
      ],
      "is_fork": false,
      "size_kb": 3587,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "C": 311256,
        "M4": 20256,
        "Shell": 24491,
        "Makefile": 4491
      },
      "pushed_at": "2026-07-07T23:09:56Z",
      "created_at": "2012-03-24T00:41:18Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-26T09:13:41Z",
      "description": "Linux kernel driver for Wacom devices",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "GPL-2.0",
      "default_branch": "master",
      "license_spdx_raw": "GPL-2.0",
      "primary_language": "C",
      "significant_languages": [
        "C"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "linuxwacom",
      "company": null,
      "location": null,
      "followers": 193,
      "avatar_url": "https://avatars.githubusercontent.com/u/14335411?v=4",
      "created_at": "2015-09-17T17:59:51Z",
      "is_verified": null,
      "public_repos": 7,
      "account_age_days": 3967
    },
    "license": {
      "state": "standard",
      "spdx_id": "GPL-2.0",
      "raw_spdx": "GPL-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-07-07T23:11:12Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-04-13T22:49:37Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2025-07-21T22:54:13Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2025-02-06T19:13:41Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2024-07-31T16:28:01Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2024-02-29T23:25:58Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2023-08-31T21:10:23Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2023-05-31T17:19:57Z"
        },
        {
          "tag": "input-wacom-0.49.0",
          "kind": "other",
          "published_at": "2022-10-11T20:43:53Z"
        },
        {
          "tag": "input-wacom-0.48.0",
          "kind": "other",
          "published_at": "2021-09-27T20:46:26Z"
        },
        {
          "tag": "input-wacom-0.47.0",
          "kind": "other",
          "published_at": "2021-02-01T22:10:32Z"
        },
        {
          "tag": "input-wacom-0.46.0",
          "kind": "other",
          "published_at": "2020-05-08T15:58:16Z"
        },
        {
          "tag": "input-wacom-0.45.0",
          "kind": "other",
          "published_at": "2019-12-23T02:03:00Z"
        },
        {
          "tag": "input-wacom-0.44.0",
          "kind": "other",
          "published_at": "2019-09-18T21:59:36Z"
        },
        {
          "tag": "input-wacom-0.43.0",
          "kind": "other",
          "published_at": "2019-06-17T17:27:42Z"
        },
        {
          "tag": "input-wacom-0.42.0",
          "kind": "other",
          "published_at": "2018-10-26T20:57:32Z"
        },
        {
          "tag": "input-wacom-0.41.0",
          "kind": "other",
          "published_at": "2018-07-03T21:57:15Z"
        },
        {
          "tag": "input-wacom-0.40.0",
          "kind": "other",
          "published_at": "2018-04-27T17:51:35Z"
        },
        {
          "tag": "input-wacom-0.39.0",
          "kind": "other",
          "published_at": "2018-03-19T20:59:33Z"
        },
        {
          "tag": "input-wacom-0.38.0",
          "kind": "other",
          "published_at": "2018-01-23T23:10:13Z"
        },
        {
          "tag": "input-wacom-0.37.99.1",
          "kind": "other",
          "published_at": "2018-01-09T17:12:11Z"
        },
        {
          "tag": "input-wacom-0.37.1",
          "kind": "other",
          "published_at": "2017-10-12T21:10:35Z"
        },
        {
          "tag": "input-wacom-0.37.0",
          "kind": "other",
          "published_at": "2017-09-28T19:15:02Z"
        },
        {
          "tag": "input-wacom-0.36.0",
          "kind": "other",
          "published_at": "2017-09-29T17:26:04Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "2d14d8d0143d71b9cdfe6931d88b5ada10378f16",
          "body": "Signed-off-by: Joshua Dickens <Joshua@Joshua-Dickens.com>",
          "is_bot": false,
          "headline": "input-wacom 1.7.0",
          "author_name": "Joshua Dickens",
          "author_login": "Joshua-Dickens",
          "committed_at": "2026-07-07T23:01:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf0c349edbe160b63ceb818ee8240a51c527eee7",
          "body": "Backports for Input Wacom 1.7.0 Release",
          "is_bot": false,
          "headline": "Merge pull request #513 from Joshua-Dickens/master",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2026-07-07T22:53:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d66e5086cdf77b937a42ec2c9b081af22175507",
          "body": "Adding a flag for the definition of hid_warn_ratelimited introduced\nin kernel v6.17\n\nAdding a flag for the usage of __free which was introduced in kernel\nversion v6.5.\n\nAdding flags for the new guard and secure_guard methods implemented\nin kernel v6.5\n\nAdding flag for DEFINE_SIMPLE_DEV_PM_OPS definition implemented\nin kernel v5.17",
          "is_bot": false,
          "headline": "Add multiple flags for newly defined methods and utilities",
          "author_name": "Joshua Dickens",
          "author_login": "Joshua-Dickens",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d07b2a38fc6251c61bc05283126ba63c73b69a67",
          "body": "With the deprecation of Node.js 20 in Github Actions this commit updates\ncertain actions we use that relied on Node.js 20 to versions that use\nNode.js 24",
          "is_bot": false,
          "headline": "Upgrade main.yml and tagged-release.yml checkout and upload artifact",
          "author_name": "Joshua",
          "author_login": "Joshua-Dickens",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f08c9d6d5b75b5944ed99bc42b4dec5fd0aeba1c",
          "body": "This was done entirely with mindless brute force, using\n\n    git grep -l '\\<k[vmz]*alloc_objs*(.*, GFP_KERNEL)' |\n        xargs sed -i 's/\\(alloc_objs*(.*\\), GFP_KERNEL)/\\1)/'\n\nto convert the new alloc_obj() users that had a simple GFP_KERNEL\nargument to just drop that argument.\n\nNote that due to th\n[…]\nconversion.\n\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>\n[joshua.dickens@wacom.com: Imported into input-wacom (bf4afc53b77a)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "Convert 'alloc_obj' family to use the new default GFP_KERNEL argument",
          "author_name": "Linus Torvalds",
          "author_login": "torvalds",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fb872ab8e99d51329667770c98b32888d0abbaee",
          "body": "This is the result of running the Coccinelle script from\nscripts/coccinelle/api/kmalloc_objs.cocci. The script is designed to\navoid scalar types (which need careful case-by-case checking), and\ninstead replace kmalloc-family calls that allocate struct or union\nobject instances:\n\nSingle allocations:\tk\n[…]\n\", instead returning\n\"TYPE *\".\n\nSigned-off-by: Kees Cook <kees@kernel.org>\n[joshua.dickens@wacom.com: Imported into input-wacom (69050f8d6d07)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "treewide: Replace kmalloc with kmalloc_obj for non-scalar types",
          "author_name": "Kees Cook",
          "author_login": "kees",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f4639c92c046c66fda9110ed8d881de5cbec9e97",
          "body": "…ata to 0\n\nThese drivers don't use the driver_data member of struct i2c_device_id,\nso don't explicitly initialize this member.\n\nThis prepares putting driver_data in an anonymous union which requires\neither no initialization or named designators. But it's also a nice\ncleanup on its own.\n\nWhile add it\n[…]\n@pengutronix.de\nSigned-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (5852f2afcdd9)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "Input: drop explicit initialization of struct i2c_device_id::driver_d…",
          "author_name": "Uwe Kleine-König",
          "author_login": null,
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac8671e383219d89fdfba533722b0e08acc1d754",
          "body": "Switch the driver to use guard notation when acquiring mutex to\nhave it released automatically.\n\nLink: https://lore.kernel.org/r/Zmkyvkr9AFyywy1V@google.com\nSigned-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (68bf7a8cc5f3)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "Input: wacom_w8001 - use \"guard\" notation when acquiring mutex",
          "author_name": "Dmitry Torokhov",
          "author_login": "dtor",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b74638b81026cfcd57a3aa2efaad8c89604c9bee",
          "body": "wacom_intuos_bt_irq() duplicates the received Bluetooth report with\nkmemdup() so that it can pass 10-byte input report payloads to the\ncommon Intuos parser. The helper then copies each payload back into\nwacom->data before calling wacom_intuos_irq().\n\nAvoid the allocation and copy by temporarily poin\n[…]\nke <jason.gerecke@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (8310cdeefc8a)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: avoid copying Bluetooth input reports",
          "author_name": "Ruoyu Wang",
          "author_login": "Ryuwang3",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eb3a6e0533de285a68fbd13c3ed181bd362f05c8",
          "body": "wacom_parse_and_register() starts HID hardware before registering inputs\nand initializing pad LEDs/remotes. Those later steps can fail, but their\nerror paths currently release Wacom resources without stopping the HID\nhardware.\n\nRoute post-hid_hw_start() failures through hid_hw_stop() before\nreleasin\n[…]\n <dmitry.torokhov@gmail.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (ec2612b8ad9e)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: stop hardware after post-start probe failures",
          "author_name": "Myeonghun Pak",
          "author_login": "testacegi",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "38e4b2f401a9eb0fbb83a7eeb4c5a3cd185afc0f",
          "body": "Use __free(kfree) cleanup facility for the temporary buffer in\nwacom_wac_queue_flush() to simplify error paths and ensure the buffer\nis freed automatically when it goes out of scope.\n\nSigned-off-by: Jinmo Yang <jinmo44.yang@gmail.com>\nSigned-off-by: Benjamin Tissoires <bentiss@kernel.org>\n[joshua.dickens@wacom.com: Imported into input-wacom (cb605d48dac9)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: use cleanup.h for wacom_wac_queue_flush() buffer management",
          "author_name": "Jinmo Yang",
          "author_login": "omnij",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9328544fb265eb3508040f95e2eeab9e7163f60b",
          "body": "wacom_wac_queue_flush() is called via the .raw_event callback\n(wacom_raw_event → wacom_wac_pen_serial_enforce → wacom_wac_queue_flush).\nFor USB HID devices, this callback is invoked from hid_irq_in(), which\nis a URB completion handler running in atomic context. Using GFP_KERNEL\nin this path can slee\n[…]\no44.yang@gmail.com>\nSigned-off-by: Benjamin Tissoires <bentiss@kernel.org>\n[joshua.dickens@wacom.com: Imported into input-wacom (55f1ad573e34)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: use GFP_ATOMIC in wacom_wac_queue_flush()",
          "author_name": "Jinmo Yang",
          "author_login": "omnij",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "df2136abef2bb40e1a5467c59fbc22204b03db5e",
          "body": "wacom_wac_queue_insert() calls kfifo_skip() in a loop when the kfifo\ndoesn't have enough space for the incoming report. If the kfifo is\nempty, kfifo_skip() reads stale data left in the kmalloc'd buffer\nvia __kfifo_peek_n() and interprets it as a record length, advancing\nfifo->out by that garbage val\n[…]\ntorokhov@gmail.com>\nSigned-off-by: Benjamin Tissoires <bentiss@kernel.org>\n[joshua.dickens@wacom.com: Imported into input-wacom (6b3014ec0e9a)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: fix slab-out-of-bounds write in wacom_wac_queue_insert",
          "author_name": "Jinmo Yang",
          "author_login": "omnij",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5e6282615e59bf188e5c1f21bc52df9500c57fd6",
          "body": "…ptr()\n\nSIMPLE_DEV_PM_OPS() is deprecated as it requires explicit protection\nagainst unused function warnings.  The new combination of pm_sleep_ptr()\nand DEFINE_SIMPLE_DEV_PM_OPS() allows the compiler to see the functions,\nthus suppressing the warning, but still allowing the unused code to be\nremove\n[…]\nic23@kernel.org\nSigned-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (5ca74320a748)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "Input: wacom_i2c - switch to DEFINE_SIMPLE_DEV_PM_OPS() and pm_sleep_…",
          "author_name": "Jonathan Cameron",
          "author_login": "jic23",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "06e854915c3a95811a88e3c4d954979af56a04f0",
          "body": "In Kernel ver 7.0 a new definition was added for alloc_objs\nthat was soon used to replace older uses of older allocs.\n\nThis commit seeks to properly set which to use based on kernel version.",
          "is_bot": false,
          "headline": "Add WACOM_KZALLOC_OBJ flag to handle new method",
          "author_name": "Joshua Dickens",
          "author_login": "Joshua-Dickens",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aaa1e8b272114330e7263128a9cd9bfc66d4c3d2",
          "body": "This was done entirely with mindless brute force, using\n\n    git grep -l '\\<k[vmz]*alloc_objs*(.*, GFP_KERNEL)' |\n        xargs sed -i 's/\\(alloc_objs*(.*\\), GFP_KERNEL)/\\1)/'\n\nto convert the new alloc_obj() users that had a simple GFP_KERNEL\nargument to just drop that argument.\n\nNote that due to th\n[…]\nconversion.\n\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>\n[joshua.dickens@wacom.com: Imported into input-wacom (bf4afc53b77a)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "Convert 'alloc_obj' family to use the new default GFP_KERNEL argument",
          "author_name": "Linus Torvalds",
          "author_login": "torvalds",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c0378c82e12fd99bfd5dec6045dce1c52c180633",
          "body": "This is the result of running the Coccinelle script from\nscripts/coccinelle/api/kmalloc_objs.cocci. The script is designed to\navoid scalar types (which need careful case-by-case checking), and\ninstead replace kmalloc-family calls that allocate struct or union\nobject instances:\n\nSingle allocations:\tk\n[…]\n\", instead returning\n\"TYPE *\".\n\nSigned-off-by: Kees Cook <kees@kernel.org>\n[joshua.dickens@wacom.com: Imported into input-wacom (69050f8d6d07)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "treewide: Replace kmalloc with kmalloc_obj for non-scalar types",
          "author_name": "Kees Cook",
          "author_login": "kees",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "642a43f47a429808fdf58b4ffd991fd7e6cd66a9",
          "body": "wacom_hid_set_device_mode() currently assumes that the HID_DG_INPUTMODE\nusage is always located in the first field (field[0]) of the feature report.\nHowever, a device can specify HID_DG_INPUTMODE in a different field.\n\nIf HID_DG_INPUTMODE is in a field other than the first one and the first\nfield ha\n[…]\nes <lee@kernel.org>\nSigned-off-by: Benjamin Tissoires <bentiss@kernel.org>\n[joshua.dickens@wacom.com: Imported into input-wacom (c0a8899e02dd)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Fix OOB write in wacom_hid_set_device_mode()",
          "author_name": "Lee Jones",
          "author_login": "lag-linaro",
          "committed_at": "2026-07-07T22:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "44cea06b98a5e59b4fe2f6234307cf13a1b99e06",
          "body": "Fix hid_report_raw_event arguments for kernel 7.0.8+",
          "is_bot": false,
          "headline": "Merge pull request #510 from Korikashi/fix-kernel-7.0-hid-arguments",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2026-06-15T23:33:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e773395b0495fee369eb748573fd995893d020c",
          "body": "In kernel ver 7.0.8, hid_report_raw_event() was updated to accept both\nthe buffer size and the data size arguments to mitigate potential OOB issues.\n\nThis commit adds a check and flag set in configure.ac for this change.\nIt also adds #ifdef checks in 4.18/wacom_sys.c to handle the flag and safely\npass the extra parameter on newer kernels, while preserving the legacy\nsignature for older environments.\n\nSigned-off-by: Kori <pedarkasy@gmail.com>",
          "is_bot": false,
          "headline": "4.18: add WACOM_HID_REPORT_RAW_EVENT_BUFSIZE flag for API update",
          "author_name": "Kori",
          "author_login": "Korikashi",
          "committed_at": "2026-06-14T23:54:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce6a46cf71595bd08ad9ebc9d761acf9dc9b49b1",
          "body": "commit 0a3fe972a7cb (\"HID: core: Mitigate potential OOB by removing\nbogus memset()\") enforced the provided data to be at least the size of\nthe declared buffer in the report descriptor to prevent a buffer\noverflow. However, we can try to be smarter by providing both the buffer\nsize and the data size,\n[…]\n Greg Kroah-Hartman <gregkh@linuxfoundation.org>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[pedarkasy@gmail.com: Imported into input-wacom (2c85c61d1332)]\nSigned-off-by: Kori <pedarkasy@gmail.com>",
          "is_bot": false,
          "headline": " HID: pass the buffer size to hid_report_raw_event",
          "author_name": "Kori",
          "author_login": "Korikashi",
          "committed_at": "2026-06-14T23:35:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a093738af30e9932cd6b8fa2164e973fc7f5f061",
          "body": "input-wacom 1.6.0",
          "is_bot": false,
          "headline": "Merge pull request #505 from flying-elephant/master",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2026-04-13T23:40:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "116fa157591ce07a6f77e611653ac570485294c5",
          "body": "Signed-off-by: Tatsunosuke Tobita <tatsunosuke.wacom@gmail.com>",
          "is_bot": false,
          "headline": "input-wacom 1.6.0",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2026-04-13T10:27:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64226fc2296f0f616e8ab24c13d67df8d615a166",
          "body": "Replace pm comfig",
          "is_bot": false,
          "headline": "Merge pull request #504 from flying-elephant/replace-PM_COMFIG",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2026-04-09T14:15:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc407239f5ef3befafbfc08eedc221dc82571878",
          "body": "Add lines to check the availability of pm_ptr function\nrelated to the commit, a864d16be156.\n\nSigned-off-by: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>",
          "is_bot": false,
          "headline": "configure.ac: add lines for applying pm_ptr",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2026-04-09T00:24:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9730d7db67587eb9d474bfcd159d81263e640f94",
          "body": "This increases build coverage and allows to drop an #ifdef.\n\nSigned-off-by: Bastien Nocera <hadess@hadess.net>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[tatsunosuke.tobita@wacom.com: Imported into input-wacom (a864d16be156)]\nSigned-off-by: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>\nLink: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/hid/wacom_sys.c?id=a864d16be15625df365a5945f566efc2e36f73c3",
          "is_bot": false,
          "headline": "HID: wacom: Use pm_ptr instead of #ifdef CONFIG_PM",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2026-04-09T00:23:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08f9075fe528e8a1f3cc6029157e0de18e782a5d",
          "body": "HID: wacom: fix out-of-bounds read in wacom_intuos_bt_irq",
          "is_bot": false,
          "headline": "Merge pull request #503 from flying-elephant/fix-bt-irq",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2026-04-08T13:00:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09bc480a02d2f26390eefeb7ef7472b562239460",
          "body": "The wacom_intuos_bt_irq() function processes Bluetooth HID reports\nwithout sufficient bounds checking. A maliciously crafted short report\ncan trigger an out-of-bounds read when copying data into the wacom\nstructure.\n\nSpecifically, report 0x03 requires at least 22 bytes to safely read\nthe processed d\n[…]\nuke Tobita <tatsunosuke.tobita@wacom.com>\nLink: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/hid/wacom_wac.c?h=v7.0-rc6&id=2f1763f62909ccb6386ac50350fa0abbf5bb16a9",
          "is_bot": false,
          "headline": "HID: wacom: fix out-of-bounds read in wacom_intuos_bt_irq",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2026-04-08T06:12:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2b4906663052436eaccd1b3689c21f9ce4cfaa6a",
          "body": "…fect\n\nmain.yaml: replacing curl by wget to apply the off tree patch.",
          "is_bot": false,
          "headline": "Merge pull request #502 from flying-elephant/modify-yaml-to-remove-de…",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2026-04-08T00:43:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d63d0ad40d5a95dcc1d73b9b12311a97e1a8c45",
          "body": "Because the target URL of curl command was restricted,\nthe command has been replaced to wget.\n\nSigned-off-by: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>",
          "is_bot": false,
          "headline": "main.yaml: replacing curl to wget",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2026-04-08T00:21:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65d04bf5e85814c432478392de89c8ea1976f4fe",
          "body": "Applying timer patch final",
          "is_bot": false,
          "headline": "Merge pull request #481 from flying-elephant/applying-timer-patch-final",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2025-11-12T00:45:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ad80aeb9e938de033d79e43cf6a79134136a8a7",
          "body": "The upstream patch(41cb08555c41) is simply to rename\n\"from_timer\" to \"timer_container_of\" for Linux kernel\nover v6.15. This patch also adds Linux kernel version\ncheck whether or not the rename must be applied,\ndepending on the kernel version in wacom_wac.c.\n\nAlso to check its availability before compiling all codes,\nanother AC_MSG_CHECKING block has been added\nin configure.ac.\n\nSigned-off-by: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>",
          "is_bot": false,
          "headline": "Backward compatibility for timer function",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2025-11-11T01:59:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e26d17861b7cf521deaf1416880d5d81031c4b9c",
          "body": "Move this API to the canonical timer_*() namespace.\n\n[ tglx: Redone against pre rc1 ]\n\nSigned-off-by: Ingo Molnar <mingo@kernel.org>\nSigned-off-by: Thomas Gleixner <tglx@linutronix.de>\nLink: https://lore.kernel.org/all/aB2X0jCKQO56WdMt@gmail.com\n\n[tatsunosuke.tobita@wacom.com: Imported into input-wacom (41cb08555c41)]\nSigned-off-by: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>",
          "is_bot": false,
          "headline": "treewide, timers: Rename from_timer() to timer_container_of()",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2025-11-10T20:57:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eff01aad841dd480bba0855b6a731de12c76ec6e",
          "body": "Import from upstream patch(9fc51941d9e7)",
          "is_bot": false,
          "headline": "Merge pull request #474 from flying-elephant/patch-artpen",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2025-11-05T02:43:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f34a23c7bc0e9f7c8d026c3e5f687400a30170c8",
          "body": "Signed-off-by: Ping Cheng <ping.cheng@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>",
          "is_bot": false,
          "headline": "HID: wacom: Add a new Art Pen 2",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2025-11-04T09:21:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53081c21d26eee390020990087601afd8fdf2c92",
          "body": "Signed-off-by: Joshua Dickens <Joshua@Joshua-Dickens.com>",
          "is_bot": false,
          "headline": "input-wacom 1.5.0",
          "author_name": "Joshua Dickens",
          "author_login": "Joshua-Dickens",
          "committed_at": "2025-07-21T22:18:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6b754081cf133e4241270c96bdbbf6a1497383a",
          "body": "Import multiple upstream patches",
          "is_bot": false,
          "headline": "Merge pull request #463 from Joshua-Dickens/master",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2025-07-16T18:01:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "363ed5e376d9f98905101bbcb7d57ededbd93e66",
          "body": "In kernel ver 6.1.84 del_timer_sync was renamed to timer_delete_sync.\nThis commit adds a check and flag set in configure.ac for this change.\nIt also adds an #ifdef check in wacom_sys.c to handle the flag.\n\nResolves: https://github.com/linuxwacom/input-wacom/issues/461\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "Add WACOM_TIMER_DELETE_SYNC flag to handle rename in timers",
          "author_name": "Joshua",
          "author_login": "Joshua-Dickens",
          "committed_at": "2025-07-15T20:48:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "554af2e8294d1d6fcf92e93dc95169f76b786ba4",
          "body": "Commit fd2a9b29dc9c (\"HID: wacom: Remove AES power_supply after extended\ninactivity\") introduced wacom_aes_battery_handler() which is scheduled\nas a delayed work (aes_battery_work).\n\nIn wacom_remove(), aes_battery_work is not canceled. Consequently, if\nthe device is removed while aes_battery_work is\n[…]\nCheng <ping.cheng@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (f3054152c12e)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: fix crash in wacom_aes_battery_handler()",
          "author_name": "Thomas Zeitlhofer",
          "author_login": null,
          "committed_at": "2025-07-15T06:52:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2480eb436791438092a6b8ec516ae8d59c71001c",
          "body": "When sysfs_create_files() fails in wacom_initialize_remotes() the error\nis returned and the cleanup action will not have been registered yet.\n\nAs a result the kobject???s refcount is never dropped, so the\nkobject can never be freed leading to a reference leak.\n\nFix this by calling kobject_put() befo\n[…]\nim Ijaz <qasdev00@gmail.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (85a720f4337f)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: fix kobject reference count leak",
          "author_name": "Qasim Ijaz",
          "author_login": "qasim-ijaz",
          "committed_at": "2025-07-15T06:52:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eb4f850f98df67929c26ec84f53736fe4db4e7b7",
          "body": "When sysfs_create_files() fails during wacom_initialize_remotes() the\nfifo buffer is not freed leading to a memory leak.\n\nFix this by calling kfifo_free() before returning.\n\nFixes: 83e6b40e2de6 (\"HID: wacom: EKR: have the wacom resources dynamically allocated\")\nReviewed-by: Ping Cheng <ping.cheng@wa\n[…]\nim Ijaz <qasdev00@gmail.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (1a19ae437ca5)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: fix memory leak on sysfs attribute creation failure",
          "author_name": "Qasim Ijaz",
          "author_login": "qasim-ijaz",
          "committed_at": "2025-07-15T06:52:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e943effa3748478df6998ab8c6b7b31bca35c830",
          "body": "During wacom_initialize_remotes() a fifo buffer is allocated\nwith kfifo_alloc() and later a cleanup action is registered\nduring devm_add_action_or_reset() to clean it up.\n\nHowever if the code fails to create a kobject and register it\nwith sysfs the code simply returns -ENOMEM before the cleanup\nacti\n[…]\nim Ijaz <qasdev00@gmail.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (5ae416c5b1e2)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: fix memory leak on kobject creation failure",
          "author_name": "Qasim Ijaz",
          "author_login": "qasim-ijaz",
          "committed_at": "2025-07-15T06:52:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5a234efda932cf0cbe240c946ca7b29fbd17741a",
          "body": "During wacom_parse_and_register() the code calls wacom_devm_kfifo_alloc\nto allocate a fifo. During this operation it passes kfifo_alloc a\nfifo_size of 0. Kfifo attempts to round the size passed to it to the\nnext power of 2 via roundup_pow_of_two (queue-type data structures\ndo this to maintain effici\n[…]\nim Ijaz <qasdev00@gmail.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (6bf8ab7774a2)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: fix shift OOB in kfifo allocation for zero pktlen",
          "author_name": "Qasim Ijaz",
          "author_login": "qasim-ijaz",
          "committed_at": "2025-07-15T06:51:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f91f83e202b9c300db1f79dd1a87f4c95713a970",
          "body": "In wacom_wac_queue_flush() the code allocates zero initialised\nbuffer which it uses as a storage buffer for copying data from\na fifo via kfifo_out(). The kfifo_out() function returns the\nnumber of elements it has copied. The code checks if the number\nof copied elements does not equal the size of the\n[…]\nim Ijaz <qasdev00@gmail.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (fd34bf79a617)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: fix memory leak on size mismatch in wacom_wac_queue_flush()",
          "author_name": "Qasim Ijaz",
          "author_login": "qasim-ijaz",
          "committed_at": "2025-07-15T06:51:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d23cb169570747c4a842538eab9ea4b829fbae9f",
          "body": "…ush()\n\nDuring wacom_wac_queue_flush() the code calls\nkzalloc() to allocate a zero initialised buffer\nwhich it uses as a storage buffer to get data\nfrom the fifo via kfifo_out(). However it does not\ncheck kzalloc() for allocation failure which returns\nNULL and could potentially lead to a NULL deref.\n[…]\nke <jason.gerecke@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[joshua.dickens@wacom.com: Imported into input-wacom (e1ca5f39c2e3)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: handle kzalloc() allocation failure in wacom_wac_queue_fl…",
          "author_name": "Qasim Ijaz",
          "author_login": "qasim-ijaz",
          "committed_at": "2025-07-15T06:51:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "94b2292834ab99bc47cdebcf9b00ac918b00d193",
          "body": "timer_delete[_sync]() replaces del_timer[_sync](). Convert the whole tree\nover and remove the historical wrapper inlines.\n\nConversion was done with coccinelle plus manual fixups where necessary.\n\nSigned-off-by: Thomas Gleixner <tglx@linutronix.de>\nSigned-off-by: Ingo Molnar <mingo@kernel.org>\n[joshua.dickens@wacom.com: Imported into input-wacom (8fa7292fee5c)]\nSigned-off-by: Joshua Dickens <joshua.dickens@wacom.com>",
          "is_bot": false,
          "headline": "treewide: Switch/rename to timer_delete[_sync]()",
          "author_name": "Thomas Gleixner",
          "author_login": "KAGA-KOKO",
          "committed_at": "2025-07-15T06:51:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c2ebb19f08265a87c717b9b0b04f07a3ddfa235",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'for-6.15' into 'master'",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2025-03-12T21:43:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e72dc4b46d22a187cd7b4102efadf9c7346b5feb",
          "body": "Rather than memcpy every packet that we receive from HID into our own\nlocal fixed-size array, we can just access the data directly through\nthe original pointer. While we're at it, remove the few other places\nthat assume a fixed maximum packet size and make them dynamic (in\nparticular: temporary buff\n[…]\nrecke <jason.gerecke@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (5e013ad20689)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Remove static WACOM_PKGLEN_MAX limit",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2025-03-12T21:41:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5024945eafb25df5b0cea1b258ea713c3cc6b24e",
          "body": "Update ubuntu version in workflows",
          "is_bot": false,
          "headline": "Merge pull request #454 from Joshua-Dickens/master",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2025-02-26T00:31:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfc0258e9133f0d82d27f456c1e5e673e76f2b69",
          "body": "Updating the ubuntu version checkpatch and main runs on from 20.04 to 24.04 to deal with the upcoming deprecation of 20.04.",
          "is_bot": false,
          "headline": "Update ubuntu version in workflows",
          "author_name": "Joshua",
          "author_login": "Joshua-Dickens",
          "committed_at": "2025-02-24T23:09:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea646d54d12ac0a3ac093cbdfafe0bba34798db9",
          "body": "Signed-off-by: Joshua Dickens <Joshua@Joshua-Dickens.com>",
          "is_bot": false,
          "headline": "input-wacom 1.4.0",
          "author_name": "Joshua Dickens",
          "author_login": "Joshua-Dickens",
          "committed_at": "2025-02-06T19:01:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca777c2bf5b6cdf807e16702322a9f36721bc8bc",
          "body": "Import wacom_wac upstream patch (HID: Wacom: Add PCI Wacom device support)",
          "is_bot": false,
          "headline": "Merge pull request #453 from flying-elephant/addition_for_intel-thc",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2025-02-05T19:48:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b81e4f15e10d97371ee0e092fbf63b79fea7fbdd",
          "body": "Add PCI device ID of wacom device into driver support list.\n\nSigned-off-by: Even Xu <even.xu@intel.com>\nTested-by: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>\nReviewed-by: Ping Cheng <ping.cheng@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[tatsunosuke.tobita@wacom.com: Imported into input-wacom (c4c123504a65)]\nSigned-off-by: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>\nLink: https://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git/log/?h=for-6.14/wacom-pci",
          "is_bot": false,
          "headline": "HID: Wacom: Add PCI Wacom device support",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2025-02-03T22:05:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "871f61738e440af7372eb5de063dda8198728eef",
          "body": "asm/unaligned.h is always an include of asm-generic/unaligned.h;\nmight as well move that thing to linux/unaligned.h and include\nthat - there's nothing arch-specific in that header.\n\nauto-generated by the following:\n\nfor i in `git grep -l -w asm/unaligned.h`; do\n\tsed -i -e \"s/asm\\/unaligned.h/linux\\/\n[…]\n_GENERIC/__LINUX/\" include/linux/unaligned.h tools/include/linux/unaligned.h\n\n[jason.gerecke@wacom.com: Imported into input-wacom (5f60d5f6bbc1)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "move asm/unaligned.h to linux/unaligned.h",
          "author_name": "Al Viro",
          "author_login": null,
          "committed_at": "2025-01-15T17:09:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "43bf9cd66a5ef3300b82dbe18039f05ea26be830",
          "body": "Ensure that we exercise the recently-added WACOM_TRIGGER_BRIGHTNESS\nconditional.\n\nRef: 7dceb0bfae55 (\"HID: wacom: Initialize brightness of LED trigger\")\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "github: Add 6.10 kernel to our test-compile list",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2025-01-15T17:09:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4314c4353abde41fcf570cc0bf0b298b33588333",
          "body": "The WACOM_LINUX_COMPILE_IFELSE macro performs test builds of small code\nsnippets. It executes different sections of the configure script depending\non if the build failed or succeeded. We use this function to test whether\nvarious kernel features are present or not. The macro performs a full\n`make mod\n[…]\nuild instead.\n\nThis commit adds `KBUILD_MODPOST_WARN=1` to the test build commands\nto transform link errors into harmless warnings.\n\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>\n\nFix: Nowarn",
          "is_bot": false,
          "headline": "configure.ac: Ingore modpost errors from WACOM_LINUX_COMPILE_IFELSE",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2025-01-15T17:06:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cb85319d00600837a206d4e46fad4e96039ea0f9",
          "body": "The build directory contains various files (e.g. \"config.log\", \"config.h\")\nthat can be helpful for diagnosing build issues. This commit asks Github\nto temporarily (7 days) store a copy of each runner's build directory so\nthat we can easily review the output if necessary.\n\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "github: Save build directory as a downloadable artifact for review",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2025-01-15T16:24:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f60a3c6f36ea5d9f537624e4f70def7f65fc7d2",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'for-6.13' into 'master'",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-12-10T19:30:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7dceb0bfae55ad12ea64e4824b03134ac8059ea4",
          "body": "If an LED has a default_trigger set prior to being registered with\nthe subsystem, that trigger will be executed with a brightness value\ndefined by `trigger->brightness`. Our driver was not setting this\nvalue, which was causing problems. It would cause the selected LED\nto be turned off, as well as co\n[…]\nrecke <jason.gerecke@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (88006b8eca63)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Initialize brightness of LED trigger",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-12-10T19:27:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf62fdd61d8f772bdf2c91371dd10e2b7f6b29d2",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'for-6.13' into 'master'",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-12-09T19:36:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b964415fa4ec2549d4c05c2f891be2fa77a1a3d",
          "body": "Due to incorrect dev->product reporting by certain devices, null\npointer dereferences occur when dev->product is empty, leading to\npotential system crashes.\n\nThis issue was found on EXCELSIOR DL37-D05 device with\nLoongson-LS3A6000-7A2000-DL37 motherboard.\n\nKernel logs:\n[   56.470885] usb 4-3: new fu\n[…]\nstable@vger.kernel.org\nSigned-off-by: Benjamin Tissoires <bentiss@kernel.org>\n[jason.gerecke@wacom.com: Imported into input-wacom (59548215b76b)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: fix when get product name maybe null pointer",
          "author_name": "WangYuli",
          "author_login": null,
          "committed_at": "2024-12-09T19:36:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "105af20e7e7efd376c0532c59db6a81d8778c14b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'for-6.12' into 'master'",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-11-06T18:25:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed97629deded64c5ca21439a807047bf4cc373ad",
          "body": "The tilt data contained in the Bluetooth packets of an Intuos Pro are\nsupposed to be interpreted as signed values. Simply casting the values\nto type `char` is not guaranteed to work since it is implementation-\ndefined whether it is signed or unsigned. At least one user has noticed\nthe data being rep\n[…]\nrecke <jason.gerecke@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (49a397ad24ee)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Interpret tilt data from Intuos Pro BT as signed values",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-11-06T18:25:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4f0ee055928329a404b13f64e54b8ed7a5df91e2",
          "body": "…is set\n\nMicrosoft defines two slightly different behaviors for pens that are\nbeing used to erase. The first one, for pens that can be used while\ninverted specifies that both 'Invert' and 'Eraser' usages should be\nset while the pen is in contact and erasing. For pens that use an\neraser button though\n[…]\nrecke <jason.gerecke@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (a025b0dbd83f)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Set eraser status when either 'Eraser' or 'Invert' usage …",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-10-23T20:43:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "605d3593c0b03aed7e3c02d2fffbb1e1f6d0218c",
          "body": "Unlike EMR tools which encode type information in their tool ID, tools\nfor AES sensors are all \"generic pens\". It is inappropriate to make use\nof the wacom_intuos_get_tool_type function when dealing with these kinds\nof devices. Instead, we should only ever report BTN_TOOL_PEN or\nBTN_TOOL_RUBBER, as \n[…]\n Tissoires <bentiss@kernel.org>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (2934b12281ab)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Hardcode (non-inverted) AES pens as BTN_TOOL_PEN",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-10-11T17:07:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5010aed33fab0aa9a5dd82d611e42ce9daf4bbb7",
          "body": "The driver currently assumes that the first sequence number it will see\nis going to be 0. This is not a realiable assumption and can break if,\nfor example, the tablet has already been running for some time prior to\nthe kernel driver connecting to the device. This commit initializes the\nexpected sequ\n[…]\nAdding Support for new usages\")\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (84aecf2d251a)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Do not warn about dropped packets for first packet",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-09-11T21:28:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c739e17c29aa2594e3d9d4a6b8445e3c048bc32a",
          "body": "The current dropped packet reporting assumes that all sequence numbers\nare 16 bits in length. This results in misleading \"Dropped\" messages if\nthe hardware uses fewer bits. For example, if a tablet uses only 8 bits\nto store its sequence number, once it rolls over from 255 -> 0, the\ndriver will still\n[…]\nAdding Support for new usages\")\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (359673ea3a20)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Support sequence numbers smaller than 16-bit",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-09-11T21:28:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "295b1ee10962557d4471b7a5958b8b500aa62ca7",
          "body": "If a device has more than one touchring, we want to be sure that userspace\nis able to distinguish them. Following previous standards, the first\nabsolute ring will be reported as ABS_WHEEL and the second as ABS_THROTTLE.\nRelative rings will use REL_WHEEL_HI_RES / REL_WHEEL for the first and\nREL_HWHEE\n[…]\nrecke <jason.gerecke@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (19591e1a8a2e)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Support devices with two touchrings",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-09-11T21:28:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "201560a2ef0a23135fd7c130b7d76840e3c81ba2",
          "body": "Modern userspace (i.e. libinput) will make use of high-resolution\nscrolling if supported. Hardware does not currently set a resolution\nmultiplier needed for effective high-res scrolling, but we can still\nwrite code to support it in the future.\n\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (7ca234e3ae45)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Add preliminary support for high-resolution wheel scrolling",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-09-11T21:28:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81560dadd893687b62af038aef0fe595e7250ac1",
          "body": "If a touchring is configured to send relative events (e.g. +1 or -1 every\ntime some bit of rotational distance is covered), we should similarly\nsend relative events up to userspace. Previous non-HID tablets used\nREL_WHEEL to send this kind of information, so we opt to use this same\naxis since usersp\n[…]\nrecke <jason.gerecke@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (7525a0bd928e)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Support touchrings with relative motion",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-09-11T20:33:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1962e9be6603b201d440bd5be7cc80598afe7827",
          "body": "…ution\n\nWhen we encounter a usage mapped to ABS_X or ABS_Y which has a calculated\nresolution of 0, we want to warn the user of this before setting a default\nvalue. The previous language used the word \"usage\" but then printed out the\nvalue of a \"code\" instead. We can improve this.\n\nSigned-off-by: Jas\n[…]\nrecke <jason.gerecke@wacom.com>\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (3152301ff288)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Improve warning for tablets falling back to default resol…",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-09-11T20:33:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9856fd8b6268c9234ac1d07e29aea812cad15ae7",
          "body": "…known\n\nThe Wacom driver maps the HID_DG_TWIST usage to ABS_Z (rather than ABS_RZ)\nfor historic reasons. When the code to support twist was introduced in\ncommit 50066a042da5 (\"HID: wacom: generic: Add support for height, tilt,\nand twist usages\"), we were careful to write it in such a way that it had\n[…]\nts\")\nCc: stable@vger.kernel.org\nSigned-off-by: Jiri Kosina <jkosina@suse.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (1b8f9c1fb464)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Defer calculation of resolution until resolution_code is …",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-09-04T22:38:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a865de8d411354a611e2ef793fc1a6cb9cd22c78",
          "body": "Accidentally introduced when cleaning up code for 4.18+\n\nFixes: ce3eb879f291 (\"Clean up source code for 4.18+\")\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "Correct minor upstream differences",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-09-04T22:37:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7b524fc06cc601d770a1de40a9441a734ed6346",
          "body": "Signed-off-by: Joshua Dickens <Joshua@Joshua-Dickens.com>",
          "is_bot": false,
          "headline": "input-wacom 1.3.0",
          "author_name": "Joshua Dickens",
          "author_login": "Joshua-Dickens",
          "committed_at": "2024-07-31T16:19:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2be38e18b5dcd402d96331d7a2dfe18b83e84e2",
          "body": "Fix kernel tool ID issue for Pro Pen 3 (0x4200) and Pro Pen 3D (0x8842)",
          "is_bot": false,
          "headline": "Merge pull request #435 from Gavin-Hsia/6.11",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2024-07-25T01:03:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a5f31fff2339028b2b995940ac7f614289a207d",
          "body": "Recent eraser and pen tools are able to be distinguished\nby looking at its least significant nibble.\nThis modification applies it to wacom_intuos_get_tool_type\nfunction and reduces its code lines.\n\nSigned-off-by: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>\nSigned-off-by: Tatsunosuke Tobita <ta\n[…]\n158-2-tatsunosuke.wacom@gmail.com\nSigned-off-by: Benjamin Tissoires <bentiss@kernel.org>\n[gavin.hsia@com.com: Imported into input-wacom (9c2913n962da)]\nSigned-off-by: Gavin Hsia <gavin.hsia@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: more appropriate tool type categorization",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2024-07-25T00:57:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "85ef8aaaa90f78f36b810a10b9a4b08223e07c8b",
          "body": "The pen ID, 0x80842, was not the correct ID for wacom driver to\ntreat. The ID was corrected to 0x8842.\nAlso, 0x4200 was not the expected ID used on any Wacom device.\nTherefore, 0x4200 was removed.\n\nSigned-off-by: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>\nSigned-off-by: Tatsunosuke Tobita <ta\n[…]\n8-1-tatsunosuke.wacom@gmail.com\nSigned-off-by: Benjamin Tissoires <bentiss@kernel.org>\n[gavin.hsia@wacom.com: Imported into input-wacom (f017d696dfce)]\nSigned-off-by: Gavin Hsia <gavin.hsia@wacom.com>",
          "is_bot": false,
          "headline": "HID: wacom: Modify pen IDs",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2024-07-25T00:57:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cfa708d0ed74ab0b5d2f76372c63ff1c30dc6b2c",
          "body": "Remove support for kernels older than 4.18",
          "is_bot": false,
          "headline": "Merge pull request #430 from Pinglinux/remove_older_then_4.18",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2024-07-05T04:31:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdf6a034f768415ce381d5f715fa5b7aa1b26fae",
          "body": "Remove kernels older than 4.18 and add newer ones\n\nSigned-off-by: Ping Cheng <ping.cheng@wacom.com>",
          "is_bot": false,
          "headline": "Update workflow kernel versions",
          "author_name": "Ping Cheng",
          "author_login": null,
          "committed_at": "2024-07-03T02:57:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce3eb879f291062fe61e6b827e24dd87a3bb08d1",
          "body": "Remove code specific to kernels older than 4.18.\n\nSigned-off-by: Ping Cheng <ping.cheng@wacom.com>",
          "is_bot": false,
          "headline": "Clean up source code for 4.18+",
          "author_name": "Ping Cheng",
          "author_login": null,
          "committed_at": "2024-07-03T02:57:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3fdbd53f6933fdea812777bdbe9004547828d19f",
          "body": "Prepare support for kernels 4.18 and later. Plus, adjust and cleanup\nthe configure.am and Makefile.am files for 4.18+ kernels.\n\nSigned-off-by: Ping Cheng <ping.cheng@wacom.com>",
          "is_bot": false,
          "headline": "Remove 3.17 and move 4.5->4.18 directory",
          "author_name": "Ping Cheng",
          "author_login": null,
          "committed_at": "2024-07-03T02:57:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec3b0e89473c27a597717433fb642ff5423fd9b7",
          "body": "checkpatch throw a warning when it detects a file changed its path.\nThat's a kernel upstream concern. This project doesn't follow that\nguideline. Ignore it.\n\nSigned-off-by: Ping Cheng <ping.cheng@wacom.com>",
          "is_bot": false,
          "headline": "A file path change is not an error",
          "author_name": "Ping Cheng",
          "author_login": null,
          "committed_at": "2024-07-03T02:55:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0b6798e8df54116f4fb9216b4f1e91c707c0ff9",
          "body": "Fix / update tagged-release workflow",
          "is_bot": false,
          "headline": "Merge pull request #426 from jigpu/release-fix",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2024-06-10T16:22:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48e3b45be7e01eebb8acb7cc5664e2130c222973",
          "body": "It is preferred to use sizeof(*pointer) instead of sizeof(type)\ndue to the type of the variable can change and one needs not\nchange the former (unlike the latter).\n\nThe refactoring is mostly trivial except for \"usbtouchscreen.c\"\nfile. Here, in the \"mtouch_alloc\" and \"nexio_alloc\" functions,\nit is ne\n[…]\n2.prod.outlook.com\nSigned-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (f81d03d43965)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "Input: touchscreen - use sizeof(*pointer) instead of sizeof(type)",
          "author_name": "Erick Archer",
          "author_login": null,
          "committed_at": "2024-06-10T15:07:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b9b47d64df1f532735af916ae5170bf0295ad7c5",
          "body": "Several warnings about deprecated functionality are logged when we run\nthe tagged-release workflow. This commit updates the workflow to use\nthe recommended replacements, cleans up some whitespace issues, and\nsimplifies the release process. While we're at it, also tweak the\nauto-generated release notes to include a marked-up shortlog by default.\n\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "github: Clean up and update tagged-release workflow",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-06-10T14:21:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f22b0b949c014f2a9cf4ddf6bfb85d409d2c7b9e",
          "body": "Correct w8001 issue / re-enable warnings",
          "is_bot": false,
          "headline": "Merge pull request #427 from jigpu/w8001-import",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2024-06-07T19:02:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1151f8377581375e56c18399d18b191131e3b66",
          "body": "…stream warning\"\n\nThis reverts commit e83a9bb3e48d2d1b52ec709e60f73b9960d568e5. We have\nfixed the w8001 driver to no longer trigger these warnings.",
          "is_bot": false,
          "headline": "Revert \"github: Temporarily set -Wno-error=unused-result to bypass up…",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-06-07T18:02:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "696639cc6872c500c746553cd4c5c2bad5e54730",
          "body": "Fixes: 6c7cc1a29d1e (\"Input: wacom_w8001 - simplify device name generation\")\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>\nLink: https://lore.kernel.org/r/20240605164656.61623-1-jason.gerecke@wacom.com\nSigned-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (7ba38c2a9e1a)]\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "Input: wacom_w8001 - correct device name generation",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-06-07T18:01:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e16feac15dcfc9936b685d1116a7c541ae2505f5",
          "body": "The 'version' file is created as part of the release process and is\nsupposed to contain the version number of the tarball. The contents\nof this file become part of /sys/module/wacom/version, which we rely\non to understand what driver version users are running.\n\nRecent release (1.0.0, 1.1.0, and 1.2.\n[…]\ndiscover what version of the code is being\nbuilt. In the absence of a git tag, it falls back to using the directory\nname instead: 'input-wacom'.\n\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "github: Fix incorrect 'version' file generation",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-06-07T00:25:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cd778544460c0f14eda03187dec8771104a9e955",
          "body": "Import wacom_w8001 upstream patch",
          "is_bot": false,
          "headline": "Merge pull request #425 from Joshua-Dickens/backports",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2024-06-04T20:33:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7a678a590ed82ee56fb702ca2853bf95e481bc0",
          "body": "Replace pairs of strscpy/strlcat calls with snprintf.\n\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>\nLink: https://lore.kernel.org/r/CANRwn3SuTjdCCK4YH1ObvsC_gZuythAQ7kSHJP-CiAFw9h5Qcw@mail.gmail.com\nSigned-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>\n[Joshua.Dickens@wacom.com: Imported into input-wacom repository (6c7cc1a29d1e)]\nSigned-off-by: Joshua Dickens <Joshua.Dickens@wacom.com>",
          "is_bot": false,
          "headline": "Input: wacom_w8001 - simplify device name generation",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-06-04T02:37:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76f769e2d7cfb162761c3d16fc7a56936e2b3a1d",
          "body": "Import w8001 patch from upstream",
          "is_bot": false,
          "headline": "Merge pull request #419 from jigpu/w8001-imports",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2024-05-07T17:52:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e83a9bb3e48d2d1b52ec709e60f73b9960d568e5",
          "body": "…arning\n\nCommit a9f08ad7adb3 upstream introduces an unused-result warning. While we\nwait for a fix to be made upstream, this commit has our Github runner not\ntreat the warning as an error. This will need to be reverted after a fix\nis accepted upstream.\n\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "github: Temporarily set -Wno-error=unused-result to bypass upstream w…",
          "author_name": "Jason Gerecke",
          "author_login": "jigpu",
          "committed_at": "2024-05-02T18:07:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9dbad4457f9cfe48b57f39055498559639fb04c0",
          "body": "Follow the advice of the below link and prefer 'strscpy' in this\nsubsystem. Conversion is 1:1 because the return value is not used.\nGenerated by a coccinelle script.\n\nSigned-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>\nLink: https://lore.kernel.org/r/20220818210022.6865-1-wsa+renesas@sang-engineering.com\nSigned-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>\n[jason.gerecke@wacom.com: Imported into input-wacom (a9f08ad7adb3)\nSigned-off-by: Jason Gerecke <jason.gerecke@wacom.com>",
          "is_bot": false,
          "headline": "Input: move from strlcpy with unused retval to strscpy",
          "author_name": "Wolfram Sang",
          "author_login": null,
          "committed_at": "2024-05-02T17:37:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5c02aafbca37a1adf296cd49e03a4eba59f0d8f",
          "body": "Sync release script with xf86-input-wacom",
          "is_bot": false,
          "headline": "Merge pull request #417 from Pinglinux/sync_release_script_with_xf86",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2024-03-28T23:21:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de67c984407185ac71b241b9f011ef95b4a0e839",
          "body": "These haven't been needed in decades. Where a string may be empty use\nquotes, otherwise let's switch string comparisons to just that. And\nwhere we check for empty/nonempty use -z/-n.\n\nPorted from xf86-input-wacom\nSigned-off-by: Peter Hutterer <peter.hutterer@who-t.net>\nSigned-off-by: Ping Cheng <ping.cheng@wacom.com>",
          "is_bot": false,
          "headline": "release.sh: Drop the ancient x\"foo\" != x comparisons",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2024-03-27T04:48:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e66df5af70cffdba2015e966e99bc32f29566a5",
          "body": "No longer hooked into anything so let's not pretend we have it.\n\nPorted from xf86-input-wacom\nSigned-off-by: Peter Hutterer <peter.hutterer@who-t.net>\nSigned-off-by: Ping Cheng <ping.cheng@wacom.com>",
          "is_bot": false,
          "headline": "release.sh: drop --force and --moduleset",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2024-03-27T04:28:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac3c1b2faf5733cbe55b259abbb7a5cc7214a2e2",
          "body": "Might as well since we only ever release one module at a time with this\nscript.\n\nPorted from xf86-input-wacon\nSigned-off-by: Peter Hutterer <peter.hutterer@who-t.net>\nSigned-off-by: Ping Cheng <ping.cheng@wacom.com>",
          "is_bot": false,
          "headline": "release.sh: default to '.' if no module was given",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2024-03-27T04:28:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d03d26748738c9abf407c8e328ffe3d81becd18",
          "body": "Apparently the old way no longer works, so let's update with a\ncopy/paste from the examples.\n\nIntentional switch to use --token because that's how you should be doing\nreleases anyway - with a temporary token that can be revoked after the\nrelease is complete (and that also encodes the username).\n\nhtt\n[…]\n/en/rest/releases/releases?apiVersion=2022-11-28#create-a-release\nPorted from xf86-input-wacon\nSigned-off-by: Peter Hutterer <peter.hutterer@who-t.net>\nSigned-off-by: Ping Cheng <ping.cheng@wacom.com>",
          "is_bot": false,
          "headline": "release.sh: update to take a --token value (#340)",
          "author_name": "Ping Cheng",
          "author_login": "Pinglinux",
          "committed_at": "2024-03-27T04:28:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9cf3859988ee56a9bbaa9176cdb67f157d283b2c",
          "body": "Signed-off-by: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>",
          "is_bot": false,
          "headline": "input-wacom 1.2.0",
          "author_name": "Tatsunosuke Tobita",
          "author_login": "flying-elephant",
          "committed_at": "2024-02-29T22:54:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 24,
      "commits_last_year": 32,
      "latest_release_at": "2026-07-07T23:11:12Z",
      "latest_release_tag": "v1.7.0",
      "releases_from_tags": false,
      "days_since_last_push": 21,
      "active_weeks_last_year": 10,
      "days_since_latest_release": 21,
      "mean_days_between_releases": 193.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 37,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 65,
      "stars": 719,
      "watchers": 19,
      "fork_history": {
        "days": [
          {
            "date": "2015-08-23",
            "count": 1
          },
          {
            "date": "2015-10-14",
            "count": 1
          },
          {
            "date": "2016-05-04",
            "count": 1
          },
          {
            "date": "2017-12-30",
            "count": 1
          },
          {
            "date": "2018-01-14",
            "count": 1
          },
          {
            "date": "2018-04-03",
            "count": 1
          },
          {
            "date": "2018-04-20",
            "count": 1
          },
          {
            "date": "2018-08-30",
            "count": 1
          },
          {
            "date": "2018-09-25",
            "count": 1
          },
          {
            "date": "2018-11-11",
            "count": 1
          },
          {
            "date": "2019-04-12",
            "count": 2
          },
          {
            "date": "2019-06-16",
            "count": 1
          },
          {
            "date": "2019-09-05",
            "count": 1
          },
          {
            "date": "2019-12-10",
            "count": 1
          },
          {
            "date": "2020-01-02",
            "count": 1
          },
          {
            "date": "2020-03-19",
            "count": 1
          },
          {
            "date": "2020-04-20",
            "count": 1
          },
          {
            "date": "2020-05-01",
            "count": 1
          },
          {
            "date": "2020-05-28",
            "count": 1
          },
          {
            "date": "2020-06-14",
            "count": 1
          },
          {
            "date": "2020-07-06",
            "count": 1
          },
          {
            "date": "2020-07-31",
            "count": 1
          },
          {
            "date": "2020-08-13",
            "count": 1
          },
          {
            "date": "2020-08-28",
            "count": 1
          },
          {
            "date": "2020-09-19",
            "count": 1
          },
          {
            "date": "2021-01-07",
            "count": 1
          },
          {
            "date": "2021-02-07",
            "count": 1
          },
          {
            "date": "2021-02-19",
            "count": 1
          },
          {
            "date": "2021-04-13",
            "count": 1
          },
          {
            "date": "2021-06-12",
            "count": 1
          },
          {
            "date": "2021-07-01",
            "count": 1
          },
          {
            "date": "2021-07-22",
            "count": 1
          },
          {
            "date": "2021-08-11",
            "count": 1
          },
          {
            "date": "2021-08-18",
            "count": 1
          },
          {
            "date": "2021-08-30",
            "count": 1
          },
          {
            "date": "2021-09-26",
            "count": 1
          },
          {
            "date": "2021-10-01",
            "count": 1
          },
          {
            "date": "2021-11-16",
            "count": 1
          },
          {
            "date": "2022-01-12",
            "count": 1
          },
          {
            "date": "2022-01-17",
            "count": 1
          },
          {
            "date": "2022-03-17",
            "count": 1
          },
          {
            "date": "2022-05-20",
            "count": 1
          },
          {
            "date": "2023-06-12",
            "count": 1
          },
          {
            "date": "2023-07-14",
            "count": 1
          },
          {
            "date": "2023-07-21",
            "count": 1
          },
          {
            "date": "2023-08-03",
            "count": 1
          },
          {
            "date": "2023-08-12",
            "count": 1
          },
          {
            "date": "2023-11-29",
            "count": 1
          },
          {
            "date": "2023-12-10",
            "count": 1
          },
          {
            "date": "2024-01-08",
            "count": 1
          },
          {
            "date": "2024-03-31",
            "count": 1
          },
          {
            "date": "2024-05-03",
            "count": 1
          },
          {
            "date": "2024-06-25",
            "count": 1
          },
          {
            "date": "2024-11-18",
            "count": 1
          },
          {
            "date": "2025-02-06",
            "count": 1
          },
          {
            "date": "2025-06-04",
            "count": 1
          },
          {
            "date": "2025-06-05",
            "count": 1
          },
          {
            "date": "2025-06-08",
            "count": 1
          },
          {
            "date": "2025-11-09",
            "count": 1
          },
          {
            "date": "2026-05-17",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 63,
        "total_forks": 65
      },
      "star_history": null,
      "open_issues_and_prs": 13
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 164276,
      "source_files_sampled": 8,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [],
      "advisories": {
        "error": "No resolved dependencies to assess",
        "scope": "repository_graph",
        "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": null,
        "source": "github-sbom",
        "packages": [],
        "collected": true,
        "truncated": false,
        "total_count": 0,
        "direct_count": 0,
        "indirect_count": 0
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 77,
        "open_issues": 13,
        "closed_ratio": 0.967,
        "closed_issues": 378,
        "closed_unmerged_prs": 40
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "jigpu",
          "commits": 641,
          "avatar_url": "https://avatars.githubusercontent.com/u/600734?v=4"
        },
        {
          "type": "User",
          "login": "skomra",
          "commits": 162,
          "avatar_url": "https://avatars.githubusercontent.com/u/403730?v=4"
        },
        {
          "type": "User",
          "login": "Pinglinux",
          "commits": 158,
          "avatar_url": "https://avatars.githubusercontent.com/u/3498657?v=4"
        },
        {
          "type": "User",
          "login": "bentiss",
          "commits": 85,
          "avatar_url": "https://avatars.githubusercontent.com/u/2705518?v=4"
        },
        {
          "type": "User",
          "login": "Joshua-Dickens",
          "commits": 43,
          "avatar_url": "https://avatars.githubusercontent.com/u/10950944?v=4"
        },
        {
          "type": "User",
          "login": "flying-elephant",
          "commits": 21,
          "avatar_url": "https://avatars.githubusercontent.com/u/18390242?v=4"
        },
        {
          "type": "User",
          "login": "whot",
          "commits": 14,
          "avatar_url": "https://avatars.githubusercontent.com/u/1487352?v=4"
        },
        {
          "type": "User",
          "login": "cbagwell",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/877641?v=4"
        },
        {
          "type": "User",
          "login": "qasim-ijaz",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/153782615?v=4"
        },
        {
          "type": "User",
          "login": "GustavoARSilva",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/245005?v=4"
        }
      ],
      "contributors_sampled": 40,
      "top_contributor_share": 0.535
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": false,
      "ci_workflows": [
        "checkpatch.yml",
        "main.yml",
        "tagged-release.yml"
      ],
      "has_docs_dir": false,
      "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": 5,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 8,
            "reason": "Found 6/7 approved changesets -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 4 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "21 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 8,
            "reason": "5 out of the last 5 releases have a total of 5 signed artifacts.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "2d14d8d0143d71b9cdfe6931d88b5ada10378f16",
        "ran_at": "2026-07-29T07:54:44Z",
        "aggregate_score": 6.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": "2026-07-07T23:11:15Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-07T22:53:48Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 396,
          "created_at": "2023-10-18T15:02:36Z",
          "last_comment_at": "2024-06-09T06:46:42Z",
          "last_comment_author": "jinek"
        },
        {
          "number": 409,
          "created_at": "2024-01-24T22:35:07Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 416,
          "created_at": "2024-03-26T09:17:04Z",
          "last_comment_at": "2024-05-17T17:52:00Z",
          "last_comment_author": "Pinglinux"
        },
        {
          "number": 423,
          "created_at": "2024-06-01T15:11:53Z",
          "last_comment_at": "2026-05-15T06:12:53Z",
          "last_comment_author": "tdallison"
        },
        {
          "number": 428,
          "created_at": "2024-06-09T07:01:17Z",
          "last_comment_at": "2025-12-14T12:30:25Z",
          "last_comment_author": "smellymoo"
        },
        {
          "number": 447,
          "created_at": "2024-11-02T19:25:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 471,
          "created_at": "2025-10-25T13:54:32Z",
          "last_comment_at": "2026-05-08T19:28:09Z",
          "last_comment_author": "Pinglinux"
        },
        {
          "number": 485,
          "created_at": "2025-12-13T17:40:37Z",
          "last_comment_at": "2026-05-08T18:11:02Z",
          "last_comment_author": "Pinglinux"
        },
        {
          "number": 492,
          "created_at": "2026-01-31T11:26:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 506,
          "created_at": "2026-05-04T03:59:13Z",
          "last_comment_at": "2026-06-14T23:20:43Z",
          "last_comment_author": "Pinglinux"
        },
        {
          "number": 507,
          "created_at": "2026-05-07T08:49:01Z",
          "last_comment_at": "2026-05-11T19:37:56Z",
          "last_comment_author": "Pinglinux"
        },
        {
          "number": 508,
          "created_at": "2026-05-09T18:04:54Z",
          "last_comment_at": "2026-07-28T14:33:59Z",
          "last_comment_author": "MassiveMarmot"
        },
        {
          "number": 511,
          "created_at": "2026-06-05T11:57:37Z",
          "last_comment_at": "2026-06-14T22:04:31Z",
          "last_comment_author": "Pinglinux"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/linuxwacom/input-wacom",
    "host": "github.com",
    "name": "input-wacom",
    "owner": "linuxwacom"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 61,
      "inputs": {
        "security": 63,
        "vitality": 69,
        "community": 60,
        "governance": 62,
        "engineering": 50
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 69,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 59,
            "inputs": {
              "commits_last_year": 32,
              "human_commit_share": 1,
              "days_since_last_push": 21,
              "active_weeks_last_year": 10
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 21 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 21
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "10/52 weeks with commits",
                "points": 6.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 10
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "32 commits in the last year",
                "points": 13.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 32
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "21 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "releases_count": 24,
              "latest_release_tag": "v1.7.0",
              "releases_from_tags": false,
              "days_since_latest_release": 21,
              "mean_days_between_releases": 193.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "24 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 24
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 21 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 21
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~193.8 days",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 193.8
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "5 out of the last 5 releases have a total of 5 signed artifacts.",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 21,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 21 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 21
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 60,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "forks": 65,
              "stars": 719,
              "watchers": 19,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "719 stars",
                "points": 46.3,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 719
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "65 forks",
                "points": 15.1,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 65
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "19 watchers",
                "points": 7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "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": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (GPL-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "GPL-2.0"
                    }
                  }
                ],
                "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": "moderate",
        "name": "Sustainability & Governance",
        "value": 62,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 43,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 40,
              "top_contributor_share": 0.535
            },
            "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 54% of commits",
                "points": 10.5,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 54
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "40 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 40
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 4 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "merged_prs": 77,
              "open_issues": 13,
              "closed_issues": 378,
              "issue_closed_ratio": 0.967,
              "closed_unmerged_prs": 40
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "97% of issues closed",
                "points": 45.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "77/117 decided PRs merged",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 77,
                      "decided": 117
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 6/7 approved changesets -- score normalized to 8",
                "points": 12,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "followers": 193,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "linuxwacom",
              "public_repos": 7,
              "account_age_days": 3967
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "193 followers of linuxwacom",
                "points": 16.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 193,
                      "login": "linuxwacom"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "7 public repos, account ~10 yr old",
                "points": 18.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 7
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 10
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 50,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 44,
            "inputs": {
              "has_ci": true,
              "has_tests": false,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 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": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "topics": [
                "wacom",
                "drivers",
                "kernel",
                "kernel-module",
                "kernel-driver",
                "backports",
                "tablet"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "7 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "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": "moderate",
        "name": "Security",
        "value": 63,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 63,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 6.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 is not maximal on development and all release branches",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 6/7 approved changesets -- score normalized to 8",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 4 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "21 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "5 out of the last 5 releases have a total of 5 signed artifacts.",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "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": 6
            },
            "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": 34,
        "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.9,
              "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": "90 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 90,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "critical",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 11,
            "inputs": {
              "has_nix": false,
              "has_tests": false,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "primary_language": "C",
              "largest_source_bytes": 164276,
              "source_files_sampled": 8,
              "oversized_source_files": 2
            },
            "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": "2/8 source files over 60KB",
                "points": 41.2,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 8,
                      "oversized": 2
                    }
                  }
                ],
                "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"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-29T07:55:10.770863Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/l/linuxwacom/input-wacom.svg",
  "full_name": "linuxwacom/input-wacom",
  "license_state": "standard",
  "license_spdx": "GPL-2.0"
}

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.