Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-24 14:17 UTC

eschizoid / kpipe

Composable Kafka consumer library for building modular, testable JVM data pipelines.

JavaApache-2.0★ 57 stars⑂ 7 forkssince Apr 2025View on GitHub ↗

eschizoid/kpipe holds a health index of 62 out of 100, placing it in the Moderate band. It scores highest on Vitality (87/100) and lowest on Community & Adoption (43/100). It was last updated today. A single contributor accounts for most of its recent work.

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

62
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

Mariano GonzalezPersonal account
89 followers142 public repossince Jul 2014

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

Metrics by category

Vitality

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

87Excellent · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
15.2/36Commit cadence — 22/52 weeks with commits
18/18Commit volume — 256 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year256
human_commit_share0.94
days_since_last_push0
active_weeks_last_year22

Release discipline

100Excellent
How it's scored
27/27Ships releases — 41 releases published
36/36Release recency — latest release 4 days ago
27/27Release cadence — a release every ~6.7 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count41
latest_release_tagv1.18.0
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases6.7
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

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

43At risk · 18% of overall
How it's scored
28.4/60Stars — 57 stars
6.5/25Forks — 7 forks
1.7/15Watchers — 3 watchers
Inputs used
forks7
stars57
watchers3
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-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?

50Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.2/22.5Commit distribution — top contributor authored 99% of commits
5.4/13.5Contributor breadth — 4 contributors
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Inputs used
bus_factor1
contributors_sampled4
top_contributor_share0.99
How it's scored
45.2/46.8Issue resolution — 97% of issues closed
36.6/38.3PR acceptance — 237/248 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/29 approved changesets -- score normalized to 0
Inputs used
merged_prs237
open_issues1
closed_issues29
issue_closed_ratio0.967
closed_unmerged_prs11
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
14.1/25Owner reach — 89 followers of eschizoid
25/25Track record — 142 public repos, account ~12 yr old
Inputs used
followers89
owner_typeUser
is_verified
owner_logineschizoid
public_repos142
account_age_days4,391
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.

Engineering Quality

Are baseline engineering and documentation practices in place?

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

Documentation

85Excellent
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
10/10Topics — 7 topics
10/10Wiki
Inputs used
topicsapache-kafka, data-pipelines, event-driven, functional-programming, java, kafka, stream-processing
has_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

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

51Moderate · 16% of overall
How it's scored
6.8/7.5Binary-Artifacts — binaries present in source code
0.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.2/2.5CI-Tests — 29 out of 30 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/29 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
7.5/7.5Maintained — 30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
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
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5.1
Excluded from scoring (no data or not applicable): signed_releases. Remaining weights renormalized.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score.

68Moderate · 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 — 94 of 94 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
How it's scored
18/18One-command bootstrap — justfile
22/22Automated tests
0/11Lint / format config
11/11Static type checking — Java (statically typed)
10/10Reproducible environment — Dockerfile
4/10Demonstrated agent practice — 2 of the last 100 commits agent-authored or agent-credited
8/8Automated maintenance — 6 of the last 100 commits are automated dependency updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfiles
has_dockerfileyes
typed_languageyes
bootstrap_filesjustfile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0.02
toolchain_manifestsbenchmarks/build.gradle.kts, build.gradle.kts, examples/avro/build.gradle.kts, examples/build.gradle.kts, examples/bytes/build.gradle.kts, examples/circuit-breaker/build.gradle.kts, examples/custom-format/build.gradle.kts, examples/demo/build.gradle.kts, examples/json/build.gradle.kts, examples/protobuf-schema-registry/build.gradle.kts, examples/protobuf/build.gradle.kts, examples/schema-registry/build.gradle.kts, examples/tracing/build.gradle.kts, lib/build.gradle.kts, lib/kpipe-api/build.gradle.kts, lib/kpipe-bom/build.gradle.kts, lib/kpipe-consumer/build.gradle.kts, lib/kpipe-core/build.gradle.kts, lib/kpipe-format-avro/build.gradle.kts, lib/kpipe-format-json/build.gradle.kts, lib/kpipe-format-protobuf-confluent/build.gradle.kts, lib/kpipe-format-protobuf/build.gradle.kts, lib/kpipe-metrics-otel/build.gradle.kts, lib/kpipe-metrics/build.gradle.kts, lib/kpipe-producer/build.gradle.kts, lib/kpipe-schema-registry-confluent/build.gradle.kts, lib/kpipe-test/build.gradle.kts, lib/kpipe-tracing-otel/build.gradle.kts
dependency_bot_commit_share0.06
How it's scored
45/45Type-checkable code — Java (statically typed)
54.8/55Manageable file sizes — 1/293 source files over 60KB
Inputs used
primary_languageJava
largest_source_bytes66,676
source_files_sampled293
oversized_source_files1
How it's scored
40/40API schema (OpenAPI/GraphQL/proto) — lib/kpipe-consumer/src/test/resources/protobuf/customer.proto
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_fileslib/kpipe-consumer/src/test/resources/protobuf/customer.proto

Key facts

57GitHub stars
4contributors
256commits, last 12 months
0days since last push
41releases
1bus factor
1open issues
Mavenpackage ecosystems

Data collection warnings

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

More detail

Star and fork history 0 ★ / 7 ⇿
0Stars
7Forks
19Releases

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.

1234567712025-042025-102026-04
Major 1Minor 7Patch 11
OpenSSF Scorecard 5.1 / 10
5.1aggregate

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-24 14:17 UTC

9Binary-Artifactsbinaries present in source code
1Branch-Protectionbranch protection is not maximal on development and all release branches
9CI-Tests29 out of 30 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/29 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow 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
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
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": [
        "apache-kafka",
        "data-pipelines",
        "event-driven",
        "functional-programming",
        "java",
        "kafka",
        "stream-processing"
      ],
      "is_fork": false,
      "size_kb": 7317,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Java": 1922624,
        "Just": 2380,
        "Shell": 3958,
        "Dockerfile": 668
      },
      "pushed_at": "2026-07-24T13:14:46Z",
      "created_at": "2025-04-10T04:57:24Z",
      "owner_type": "User",
      "updated_at": "2026-07-24T13:16:43Z",
      "description": "Composable Kafka consumer library for building modular, testable JVM data pipelines.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Java",
      "significant_languages": [
        "Java"
      ]
    },
    "owner": {
      "blog": "https://mariano-gonzalez.com",
      "name": "Mariano Gonzalez",
      "type": "User",
      "login": "eschizoid",
      "company": null,
      "location": "Chicago, Illinois",
      "followers": 89,
      "avatar_url": "https://avatars.githubusercontent.com/u/8173837?v=4",
      "created_at": "2014-07-15T21:47:13Z",
      "is_verified": null,
      "public_repos": 142,
      "account_age_days": 4391
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.18.0",
          "kind": "minor",
          "published_at": "2026-07-20T04:20:58Z"
        },
        {
          "tag": "v1.17.0",
          "kind": "minor",
          "published_at": "2026-07-12T17:24:22Z"
        },
        {
          "tag": "v1.16.3",
          "kind": "patch",
          "published_at": "2026-06-20T01:45:58Z"
        },
        {
          "tag": "v1.16.2",
          "kind": "patch",
          "published_at": "2026-06-19T23:17:37Z"
        },
        {
          "tag": "v1.16.1",
          "kind": "patch",
          "published_at": "2026-06-18T18:16:52Z"
        },
        {
          "tag": "v1.16.0",
          "kind": "minor",
          "published_at": "2026-06-08T02:14:08Z"
        },
        {
          "tag": "v1.15.1",
          "kind": "patch",
          "published_at": "2026-06-02T02:58:52Z"
        },
        {
          "tag": "v1.15.0",
          "kind": "minor",
          "published_at": "2026-05-29T18:45:29Z"
        },
        {
          "tag": "v1.14.1",
          "kind": "patch",
          "published_at": "2026-05-26T22:10:27Z"
        },
        {
          "tag": "v1.14.0",
          "kind": "minor",
          "published_at": "2026-05-20T17:06:22Z"
        },
        {
          "tag": "v1.13.0",
          "kind": "minor",
          "published_at": "2026-05-16T13:59:57Z"
        },
        {
          "tag": "v1.12.0",
          "kind": "minor",
          "published_at": "2026-05-15T21:17:24Z"
        },
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2026-05-09T17:39:31Z"
        },
        {
          "tag": "v1.10.5",
          "kind": "patch",
          "published_at": "2026-05-08T21:22:14Z"
        },
        {
          "tag": "v1.10.4",
          "kind": "patch",
          "published_at": "2026-05-07T19:11:35Z"
        },
        {
          "tag": "v1.10.2",
          "kind": "patch",
          "published_at": "2026-05-05T12:34:36Z"
        },
        {
          "tag": "v1.10.1",
          "kind": "patch",
          "published_at": "2026-05-04T22:39:53Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2026-05-03T15:38:23Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2026-05-03T00:04:24Z"
        },
        {
          "tag": "v1.8.4",
          "kind": "patch",
          "published_at": "2026-04-18T10:49:40Z"
        },
        {
          "tag": "v1.8.3",
          "kind": "patch",
          "published_at": "2026-04-16T04:56:08Z"
        },
        {
          "tag": "v1.8.2",
          "kind": "patch",
          "published_at": "2026-04-12T15:00:25Z"
        },
        {
          "tag": "v1.8.1",
          "kind": "patch",
          "published_at": "2026-04-12T14:07:15Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2026-04-12T12:39:28Z"
        },
        {
          "tag": "v1.6.1",
          "kind": "patch",
          "published_at": "2026-04-10T09:14:16Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-04-08T02:44:26Z"
        },
        {
          "tag": "v1.5.1",
          "kind": "patch",
          "published_at": "2026-04-01T02:29:44Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-03-31T23:59:22Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-03-29T22:49:40Z"
        },
        {
          "tag": "v1.3.3",
          "kind": "patch",
          "published_at": "2026-03-29T20:41:56Z"
        },
        {
          "tag": "v1.3.2",
          "kind": "patch",
          "published_at": "2026-03-29T20:05:30Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2026-03-29T09:39:53Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2026-03-27T18:09:22Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-03-27T17:19:54Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-03-22T10:13:55Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-03-14T15:07:42Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-03-09T01:21:44Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-03-07T17:06:21Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2025-07-28T17:56:58Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2025-04-22T18:36:24Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2025-04-19T23:22:13Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "f090ec6365d334f22554b39f169cd3faab1fd4ac",
          "body": "…he code (#282)",
          "is_bot": false,
          "headline": "docs(readme): independent-audit corrections — the story now matches t…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-24T13:14:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37d45d39f5aad40573dc428bdcea02ee33bac4f2",
          "body": "…#281)\n\n* docs(readme): strip the rhetorical AI-isms from both READMEs\n\nA prose pass over README.md and benchmarks/README.md removing the tics that crept in\nwith the recent benchmark-section rewrites: negative-parallelism punch lines ('a\nthreading-model verdict, not a tuning gap', 'verified, not ass\n[…]\n-test for their own pipelines, with an anchor link to the Testing section\n\nWhole-file audit found the rest already clean: no AI-vocabulary hits, all internal\nanchors resolve, middle sections accurate.",
          "is_bot": false,
          "headline": "docs(readme): humanize both READMEs + story-correctness second pass (…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-24T12:43:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "226de18d3ab3fabfc2fe6871cea26eaeda5259bf",
          "body": "…ose (#280)\n\nThe sub-ms caveat attributed the local-box deficit to dispatcher lock contention and\npromised a striped-lock experiment. That experiment ran: the lock is gone (v2, CHM +\nper-queue monitors, +122% in the isolated dispatch bench) and the broker-level sub-ms\ncell measured flat (0.86x vs CP\n[…]\nY) - the budget there is fetch + deserialize + offset\ntracking, not dispatch. Both READMEs now state what was measured and link the A/B record\ninstead of promising an experiment that already happened.",
          "is_bot": false,
          "headline": "docs(readme): reflect the v2 dispatcher in the KEY_ORDERED metrics pr…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-22T22:58:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "df01f9fc31a7df8be93301efe76520b4ab5a3c5a",
          "body": "…-bound, not end-to-end (#279)\n\nRe-ran kpipeKeyOrdered + confluentKey against a live broker at 1ms/fork=5 on merged main\nto check whether the micro-bench +112%/+122% translates. It does not: KEY_ORDERED 52,216\nvs the v1 reference 52,949 (flat), ratio vs CPC KEY 0.83x->0.86x (within noise; the CPC\nca\n[…]\n workloads (and makes the dispatcher scale up with cores rather than down),\nbut the README's sub-ms KEY_ORDERED caveat stays as written. Prediction made, measured,\nrefuted — recorded rather than spun.",
          "is_bot": false,
          "headline": "docs(bench): record the v2 dispatcher broker-verify — win is dispatch…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-22T09:22:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7f9cdecc769bfa18b9d137013fe14b949b10bbdb",
          "body": "…122% at high key cardinality (#278)\n\n* perf(consumer): KeyOrderedDispatcher v2 — replace the global lock with CHM + per-queue monitors\n\nThe single ReentrantLock serialized every worker dequeue against every dispatch;\nKeyOrderedDispatchBenchmark measured KEY_ORDERED flat at ~380k ops/s regardless of\n[…]\nhing baseline), tripping the old guard. All outcomes were ACCEPTABLE (zero\nFORBIDDEN); this was a timing trip, not a correctness failure. New guard keeps ~1.5x the\nnew baseline plus contention margin.",
          "is_bot": false,
          "headline": "perf(consumer): KeyOrderedDispatcher v2 — CHM + per-queue monitors, +…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-22T04:25:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a1d55afaa9a1aa80478628ad64cec2b1c2d3678",
          "body": "… + README refresh (#277)\n\n* bench: first local quiesced-box reference capture (fork=5, full sweep + latency modes)\n\n20.4h overnight run on a dedicated box per METHODOLOGY's publishing runbook: 7 parallel\narms x full workMicros sweep (0-100ms) + the first full latency-mode sweep, fork=5, gc\nprofiler\n[…]\nED sub-ms caveat stated plainly\n- raw artifact: results/2026-07-20-overnight.json (fork=5 JSON, 1.9 MB)\n\n* bench(snapshot): review tweak — cite reactor's surviving-fork drain as ~119s (JSON-derivable)",
          "is_bot": false,
          "headline": "bench: 2026-07-21 local reference capture — full-sweep fork=5 numbers…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-21T17:44:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "24f4bf50e791515f19a81473a0f1f32cf992f8c3",
          "body": "… step 2) (#276)",
          "is_bot": false,
          "headline": "docs(readme): bump install snippets to 1.18.0 (post-release checklist…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-20T20:36:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27133d9df003895ae9c2b9287b4ca67df129c418",
          "body": null,
          "is_bot": true,
          "headline": "deps(deps): bump the gradle-minor-patch group with 3 updates (#275)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-20T19:17:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67e0fb4e72b438ae00d31fe5cf35a46e9e60e073",
          "body": "…-lens audit (#274)\n\n* fix: pre-release hardening — verified findings from the adversarial 4-lens audit\n\nEvery fix below is a hand-verified finding from the pre-1.18 hard audit\n(claims that did not survive verification were declined and recorded).\n\n1. Builder Properties defensive clone (KPipeConsume\n[…]\nprobe-rejection log now states the\npaused-until-restart consequence for non-shutdown rejections; the sendToDlq\njavadoc prose moved above the tag block.\n\nFormats + api + consumer targeted suites green.",
          "is_bot": false,
          "headline": "fix: pre-release hardening — verified findings from the adversarial 4…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-18T15:19:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "81f9d0d3f0182500d666ab57393a33acd0b55154",
          "body": "… (#273)\n\n\"Pending\" overloaded two different concepts in the consumer: the dispatcher's\ncount of records actively running or queued in a worker (what drain waits on),\nand the offset-side \"pending\" (PendingOffsetSet windows, PartitionState.\npendingCount, CommitCoordinator.pendingCount — offsets/commi\n[…]\ncher is a package-private sealed interface).\nDispatcher/Watermark suites green; the two Testcontainers failures in the full\nlocal run are ContainerLaunchException (local Docker exhaustion), unrelated.",
          "is_bot": false,
          "headline": "refactor(consumer): rename Dispatcher.pendingCount() to activeCount()…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-18T14:32:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c920c5f19e0c262d8568933bf10a1b8682b734b6",
          "body": "…ojects block (#272)",
          "is_bot": false,
          "headline": "build: hoist duplicated java/toolchain/test config into the lib subpr…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-18T14:32:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae17fb20415216da7bb64bfa8735799f7ba9cf76",
          "body": "…m-format examples (#271)\n\n* test(examples): Docker-free integration tests for the bytes and custom-format examples\n\n* test(examples): pin App.hexPreview directly instead of a drifting copy\n\nReview follow-up: the bytes test replicated the app's private hexPreview and\npinned literals against its own \n[…]\nsame pattern as\nexamples/protobuf's buildCustomerDescriptor) and call it from the test, so the\nhardcoded literals now pin the app's actual implementation. Deleted the copy.\n:examples:bytes:test green.",
          "is_bot": false,
          "headline": "test(examples): Docker-free integration tests for the bytes and custo…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-18T14:32:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a10ba94a98f3f2f1a0c7f4c4576ba9703596226",
          "body": "… messages, varint-parse extraction (#270)\n\nPass-3 sweep findings, hand-verified.\n\n1. KafkaConsumerConfig: the five Kafka property keys were repeated literals\n   across the factory, transformers, and builder; the deserializer default was\n   a hand-typed FQCN string. Named the keys once and derived t\n[…]\napi + kpipe-format-protobuf suites green (the one\nMultiBuilderBatchIntegrationTest failure in the first run was a Testcontainers\ntopic-metadata timing flake — passes on rerun, unrelated to this diff).",
          "is_bot": false,
          "headline": "refactor: surface polish — config constants + fail-fast, MultiBuilder…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T23:28:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fbdc5ce4ec68441736e8261e51d3f885616fb38f",
          "body": "…fast validations (#269)\n\nPass-3 sweep findings, hand-verified.\n\n1. The consumer's metric-map keys were declared THREE times — private literals\n   in KPipeConsumer (11 keys, plus \"inFlight\" as a bare literal at the\n   getMetrics call site), ConsumerMetricsReporter (6), and TestKitMetrics (4).\n   A r\n[…]\nfaults.POLL_TIMEOUT — NOT AppConfig's\n   demo-scaffolding constant, preserving the deliberate severing of builder\n   defaults from AppConfig.\n\nkpipe-metrics + kpipe-consumer + kpipe-test suites green.",
          "is_bot": false,
          "headline": "refactor(metrics,consumer): shared ConsumerMetricKeys + builder fail-…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T23:28:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "410862756f857faae798738ebba93589030bc29b",
          "body": "…(#268)\n\nInvestigation (11 consecutive runs, 2026-07-17): the jcstress step runs a\nrock-steady ~28-30 minutes, all green — it is NOT wedging; the baseline grew\nas the campaign added suites (now ~19 jcstress classes, 15 in kpipe-consumer).\nThe step comment still claimed \"a few minutes\" — stale since \n[…]\nls the job in 45 minutes instead of burning the 360-minute\n  job default. It is a guard, not a budget — documented as such.\n\nKeeps jcstress PR-gating (per the standing decision — no nightly demotion).",
          "is_bot": false,
          "headline": "ci: honest jcstress baseline comment + 45-minute wedge-guard timeout …",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T23:05:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "04ae9c888adacb9a64b072d2a85749273ce5c27a",
          "body": "…ecord and batch paths (#267)\n\nThe durable-terminal-state rule — a failed record's offset advances only when\nthe record is DLQ-parked (send ok) or explicitly opted into log-and-advance\n(no DLQ), and a failed send leaves it pending — is implemented twice: in\nhandleProcessingError (per-record) and the\n[…]\nfocused tests (DlqSendFailureTest,\nProcessingModeSinkDlqMatrixTest, KPipeDlqTest): those pin individual\nbehaviors; this table pins the cross-path symmetry in one visible place.\n\nAll Dlq* suites green.",
          "is_bot": false,
          "headline": "test(consumer): DLQ terminal-state lockstep contract across the per-r…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T22:47:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7cbbcd2cc0e85912617845361db53db88c94240e",
          "body": "… varint-overflow test (#266)",
          "is_bot": false,
          "headline": "chore: pass-2 polish — test-kit dedup, catalog hygiene, doc accuracy,…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T15:29:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08280edb40aab766d03bea68373c32d15eb2944a",
          "body": "All 7 dependency examples (Gradle Kotlin/Groovy, Maven, BOM, tracing-otel,\nschema-registry-confluent, the SBT note) pinned 1.15.0 — two releases behind\nthe latest v1.17.0 tag. Users copy-pasting got a stale line missing the\noffset-tracking and robustness fixes.",
          "is_bot": false,
          "headline": "docs(readme): bump install snippets from 1.15.0 to 1.17.0 (#265)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T15:21:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c255af2fb56a1dede73b239dc507e1a58d29756",
          "body": "…ilently dropped them (#264)\n\nDefaultStream carries onFiltered/onFailed/peekResult and DefaultSink\ndispatched them, but DefaultBatchSink.buildPipeline() built its pipeline with\nNO observer wiring — `.onFailed(x).toBatch(...)` silently dropped x. Same\nsilent-drop class as the tracer/circuit-breaker d\n[…]\nTests: StreamResultObserversTest gains a batch section — peekResult fires for\nall three outcomes and onFiltered/onFailed dispatch through the toBatch()\npipeline (regression guard for the silent drop).",
          "is_bot": false,
          "headline": "fix(api): wire result observers into the batch pipeline — toBatch() s…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T15:21:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "da188ee1cb4a6193b56b6cb208f041cd5d296760",
          "body": "…note avro static-fetch footgun (#263)",
          "is_bot": false,
          "headline": "chore(examples): dogfood CapturingSink, drop DemoConfig dead fields, …",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T14:48:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "610f7a0cd57c02d12fcfa348abb67b0564f28369",
          "body": "…an-scope CAS, ServiceLoader determinism (#262)\n\n* fix(consumer/formats/tracing): small robustness bundle — Sink single-shot, close() log, span-scope CAS, ServiceLoader determinism\n\n- DefaultSink / DefaultBatchSink: add an AtomicBoolean started guard so a second\n  start() throws IllegalStateExceptio\n[…]\n undefined behavior', but the guard now makes it a defined\nIllegalStateException throw. Tighten the interface doc + add @throws so the\ncontract matches the implementation (flagged by 3 review lenses).",
          "is_bot": false,
          "headline": "fix: robustness bundle — Sink single-shot guard, close() WARN log, sp…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T14:48:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "58b5250d303b105e82b01f2a610eac6b39be75a6",
          "body": "…fecycle + metrics-observer (#261)\n\n* refactor(consumer): split ConsumerHealthController.Hook into pause-lifecycle + metrics-observer\n\nSplit the single ConsumerHealthController.Hook interface (7 methods mixing\ntwo concerns) into two focused interfaces:\n\n- PauseLifecycleHook: onPause/onResume — the p\n[…]\nd independently. This exercises (and\n  realizes) the exact testability payoff that motivated the split: a pause-only\n  test no longer has to stub the five metric callbacks.\n\nkpipe-consumer:test green.",
          "is_bot": false,
          "headline": "refactor(consumer): split ConsumerHealthController.Hook into pause-li…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T14:48:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4290ca6203ffad84ba4a4591b73a298dd34b112b",
          "body": "…peMetricsReporter (#260)\n\n`KPipeMetricsReporter` declared `default void start() {}` / `stop() {}`, but\nnothing in KPipe ever calls them and no implementation overrides them — the\nconsumer drives `reportMetrics()` on a periodic daemon thread it owns\n(KPipeConsumerBuilder), so the reporter has no lif\n[…]\nhod — and the Javadoc states plainly that KPipe does not\ncall any lifecycle hook.\n\nVerified: no `reporter.start()/stop()` call site anywhere (grep); kpipe-metrics\ntests + kpipe-consumer compile green.",
          "is_bot": false,
          "headline": "refactor(metrics): drop the decorative start()/stop() no-ops from KPi…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T14:31:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c092083213897f79f08ab0ea11f161de805a896c",
          "body": "…re-envelope parse (#259)\n\nAvroFormat and ProtobufFormat each hand-rolled the identical Confluent\nwire-envelope prefix parse: a `0x00` magic-byte check and a byte-identical\n4-byte big-endian schema-id read (`((data[1]&0xff)<<24)|...`), plus their own\n`CONFLUENT_MAGIC`/length constants. Two copies of\n[…]\nbig-endian read incl. high-bit/0xFFFFFFFF,\nmagic mismatch, too-short). Full avro + protobuf + protobuf-confluent (the\ngold-standard KafkaProtobufSerializer wire-compat round-trip) + core suites\ngreen.",
          "is_bot": false,
          "headline": "refactor(core): extract ConfluentEnvelope, dedup the Avro+Protobuf wi…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T14:04:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "52577810324ec0e38ca60d66c366d8250d2fc7ea",
          "body": "…chema-Registry path (#258)\n\nThe headline Protobuf + Confluent Schema Registry example shipped with zero\ntest. Add a deterministic, Docker-free end-to-end test of the consumer decode\npath: a Confluent-format wire record (magic 0x00 + 4-byte BE schema id +\nsingle-message-index shorthand + a DynamicMe\n[…]\ne app has -confluent runtimeOnly; withRegistry throws at construction if no\ncompiler is on the path).\n\nVerified: :examples:protobuf-schema-registry:test green (8x stable reruns), no\njava.lang.reflect.",
          "is_bot": false,
          "headline": "test(examples): add Docker-free integration test for the Protobuf + S…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T04:33:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "20538f40246d0328ccdef2eaecf60a1118d4bc2b",
          "body": "…way map; small nits (#257)\n\n- RegistryEntry.getMetrics: `(timeNs / count) / 1_000_000.0` integer-divided\n  timeNs/count FIRST, dropping sub-millisecond precision in the reported\n  average. Compute `timeNs / (count * 1_000_000.0)` in one step. Also return\n  an immutable `Map.of(...)` instead of allo\n[…]\ntatic`\nis correct; Avro/Protobuf are instance methods because they need the\nschema/descriptor. The asymmetry reflects a real difference, not drift.)\n\nVerified: core + producer + api test suites green.",
          "is_bot": false,
          "headline": "fix(core): correct RegistryEntry average-time precision + drop throwa…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T04:33:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "656eb21553fe25708434c37de2b0461e85ffa4d3",
          "body": "…RestartHarness (#256)\n\nTestStream (live drive) and CrashRestartHarness (crash/restart) hand-rolled\nbyte-identical quiescence logic: the same 4 metric-key constants\n(messagesReceived/Processed/Errors/inFlight), the same accountedFor formula,\nand a near-identical quiescent() check (TestStream on the \n[…]\neadline loop.\nOne source of truth, unit-testable in isolation. CLOSE_AGE_CAP stays on\nTestStream — it's a batch-policy age cap, not a metrics concern.\n\nBehavior-preserving: :lib:kpipe-test:test green.",
          "is_bot": false,
          "headline": "refactor(test): extract shared TestKitMetrics from TestStream + Crash…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T04:33:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "312c78aa8f89aec3be574b9f000cb3c5ccbb4d98",
          "body": "* refactor(consumer): extract OffsetLedger from KafkaOffsetManager\n\nKafkaOffsetManager mixed two concerns: the consumer-offset lifecycle\n(state machine, scheduler, commit I/O, rebalance) and the per-partition\noffset bookkeeping (pending windows, highest-processed marks, the interned\nTopicPartition c\n[…]\n(was a mutable HashMap leaked into the record).\n- Add coverage for the previously-untested statistics() branch: the average\n  field and the empty-ledger zeroed snapshot (no-processed -> 0.0, not NaN).",
          "is_bot": false,
          "headline": "refactor(consumer): extract OffsetLedger from KafkaOffsetManager (#255)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T03:40:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "935a750e0187d334f2f1e25119852ac904daf3df",
          "body": "…467 markdown dialect (#254)\n\nThe repo standardized on `///` markdown javadoc (markdown links `[Type]` /\n`[#member]`, backtick code spans) — but 7 main-source files still had legacy\nHTML-javadoc tags mixed into their `///` comments. This sweep converts the\nlast 29 holdouts so the whole main-source t\n[…]\nules.\n- `javadoc` task green for all 3 modules — zero broken-link warnings (only 2\n  pre-existing \"no comment\" warnings on an unrelated Tracer.java).\n- Zero remaining `{@link`/`{@code` in the 7 files.",
          "is_bot": false,
          "headline": "docs: convert remaining {@link}/{@code} HTML-javadoc tags to the JEP-…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T01:49:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "681bd69e98fb0cb180e8c6aab756ecfb9e095d06",
          "body": "…stale package-info links (#253)\n\n* refactor(core): align BytesFormat visibility with reachability + drop stale package-info links\n\nBytesFormat was `public final` but its only instance (`INSTANCE`) is\npackage-private and the constructor is private, so no external code could\never name, construct, or \n[…]\nto a plain\n  `PipelineDiagnostics` code span; the prose meaning is unchanged.\n\nSame theme as the BytesFormat/package-info fix: stop advertising\npackage-private internals as public SPI. Compiles green.",
          "is_bot": false,
          "headline": "refactor(core): align BytesFormat visibility with reachability + fix …",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-17T00:28:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d1f55f6019a64634c9969637f5651af8bca688aa",
          "body": "…misleading shutdown log (#252)\n\n* refactor(consumer): sever load-bearing defaults from AppConfig + fix misleading shutdown log\n\nTwo small kpipe-consumer cleanups:\n\n1. The consumer's load-bearing default timeouts (WAIT_FOR_MESSAGES,\n   THREAD_TERMINATION, EXECUTOR_TERMINATION) lived on the demo `App\n[…]\nCAPE-HATCHES to ConsumerDefaults.EXECUTOR_TERMINATION (review nit)\n\nThe executor-drain timeout moved from AppConfig to ConsumerDefaults in this PR;\nthe escape-hatches doc still named the old location.",
          "is_bot": false,
          "headline": "refactor(consumer): sever load-bearing defaults from AppConfig + fix …",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-16T23:35:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7b45e77414e21b529f4b6f897469aef08ef46c74",
          "body": "…method (#251)\n\n`MessagePipeline.then()` — 47 lines of two-pipeline composition machinery — had\nzero production callers; its only users were the four `then*` tests in\nMessagePipelineContractTest that existed solely to exercise it. That's a\ndeletion-test failure: nothing in the shipped library compos\n[…]\n. Delete it per\n§16, along with the four tests, their now-unused imports, and the dangling\nJavadoc reference.\n\nVerified: :lib:kpipe-core:test green; no `.then(` reference remains in any\nsource or doc.",
          "is_bot": false,
          "headline": "refactor(core): delete the unused MessagePipeline.then() composition …",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-16T22:44:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3d1b2267bb9c4bdec6c3867328b690f5367014f",
          "body": "… (#250)\n\n* refactor(consumer): extract CommitCoordinator from KafkaOffsetManager\n\nThe async-commit correlation — a UUID → CompletableFuture map with a\nregister/complete/forget/count lifecycle — was inlined in KafkaOffsetManager\nacross four sites (the field, performCommit, notifyCommitComplete,\ngetS\n[…]\ning-await, timeout, and\nlate-complete-after-timeout (no-op). Full consumer suite green (3m5s).\n\nTests updated to the id-based API + the concurrent-completion path\n(completeUnblocksAConcurrentAwaiter).",
          "is_bot": false,
          "headline": "refactor(consumer): extract CommitCoordinator from KafkaOffsetManager…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-16T21:48:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f24c5e187350576fc192310275fd35f3fc0d64c2",
          "body": "…typed records (#249)\n\nKafkaOffsetManager.getStatistics() (on the OffsetManager SPI) and\ngetPartitionState() (impl-only) returned Map<String,Object> with magic-string\nkeys, and 27+ test/jcstress/property/stress call sites did unchecked casts\n(`(long) state.get(\"nextOffsetToCommit\")`). One site (Retr\n[…]\nfurther shrink the god-class.\n\nVerified: all source sets compile (main/test/jcstress/kpipe-test/api);\n:lib:kpipe-consumer:test green (3m8s, incl. property/stress); zero stringly\n.get() access remains.",
          "is_bot": false,
          "headline": "refactor(consumer): replace stringly-typed offset observability with …",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-16T20:46:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "866b543e3e9f59f1e89bb7d3cf47205dbff0682d",
          "body": "…eConsumerBuilder (#248)\n\n* refactor(consumer): extract KPipeConsumer.Builder to a top-level KPipeConsumerBuilder\n\nKPipeConsumer was 1974 lines — a god-class whose ~570-line nested Builder\ndominated it and hurt navigability. Extract the Builder to its own top-level\nKPipeConsumerBuilder.java in the s\n[…]\nidening encapsulation smell (28 package-private fields) is\ndeliberately deferred to a follow-up config-snapshot-record PR per the review;\neffective access is unchanged (only KPipeConsumer reads them).",
          "is_bot": false,
          "headline": "refactor(consumer): extract KPipeConsumer.Builder to a top-level KPip…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-16T19:09:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "00ae21a8f7c98c200be038b0735294093f18401a",
          "body": "… KeyOrderedDispatcher (#247)\n\nParallelDispatcher submitted each record to the VT executor and discarded the\nFuture, so a throwable escaping processTask.run() — a contract violation, since\nprocessTask owns the consumer's per-record error handling / DLQ — was silently\nswallowed by the FutureTask. Key\n[…]\nure (mirroring KeyOrderedDispatcherTest) proves\nthe escaping throwable is logged once at ERROR with the cause attached, and\nthat a throwing onComplete is logged at WARNING without stranding in-flight.",
          "is_bot": false,
          "headline": "fix(consumer): add a safety-net catch to ParallelDispatcher, matching…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-16T17:45:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4de0ed3b2dd4c3558e4f20d4c36dfc57b92ab172",
          "body": "…trics field name (#246)\n\n* feat(producer): count sends through KafkaMessageSink + de-OTel the metrics field name\n\nTwo producer-module observability cleanups:\n\n- KafkaMessageSink (the facade custom terminal Kafka sink) sent via the raw\n  producer and logged failures, but incremented NO metrics — so \n[…]\nsafety), matching the tracer guard three lines up.\n- Reword Builder.withMetrics Javadoc: it still said \"OpenTelemetry metrics\n  instruments\" though the field is the vendor-neutral ProducerMetrics SPI.",
          "is_bot": false,
          "headline": "feat(producer): count sends through KafkaMessageSink + de-OTel the me…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-16T16:20:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "868cabfa0db422613bb45ad07d2e76983bfdc34d",
          "body": "… Avro envelope blind spot (#245)\n\n* refactor(formats): hoist hexPreview to core Diagnostics + fix Avro envelope blind spot\n\nJsonFormat and ProtobufFormat each carried a byte-identical private\nhexPreview (same body, same HEX_PREVIEW_LIMIT=8) — a duplicated diagnostic\nhelper drifting toward divergenc\n[…]\ngnostics.\n\nAlso adds the resolver-throws-propagates-unwrapped Avro test the\ncorrectness lens suggested (guards the #244 boundary against a future edit\nmoving the resolver call inside the widened try).",
          "is_bot": false,
          "headline": "refactor(formats): share byte previews via core WireDiagnostics + fix…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-16T15:56:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "26a115bd19d6d8938ececf54a17615769dfa51e7",
          "body": "…ption (#244)\n\n* refactor(formats): standardize read-path failures on IllegalStateException\n\nThe \"malformed wire envelope / decode failed\" exception type diverged across\nformats: JSON and Avro threw RuntimeException, Protobuf's envelope threw\nIllegalStateException, and the Confluent descriptor compi\n[…]\nelf an IllegalStateException, so citing \"IllegalState\"\nas an example of a cause-chain programming error invited a wrapper-vs-cause\ndouble-take (round-1 doc-accuracy note). Use a non-colliding example.",
          "is_bot": false,
          "headline": "refactor(formats): standardize read-path failures on IllegalStateExce…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-16T01:18:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5ac89c7aa0ee1671af6eafb791aebd9dfb6e4e93",
          "body": "…lder mirrors, batch tracer/CB, benchmarks README) (#243)\n\n* build(bom): derive BOM constraints from the :lib graph + add coverage guard\n\nThe BOM hand-listed 10 of 13 published modules, silently omitting\nkpipe-tracing-otel, kpipe-schema-registry-confluent, and\nkpipe-format-protobuf-confluent — a con\n[…]\nnt the threading contract: accept() is concurrency-safe (reads only\n  the final counters); bindSchemaRegistryCache/close are single-owner\n  lifecycle calls, not thread-safe with respect to each other.",
          "is_bot": false,
          "headline": "chore: top-5 architecture cleanup (BOM drift, observer leak, MultiBui…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-15T22:40:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5d7fbcc65971f10a5b5c107da5aa5593bfbc5070",
          "body": "…e, docs (#242)\n\n* chore: post-review cleanup — MultiBuilder SR overloads, package rename, docs\n\nPost-architecture-review cleanup (non-breaking). Three parts:\n\n1. MultiBuilder Schema-Registry overloads — add avro(topic, resolver, cfg) and\n   protobuf(topic, resolver, cfg) mirroring KPipe.avro/protob\n[…]\n stands; only the mechanism was wrong.\n- Stream.withSchemaRegistry: the shaded protobuf-confluent compiler jar\n  measures ~19 MB (19,274,319 bytes), not ~17 MB — verified against the\n  built artifact.",
          "is_bot": false,
          "headline": "chore: post-review cleanup — MultiBuilder SR overloads, package renam…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-15T16:01:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a94f2e95bf2546e63578f855012dcc5a718f142d",
          "body": "* feat(protobuf): Confluent Schema-Registry per-record auto-lookup (§19)\n\nProtobuf SR auto-lookup, mirroring AvroFormat.withRegistry — proven\nwire-compatible against Confluent's own KafkaProtobufSerializer.\n\n## Two-module design (the kpipe SPI/impl pattern, like metrics/tracing-otel)\nprotobuf-java h\n[…]\nlver: widen lookupById doc (schema text — Avro JSON or Protobuf .proto).\n- Tests: facade dispatch (WithSchemaRegistryDispatchTest), computeIfAbsent\n  retry-on-throw, multi-element message-index [0,1].",
          "is_bot": false,
          "headline": "feat(protobuf): Confluent Schema-Registry per-record auto-lookup (#241)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-14T22:41:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f4208f7cd8ead18d3f2a788bcb8d4c64ea3a5701",
          "body": "…umer DLQ cell (#240)\n\n* test(consumer): deterministic crash-restart harness (kpipe-test) + started-consumer DLQ cell\n\nCloses two 'road to fully verified' items from PLAN.md.\n\n## CrashRestartHarness — public kpipe-test API (§21)\nA Docker-free, deterministic crash-restart verifier:\n  CrashRestartHarn\n[…]\ny-load-bearing\n  resume-seek assertion is recorded as still-open.\n\nAll /// doc lines kept <=95 cols (google-java-format wraps longer /// lines\ninto // continuations the IDE flags as dangling Javadoc).",
          "is_bot": false,
          "headline": "test: deterministic crash-restart harness (kpipe-test) + started-cons…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-14T02:42:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6092f34d6cc085b931264848579f406f4d688e2c",
          "body": "* chore: remove stray .idea profile + clear test/bench IDE warnings\n\nTwo post-#238 cleanups:\n\n1. Remove .idea/inspectionProfiles/Project_Default.xml — an IDE-local\n   inspection profile that a 'git add -A' in #238 swept into the tree by\n   accident (it was untracked, not meant to ship). Add .idea/in\n[…]\ntTrue(isRunning()) precondition gives the test teeth: a no-op queue\nread would leave it PAUSED and fail the postcondition.\n\nResolves the dead 'commandQueue' warning by making the field genuinely used.",
          "is_bot": false,
          "headline": "chore: remove stray .idea profile + clear test/bench IDE warnings (#239)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-13T17:14:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "21d806833ecb95e0c961c8fdaa973faf8d015ba0",
          "body": "Bumps the gradle-minor-patch group with 11 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [io.opentelemetry:opentelemetry-api](https://github.com/open-telemetry/opentelemetry-java) | `1.63.0` | `1.64.0` |\n| [io.opentelemetry:opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry\n[…]\n-update:semver-minor\n  dependency-group: gradle-minor-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump the gradle-minor-patch group with 11 updates (#237)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T16:30:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e5d86f7cf3fa7eb70389f372ac9b783a180fae32",
          "body": "* chore: clear the fixable -Xlint compiler warnings (89 → 68)\n\nThe build never ran -Xlint, so 89 compiler warnings sat unsurfaced. Triaged and fixed\nevery actionable one; left only genuine noise.\n\nFixed (21 warnings):\n- exports (8): kpipe-metrics-otel + kpipe-tracing-otel expose OpenTelemetry (an\n  \n[…]\nescape-\nhatch API (invisible to IDE reachability), OTel gauge fields (must retain\nstrong refs), AvroFormat possible-NPEs (guarded by static-vs-registry mode\ndispatch), guarded switch over sealed type.",
          "is_bot": false,
          "headline": "chore: clear the fixable -Xlint compiler warnings (89 → 68) (#238)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-13T16:05:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7347bf8702877ed2fc23de3eee387e6773f3ff98",
          "body": "The custom-OffsetManager section named a non-existent getOffsetsToCommit method.\nThe real SPI surface is trackOffset / markOffsetProcessed / notifyCommitComplete /\nstart / stop / isRunning / getState / getStatistics / createRebalanceListener / close.\nPre-existing drift surfaced by the 1.17.0 review lenses.",
          "is_bot": false,
          "headline": "docs: fix OffsetManager SPI method list in ESCAPE-HATCHES (#236)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-12T22:21:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93349a09ef31f14fa0a144b804ef2c7321a659b3",
          "body": "…(1.17.0) (#235)\n\n* wip: 1.17 degenerify — core + facade + kpipe-test main sources compile\n\nKPipeConsumer/Builder/OffsetManager/KafkaOffsetManager/ErrorHandler/ProcessingError/\nDispatcher hierarchy/BatchPipelineWrapper degenerified; keys pinned to byte[] with\nByteArrayDeserializer forced in Builder.\n[…]\nr-handler surface in README section 7 / the\nfluent-surface table and the ESCAPE-HATCHES custom-error-handler row without a decode\nexample. Added the null-guarded decode to all three (DX review GAP 1).",
          "is_bot": false,
          "headline": "feat(consumer): delete the K type parameter — keys are always byte[] …",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-12T17:13:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aa4ee473015ffb051f3b466b4c5f331e19a70704",
          "body": "…ing (#231)\n\n* feat(test): kpipe-test module — TestStream driver + CapturingSink for Docker-free pipeline tests\n\nNew published module lib/kpipe-test (io.github.eschizoid.kpipe.test, JPMS module of the\nsame name) implementing the PLAN P2 surface:\n\n- TestStream<T>: MockConsumer-backed driver around a \n[…]\nic flush, filter/error visibility);\n  the existing docker-compose walkthrough moves under an\n  \"Integration testing against a real broker\" heading.\n\n* refactor(test): simplification pass on kpipe-test",
          "is_bot": false,
          "headline": "feat: kpipe-test module — TestStream<T> for Docker-free pipeline test…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-11T17:59:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1f33660ff06febcf42af435eecab9597d9a75a67",
          "body": "…longer parks forever (#233)\n\nA backpressure pause used to LockSupport.park() the consumer thread\nindefinitely. For the lag strategy (auto-derived in SEQUENTIAL mode)\nnothing ever unparks it: SEQUENTIAL has no asynchronous record\ncompletions (processing runs inline on the parked thread itself), and \n[…]\n: all three tests fail against the old park-based loop\n(resume-after-external-lag-drop, keep-polling-while-lag-paused,\nkeep-polling-while-manually-paused) and pass with the fix. No public\nAPI changes.",
          "is_bot": false,
          "headline": "fix(consumer): paused consumer keeps polling — lag-strategy pause no …",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-11T17:21:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5cf6f8299ef618d3356a3566d40127675dba4a2d",
          "body": "…EQUENTIAL mode (#234)\n\nThe batch circuit-breaker test was the only test in the class running in the\ndefault PARALLEL mode, so the breaker tripped on a batch-flush worker thread\ninstead of the consumer thread. internalPause flips the state to PAUSED before\noffering the Pause command, and the consume\n[…]\n feed the breaker window). The underlying\ncross-thread pause-delivery race is a product bug fixed separately by the\npaused-consumer-keeps-polling rework (#233), which retires the park() path\nentirely.",
          "is_bot": false,
          "headline": "test(consumer): de-flake sustainedBatchFailuresTripBreaker — run in S…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-11T17:21:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f701768e48cd4ae53206cbc19322e830ce24e228",
          "body": "…232)\n\nThe 'single-sample harness bug' footnote is resolved: it was the #228 lost-wakeup\ndeadlock killing 24/25 forks in the PARALLEL low-regime cells. The confirmation capture\non the fix (run 29107846506, fork=5) yields 25/25 samples: 155,696±8% @100us and\n145,418±7% @1ms — PARALLEL is ~2x CPC UNOR\n[…]\ntored. README sub-ms paragraph strengthened with the PARALLEL\nnumber, stale single-sample caveat replaced with the bug-found-and-fixed story; snapshot\ngets a dated addendum with the superseding table.",
          "is_bot": false,
          "headline": "docs: PARALLEL sub-ms cells confirmed at full fork depth post-#228 (#…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-11T13:45:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a056f80a01eee65bdd4dd5d72ea6fc35d52050de",
          "body": "…x) (#230)\n\n* bench: per-record latency harness — true p50/p95/p99/max across four runtime arms\n\nThe existing ParallelProcessingLatencyBenchmark divides whole-batch completion\ntime by @OperationsPerInvocation, so its percentiles are batch-amortized — a\nthroughput number in latency clothing (results/\n[…]\ne latency harness section\n\nArms run sequentially against one long-lived broker, so page-cache and broker-JVM warmth\naccumulate across arms. One-line reading caveat per the measurement-validity review.",
          "is_bot": false,
          "headline": "bench: per-record latency harness — true tail latency (p50/p95/p99/ma…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-10T23:28:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fff0b9396177993f046377ee78cd342bbf7815c8",
          "body": "…ast in-flight drain (#228)\n\n* fix(consumer): close backpressure lost-wakeup race that parks the consumer thread forever\n\ntickBackpressure decided PAUSE from an in-flight metric read taken BEFORE\nrequestPause published the BACKPRESSURE bit, while record completions only\nunpark the consumer thread wh\n[…]\nst comment (it fails fast via assertion; it\n   does not itself park a thread) and assert the pause edge is counted\n   (backpressurePauses == 1) and the immediate release records a >= 1 ms\n   duration.",
          "is_bot": false,
          "headline": "fix(consumer): lost-wakeup deadlock when backpressure pause races a f…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-10T23:12:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d9197c97c1c09237507347d7f82bd55763f02af5",
          "body": "…er allocation (#229)\n\n* perf(consumer): primitive-long pending-offset set — cut offset-manager allocation 45%\n\nReplace the per-partition ConcurrentSkipListSet<Long> in KafkaOffsetManager\nwith PendingOffsetSet, a monitor-synchronized sorted primitive-long window:\n\n- Inline single-element mode (no ba\n[…]\no\nthe arbiter. Each doc now points at SafeFirstJCStressTest for the true\ncross-lock-set interleaving (monitor-only readers vs bucket-lock-plus-\nmonitor writers). Comments only — no test logic changed.",
          "is_bot": false,
          "headline": "perf(consumer): primitive-long pending-offset set — −45% offset-manag…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-10T22:36:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ff4045fd838de953848b0f36df234f69fea124e7",
          "body": "…nchmark snapshot (#227)\n\n* bench: 2026-07-09 snapshot — fork=5 low regime, first high-regime (10-100ms) capture, latency-mode note\n\nLow regime at fork=5 reproduces every 2026-06-20 ordering with publishable error bars\n(KEY_ORDERED 93.8k±0.8% vs CPC KEY 65.9k±1% at 1ms = 1.42x, clean separation). Fi\n[…]\n\nreal API: inline lambda + Operators.addField). All intra-doc anchors and file links\nverified resolving.\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: README overhaul — lead with the 10–100ms regime + 2026-07-09 be…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-10T11:46:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e41c0042ae15eb0313925e32709bdc129649c244",
          "body": "…226)\n\n* docs: put the benchmark wins and verification story on the README front page\n\nThe competitive numbers (fastest correct consumer at production-like work levels; beats\nConfluent PC ~1.2-2x, KEY_ORDERED beats CPC KEY ~1.5x apples-to-apples) lived only in\nbenchmarks/results/ and got one cautiou\n[…]\nfork=5 is a weekend run; document the trim option.\n- Mark the fork=2 latency example as spot-check-only.\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: benchmark wins + verification story on the README front page (#…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-09T05:07:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "10f536429930d7ed9ac69a2998da8144ad376946",
          "body": null,
          "is_bot": true,
          "headline": "deps(deps): bump the gradle-minor-patch group with 2 updates (#225)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-06T18:14:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcb62552b1c90c5c869fb76d60d74021f32718e3",
          "body": "…ker to fix CI flake (#224)\n\nRebalanceAtScaleIntegrationTest was the only class failing on main CI (3 runs: the #221\nmerge run + both attempts of the #218 run). The signature was identical every time:\nproduce timed out at line 325 (send.get in the produceRecords setup helper) with\norg.apache.kafka.c\n[…]\nontainer classes untouched.\n\nCannot run Testcontainers locally (no Docker); verified it compiles. CI is the confirmation\n— will re-run the branch a few times to confirm the rebalance tests stay green.",
          "is_bot": false,
          "headline": "test(consumer): give RebalanceAtScaleIntegrationTest a per-method bro…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-07-03T16:34:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "08489102845c2774f8bf386e7cb11cf0877d5e23",
          "body": null,
          "is_bot": true,
          "headline": "ci(deps): bump actions/upload-artifact from 4 to 7 (#218)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T22:59:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "918a1db73ff44478a84be5a5fd556f2e40952351",
          "body": null,
          "is_bot": true,
          "headline": "deps(deps): bump the gradle-minor-patch group with 8 updates (#223)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T15:29:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e87170dca1ff739e99239667539ef21f78acd019",
          "body": "…ssingIntegrationTest (#222)\n\nThree '//' comment blocks had mid-sentence single words stranded on their own lines\n(spotless wraps at ~100 chars and pushed the overflow word down). Re-wrapped each block\nso every line stays under the wrap width with natural multi-word continuations. Cosmetic\nonly — no code or assertion changes. (Sentence-final single-word lines are left as-is.)",
          "is_bot": false,
          "headline": "chore(consumer): reflow stranded comment lines in CrashRestartReproce…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-22T22:17:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e59b910947b5f5b8f744eaa46d78c7e9d3517191",
          "body": "…er durability, rebalance, tracing, lifecycle (#221)\n\n* test: Tier-2 correctness coverage — formats, schema evolution, producer durability, rebalance, tracing, lifecycle\n\nConsolidates the Tier-2 verification fleet (surfaces #217 never touched). 11 new\ntest classes; 57 local tests pass (0 skipped/fai\n[…]\nme idiom already applied to the other pendingCount drain\ncheck in this file (line 424). Pre-existing flake surfaced by #221's CI; not caused by the\nTier-2 tests. Verified stable across 3 local reruns.",
          "is_bot": false,
          "headline": "test: Tier-2 correctness coverage — formats, schema evolution, produc…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-22T21:38:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "974517ccd99fb0047011f5b454ab99dd93188297",
          "body": "…deterministic crash-restart (#220)\n\n* test(consumer): drive circuit-breaker-window + state-CAS jcstress against real code\n\nTier-1 follow-up to #217: the two jcstress tests that mirrored private logic now\nexercise the real production code, removing replica-drift risk.\n- ConsumerHealthController.Slid\n[…]\n offset\nsuites, and DlqSendFailureTest. The max.poll.records bounding + the KeyOrdered drain\nde-flake are kept (real improvements).\n\n* test(consumer): tidy wrapped comment orphan in crash-restart test",
          "is_bot": false,
          "headline": "test(consumer): Tier-1 correctness hardening — real-class jcstress + …",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-22T20:15:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d4e2dc5532f802bd3bae103cf11e14312030a517",
          "body": null,
          "is_bot": true,
          "headline": "deps(deps): bump net.jqwik:jqwik in the gradle-minor-patch group (#219)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-22T11:50:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1a8612cc454afa40179808b82384b11ef11e7e3",
          "body": "…(#217)\n\njcstress/jqwik/VT-stress/chaos+crash-restart verification of the at-least-once surface across 5 modules (15 jcstress tests, now gating CI). Fixes 3 real bugs: trackOffset pending-set data-loss race (jcstress-found), DLQ-send-failure silent loss, and the circuit breaker being blind to the batch path. Adds the kpipe.producer.dlq.failed metric. See PR description for the operator-facing DLQ commit-stall behavior change and honest scoping.",
          "is_bot": false,
          "headline": "test(consumer): at-least-once correctness suite + 3 production fixes …",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-22T03:51:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a2b591f73a1fae34b41436addf555dcabbac1717",
          "body": "…#216)\n\nProfile-first follow-up to the 2026-06-20 capture. gc.alloc.rate.norm\n(deterministic, reliable even on noisy hardware) attributes the 1628\nB/op: ~62% virtual-thread creation, ~24% offset track/mark Long-boxing,\n~14% pipeline.\n\nConclusions: Result.Passed is noise (~24 B/op), not a target; VT\n\n[…]\ntSkipListSet),\nwhich is deferred into the upcoming correctness phase because it lives\nin the concurrency-critical lowest-pending-offset structure — optimize\nit under a Lincheck safety net, not before.",
          "is_bot": false,
          "headline": "bench: record allocation attribution for KPipe PARALLEL (1628 B/op) (…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-21T15:35:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "52cda3976e2ac72e79e81a9fa259e4f2797fbd69",
          "body": "…les) + CI regime docs (#215)\n\n* ci: make ParallelProcessing workMicros overridable for CI captures\n\nThe competitive bench's workMicros is a hardcoded 7-value @Param up to\n100ms/record. The single-threaded arm is serial, so 25k records × 100ms\nis ~42 min/iteration — the {35,50,100}ms cells push a fu\n[…]\null sweep incl. singleThread stays a local overnight run.\n\nPercentile capture itself needs a CI dispatch to confirm (Testcontainers\nbench, can't run locally without Docker). Build config parses clean.",
          "is_bot": false,
          "headline": "bench: annotation-driven benchmark mode (restores CI latency percenti…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-21T15:20:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "515f94232aa6a8733edc737170787f5d51b52ac6",
          "body": "…ride (#214)\n\n* ci: make ParallelProcessing workMicros overridable for CI captures\n\nThe competitive bench's workMicros is a hardcoded 7-value @Param up to\n100ms/record. The single-threaded arm is serial, so 25k records × 100ms\nis ~42 min/iteration — the {35,50,100}ms cells push a full sweep past\nGit\n[…]\npleTime —\nfiled as a follow-up), and KPipe allocates the most per op (1628 B/op) —\nthe VT+Result+offset-tracking cost, an honest tradeoff.\n\nRaw JMH JSON committed alongside as results-2026-06-20.json.",
          "is_bot": false,
          "headline": "bench: CI-captured competitive numbers (2026-06-20) + workMicros over…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-21T14:56:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "689bb00e222ba292af36b797c073269c660f030b",
          "body": "Regenerated via the wrapper task. Properties distributionUrl points at\n9.6.0; gradlew / gradlew.bat carry the matching script regen (comment\ntext only). Verified working — the benchmark suite runs on it.",
          "is_bot": false,
          "headline": "chore: bump Gradle wrapper 9.5.1 → 9.6.0 (#213)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T01:56:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2235cc46ed14d2286cfd8e7af4232e7153084160",
          "body": "…) (#212)\n\nJMH benchmarks don't gate PRs — they're slow and GitHub runners are\nshared, noisy CPU where absolute numbers are unreliable. This workflow\ngives two things:\n\n- workflow_dispatch: run a chosen benchmark set on demand with tunable\n  iterations / warmup / fork / profilers. For branch-vs-main\n[…]\nemits the\nstring \"NaN\" when iterations are too few for a stddev).\n\nSmoke-validated locally: OffsetManagerBoxingBenchmark runs, produces\nresults.json at the expected path, and the summary jq parses it.",
          "is_bot": false,
          "headline": "ci: add Benchmarks workflow (manual dispatch + weekly bench-rot smoke…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T01:39:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bbdb36e1c3157a8a05023ad8585ad837a172fbe6",
          "body": "Four documentation hardenings from the R1 convergence review of the\naudit-fix PRs (#205-#210). All comment/javadoc only — zero behavior\nchange.\n\n- AvroFormat.deserializeStatic: explain why the catch is broadened to\n  RuntimeException (Avro surfaces malformed bytes as AvroRuntimeException,\n  not IOEx\n[…]\nl. (#210)\n- OffsetManagerBoxingBenchmark: drop the JVM-version-specific\n  object-header byte estimate; point the reader at the measured\n  gc.alloc.rate.norm delta instead (prove, don't assert). (#205)",
          "is_bot": false,
          "headline": "docs: harden audit-review comments on non-obvious correctness (#211)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T01:30:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3fd79fe7a8ec96fd580f52fc16fb12b649904378",
          "body": "…ach throwables (#210)\n\nLogging-hygiene roundup from the logging audit.\n\nPer-record spam (HIGH):\n- Registry: the per-record WARN for an unrouted operator/sink key now fires\n  once per distinct key (ConcurrentHashMap.newKeySet guard), not once per\n  record. The WARNING is load-bearing so it stays at \n[…]\nnk namespaces dedup\n  independently (captured via the JUL bridge).\n- BatchPipelineWrapperCoverageContractTest gains a pin asserting the\n  coverage-violation WARN's LogRecord carries a non-null thrown.",
          "is_bot": false,
          "headline": "fix(logging): dedup unrouted-key WARN, drop per-record INFO spam, att…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T01:15:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7a82762da678d8c416977f904dd2646baf10b0cc",
          "body": "The KPipeConsumer constructor opens, in order: the Kafka consumer, the\ndispatcher (PARALLEL owns a virtual-thread executor), an optional built-in\nDLQ producer, an optional scheduler, the batch wrappers, and a JVM shutdown\nhook. If any step after the first open threw — e.g. addShutdownHook while the\n\n[…]\n throwing\noffset-manager provider through build() and asserts the Kafka consumer was\nclosed; shouldReturnStartedServerFromEnv hits the fromEnv endpoint without\ncalling start() to prove it was started.",
          "is_bot": false,
          "headline": "fix(consumer): close resources on constructor-failure paths (#209)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T01:11:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "04e67bed8398df5f5a6fd63c092b355838cdaf16",
          "body": "…es (#208)\n\nSeveral validation throws stated the rule but omitted the offending\nvalue or how to fix, while sibling validations in the same files\nalready appended \"got \" + value. Make them consistent:\n\n- BackpressureController ctor: highWatermark/lowWatermark now append\n  the got-value (matches the l\n[…]\n).\n- MultiBuilder.start: add how-to-fix listing the route methods.\n\nException types unchanged. Added focused got-value tests for the two\nmost user-facing cases (BackpressureController, DefaultStream).",
          "is_bot": false,
          "headline": "fix: include offending value + remediation in validation error messag…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T01:09:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f7dd94e0b1845f5dab9de60c6cae9ae7e7d6ccfb",
          "body": "…ext (#207)\n\nBare 'Failed to deserialize X' messages buried the format name and byte\ncontext behind the nested cause, slowing operator triage when a deserialize\ngenuinely throws (the no-silent-failures doctrine cares about the signal: the\nmessage + cause chain).\n\n- JsonFormat: deserialize message no\n[…]\ns stay single-line for log friendliness.\n\nTests: each format gains a malformed-bytes test asserting the thrown message\ncontains the format name AND the byte length, pinning the triage-signal\ncontract.",
          "is_bot": false,
          "headline": "fix(format): enrich SerDe error messages with format name + byte cont…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T01:09:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "554c54bbb333ef86c615fac6dc7ccddfba6ec5e5",
          "body": "…sitive (#206)\n\nPart A — remove unused requires (verified by grep + clean compile):\n- kpipe-api: drop `requires kafka.clients` (no org.apache.kafka import in src/main)\n- kpipe-consumer: drop `requires java.net.http` (health server uses jdk.httpserver)\n\nPart B — promote requires to transitive where t\n[…]\nageFormat<Message>)\n\nBuild-metadata only; no behavior change. Changes the downstream module graph:\nconsumers of kpipe-api no longer need to manually `requires` the format\nmodules' dependency packages.",
          "is_bot": false,
          "headline": "chore(jpms): remove unused requires, promote API-exposed deps to tran…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T01:09:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "36ba4e1273f4f9583a0ea07b02134d48e1a0af08",
          "body": "…ger + add JMH benchmark (#205)\n\n`KafkaOffsetManager.trackOffset` and `markOffsetProcessed` previously allocated a\nfresh `TopicPartition(topic, partition)` per call to use as a `ConcurrentHashMap`\nkey — at 100k rec/s that's ~200k disposable instances/sec from this manager alone\n(twice per record: on\n[…]\n` so the timed loop only exercises the fast path. Run\n  with `-prof gc` to see `gc.alloc.rate.norm` drop by one `TopicPartition`\n  instance per record (~24 bytes on a 64-bit JVM with compressed oops).",
          "is_bot": false,
          "headline": "perf(consumer): cache TopicPartition per partition in KafkaOffsetMana…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T01:09:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "01417c004182d33ee191f68f4938bdf7e8e8b8b2",
          "body": "…ence Backpressure constants (#202)\n\n* chore: tighten Builder null-validation + dlqTopic blank-check + reference Backpressure constants\n\nThree small validation-hygiene fixes bundled together:\n\n1. Add Objects.requireNonNull to the KPipeConsumer.Builder setters that\n   previously accepted null silentl\n[…]\num constants do,\nclass static fields don't — JDK quirk). Switching to backtick prose\nreferences keeps the audit's anti-drift intent (constants named, not\nliteral values) without the broken cross-link.",
          "is_bot": false,
          "headline": "chore: tighten Builder null-validation + dlqTopic blank-check + refer…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T00:57:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "be1b8731d684f71793498775b23d759fab067229",
          "body": "…de settings (#199)\n\n* fix(api): MultiBuilder rejects silently-dropped per-route consumer-wide settings\n\nMultiBuilder.start() folds N per-topic routes into a single underlying\nKPipeConsumer, but only replays each route's pipeline (buildPipeline /\naddBatchRoute) — the route's consumer-level config (w\n[…]\nigurator\nmisconfig at construction). Promote both legacy checks to\nIllegalArgumentException so callers can catch one type.\n\nUpdates the two assertions in KPipeFacadeBuildTest that pinned the old\ntype.",
          "is_bot": false,
          "headline": "fix(api): MultiBuilder rejects silently-dropped per-route consumer-wi…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T00:14:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "16dd0f34ea7291c7d1be78bb02127c8944db5866",
          "body": "…ne sites (#204)\n\nThe audit flagged bare `Thread.sleep(N)` followed by an immediate assertion as the\nhighest-severity test-brittleness pattern. Under loaded CI a fixed sleep budget can\nbe exceeded by GC pauses or VT scheduling jitter, and the follow-up assertion races\nthe wall clock instead of the a\n[…]\nTestcontainer integration tests (ExternalOffsetIntegrationTest,\nKPipeProducerIntegrationTest) fail at suite level due to local Docker daemon\nunavailability — pre-existing and unrelated to this change.",
          "is_bot": false,
          "headline": "test: replace bare Thread.sleep with poll-until-deadline in flake-pro…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T00:05:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "79d9b136d2ebefa64f1bbed5195bd886fa53f109",
          "body": "… + BitSet, drop KeyOrdered wrapper (#203)\n\nThree small, surgical allocation cuts on the per-record hot path. No\nbehavior change; existing tests pass unmodified.\n\n1. TypedPipelineBuilder.deserialize: hoist `format.getClass().getSimpleName()`\n   from per-record to build-time. The value is only used i\n[…]\n(`ExternalOffsetIntegrationTest`, `KPipeProducerIntegrationTest`)\nare Testcontainers-based and fail on main too due to Docker daemon being\nunavailable in this environment — unrelated to these changes.",
          "is_bot": false,
          "headline": "perf: hot-path quick wins — hoist getSimpleName, batch scratch buffer…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T00:05:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cade7d6ffeee30d7792391c0df705e2b05095438",
          "body": "…ps, format) (#201)\n\nThe static-mode KPipe.avro/protobuf overloads took (format, topic, props)\nwhile KPipe.custom and the SR-mode KPipe.avro(topic, props, resolver) both\nput the format/resolver last. The §17 capability table documents the\ncanonical shape as (topic, props, format) — the static-mode o\n[…]\nMultiBuilder.protobuf(String topic, ProtobufFormat format, configurator)\n\nHard-rename + migrate all callers in the same PR per the no-deprecation\npolicy. No @Deprecated overloads kept for back-compat.",
          "is_bot": false,
          "headline": "refactor(api): normalize KPipe.avro/protobuf arg order to (topic, pro…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T00:05:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3610f5dceea537345a7bb3c1704bee7f59c57f45",
          "body": "Three documentation-drift fixes surfaced by an audit pass:\n\n1. `kpipe-api/package-info.java` — the worked example referenced\n   `KPipe.stream(\"topic\", JsonFormat.of()).process(...).to(Sink.console())`,\n   none of which exist. Rewritten to the current\n   `KPipe.json(topic, props).pipe(...).toConsole(\n[…]\nhmarks/` -> 0 hits.\n\nAlso updated the local CLAUDE.md §17 capability table to add a Tracing\nrow (Stream/MultiBuilder/Builder `withTracer(Tracer)`); the file is\ngitignored so it is not part of this PR.",
          "is_bot": false,
          "headline": "docs: fix package-info example, drop stale processToSink refs (#200)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-20T00:05:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "81270744b9ab7ec3557989ae188f698addb4c881",
          "body": "…acer (#198)\n\nBoth adapters were package-private SPI helpers with exactly one production\ncallsite (OtelTracer itself), zero tests, zero examples. Their Javadoc already\ndeclared them as \"Used by OtelTracer#...\" — conceptually private. Pulling them\ninto OtelTracer as private static nested final classe\n[…]\nOC: -61 / +53 = -8 lines, one less compilation unit.\n\nJPMS unchanged: package-info still exports the same package; the deleted\nclasses were never independently exported, so no module-info edit needed.",
          "is_bot": false,
          "headline": "chore(tracing-otel): inline HeadersTextMap{Getter,Setter} into OtelTr…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-19T18:05:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c10b8a1221bc8ab3e555bea60aab05748c8ee5ef",
          "body": "…dule *ConsoleSinkTest (#197)\n\nThe same 30-line `java.util.logging.Handler` lived verbatim in three places — one per format module — each with exactly one consumer (the sibling *ConsoleSinkTest). Inline as a private nested class inside the sole consumer, matching how KPipeBytesConsoleSinkTest alread\n[…]\nnt) handler. A shared kpipe-test-fixtures module would be over-engineering for a 30-line JUL handler and would add a new published artifact + JPMS split-package coordination for no real reuse benefit.",
          "is_bot": false,
          "headline": "chore(test-fixtures): inline triplicated CapturingHandler into per-mo…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-19T18:05:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5573fb84f96148453ae889d5c57f79707d957b68",
          "body": "…All() (#196)\n\nPublic-API removal. Per the no-deprecation policy, hard-delete in the same\nPR rather than add a deprecation cycle.\n\ninvalidateAll() existed as a disaster-recovery surface for a hypothetical\nSR migration where previously-stable IDs map to different schemas. That\nscenario contradicts th\n[…]\nn grep returned only the method definition and the one test\nmethod; zero in-tree callers, so no migration code is needed. External\nusers on the rare-to-nonexistent recovery path: restart the consumer.",
          "is_bot": false,
          "headline": "chore(schema-registry): delete unused CachedSchemaResolver.invalidate…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-19T18:05:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c43852a46c9c06f94e94c17ff145da08018b0316",
          "body": "The accessor had only one caller — a unit test asserting its return\nvalue. Confirmed via grep across lib/, examples/, benchmarks/ with zero\nproduction callers. Drop the method and its test-load-only coverage in\nthe same PR per the no-deprecation policy.\n\nMode invariants stay enforced by:\n- AvroFormat.consoleSink() throws when registry-backed\n- AvroFormat.serialize() throws when registry-backed",
          "is_bot": false,
          "headline": "chore(format-avro): delete dead AvroFormat.isRegistryBacked() (#195)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-19T18:04:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a15b2c2ba37948e39a64fc9da9aa9c7cc5cbc833",
          "body": "JsonFormat is a stateless singleton exposed via JsonFormat.INSTANCE. The\npublic no-arg ctor was only used by the INSTANCE static initializer, so\nnothing user-facing constructs it. AvroFormat and ProtobufFormat both\ntake ctor args; JsonFormat was the odd one out exposing a public default\nctor that was never meant to be called directly.\n\nTighten the modifier to private and update the Javadoc to point users at\nJsonFormat.INSTANCE. Public-surface narrowing with zero callers — no\nmigration needed.",
          "is_bot": false,
          "headline": "chore(format-json): tighten JsonFormat no-arg ctor to private (#194)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-19T18:03:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ccac989bb7895f204c3ac564cc983ca6da84b7e",
          "body": "* test(producer): pin KafkaMessageSink error paths\n\nCloses a criticality-6 coverage gap: the existing tests only exercised\nhappy paths. Add three tests that pin the error contract:\n\n- acceptPropagatesProducerExceptionAsRuntime: synchronous KafkaException\n  from Producer.send must propagate (no silen\n[…]\nExceptionUnwrapped`. The body asserts the\noriginal `KafkaException` propagates verbatim via `assertSame`, so\n\"Unwrapped\" matches the actual invariant; \"AsRuntime\" implied a rewrap\nthat doesn't happen.",
          "is_bot": false,
          "headline": "test(producer): pin KafkaMessageSink error paths (#192)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-18T19:55:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "816123d9400921bb1b4c83f36080fca2ca1996be",
          "body": "…act (§19) (#193)\n\n* test(schema-registry): pin CachedSchemaResolver failure-caching contract\n\nAdds three tests that nail down the failure-propagation path under\ncontention — the criticality-8 coverage gap in the prior audit.\n\nThe §19 \"cache forever in-process\" invariant is correct ONLY for\nsuccessf\n[…]\nring context survives).\n\nReplaces the two §19 references in CachedSchemaResolverTest with\ndirect wording: \"Confluent SR schema IDs are immutable\" and\n\"computeIfAbsent must collapse concurrent misses\".",
          "is_bot": false,
          "headline": "test(schema-registry): pin CachedSchemaResolver failure-caching contr…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-18T19:52:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b5943b14b2c7d2ff49e908e5f95a1a1f528dd379",
          "body": "Existing shouldSendDlqRecordWithAllHeaders covers the static x-dlq-*\nheaders but does NOT verify that a custom Tracer's injectContextInto\nruns against the outbound record. A future refactor that drops the\ntracer.injectContextInto(headers) call would silently strip trace\ncontext from DLQ records with\n[…]\nsends a\nrecord through sendToDlq, and asserts the stamp lands on the captured\nProducerRecord. Uses a hand-written stub (not Mockito) so the contract\nis enforced by behaviour, not by argument matching.",
          "is_bot": false,
          "headline": "test(producer): pin Tracer header injection through DLQ (#191)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-18T19:52:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "df9c1d8716be8ce37b1d1e5a16138d1425ac0d4a",
          "body": "* chore: roundup of worth-considering nits from the 20-agent review fleet\n\nFive small follow-ups surfaced by recent reviews; no single one warrants\na PR on its own, but together they close real gaps.\n\n- Add `pendingCountDrainsWhenTaskThrowsError` to ParallelDispatcherTest:\n  pins that the `finally` \n[…]\nreserved.\n- Drop the trailing \"any other caller must too\" sentence from\n  ParallelDispatcher.dispatch's Javadoc — the class is package-private\n  with a single in-module caller, so the warning is moot.",
          "is_bot": false,
          "headline": "chore: roundup of worth-considering nits from review fleet (#190)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-18T19:52:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eb214920a9269c745b79c8617faaa1927be4c828",
          "body": "…eanup) (#187)\n\nSurfaced by the architecture + dead-code audits. All removals had zero\nproduction callers (test/bench callsites migrated in this commit per\nthe §16 delete-and-migrate policy):\n\n- AvroSchemaCatalog + test (~265 LOC)\n- ProtobufDescriptorCatalog + test (~177 LOC)\n- AvroRegistryKey (one \n[…]\nther + dedicated test\n- README + format-class Javadoc examples that referenced the catalogs\n\nNet: -553 LOC. JPMS module-info files unchanged (packages still\nexported; only deleting types within them).",
          "is_bot": false,
          "headline": "chore: delete dead Catalog classes + test-only withers (post-audit cl…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-18T19:16:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5fad212b544d084a6d1214b1b89363f74d4a2ce0",
          "body": "… (#189)\n\n`shouldProbe` had zero production callers — the Javadoc advertised \"a\ntimer asks shouldProbe on each tick\" but no such tick exists. The real\nOPEN → HALF_OPEN transition fires via a one-shot\n`scheduler.schedule(this::tryHalfOpen, openDuration, …)` future in\n`ConsumerHealthController.trip()`\n[…]\non to match the\n  actual scheduler-based design (and update the test-class Javadoc).\n- Add a \"Circuit breaker\" row to §17 capability table in\n  `.claude/CLAUDE.md` — the table was missing it entirely.",
          "is_bot": false,
          "headline": "chore(consumer): drop CircuitBreakerController.shouldProbe + fix docs…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-18T19:16:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ce4988602cf2294b5728f7fc5340fff1203acf98",
          "body": "Adds 5 tests that pin the silent-failure guards in `BatchPipelineWrapper`:\n\n- `incompleteBatchResultRoutesMissingRecordsToDlq` — missing index in\n  `BatchResult` must route the unaccounted-for record to the failure\n  callback with a synthetic `IllegalStateException`, not be silently\n  marked process\n[…]\nxisting `BatchPipelineWrapperConcurrencyTest` only exercises the\nhappy-path parallel-enqueue invariant. These tests close the remaining\ngap on the wrapper's `BatchResult` classification + drain logic.",
          "is_bot": false,
          "headline": "test(consumer): pin BatchPipelineWrapper coverage-contract paths (#188)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-18T19:16:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "165b5dc77de3efd39634b8cc9db548e0551b625e",
          "body": "… paths (#186)\n\nCloses the criticality-9 coverage gap on ParallelDispatcher — the in-flight\ncounter that drives PARALLEL-mode backpressure is the single source of truth\nfor the high/low watermark, and any leak or double-decrement silently breaks\neither pause-forever (deadlock) or pause-never (overlo\n[…]\nntDispatchAndCloseDoesNotLeakPending: 200 concurrent dispatches\n  racing against close() — every dispatch terminates as started-and-drained\n  OR rejected-and-rolled-back, with no third \"leaked\" state.",
          "is_bot": false,
          "headline": "test(consumer): pin ParallelDispatcher pendingCount + onComplete race…",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-18T18:47:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6bf214ceade8402b8aa4b82a3fde38cda67e0237",
          "body": "- KafkaOffsetManagerTest: add partitionsAssignedFromDifferentThreadTripsAssertion\n  sibling to the existing onPartitionsRevoked off-thread test, closing the\n  symmetry gap surfaced in the PR #168 review.\n- OtelTracerTest: assertSame on Tracer.noop() / SpanScope.noop() pairs to pin\n  the enum-singlet\n[…]\ncaptured saturation WARN's message\n  contains \"saturat\" (lowercase substring) so a wording regression that\n  drops the saturation signal entirely fails the test, not just the count\n  (PR #167 review).",
          "is_bot": false,
          "headline": "test: pin three coverage follow-ups from recent reviews (#185)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-18T18:30:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0e86d8dc8c6cff0814d38b2f1d4537aaf8084f79",
          "body": "Introduces examples/custom-format demonstrating the KPipe.custom(topic,\nprops, format) fluent entry point with a user-supplied MessageFormat<T>\nimplemented inline — no kpipe-format-* module dependency, no schema\nregistry, no extra runtime deps. The example uses a tiny CSV-line codec\nfor a CsvOrder r\n[…]\n standard error path\ninstead of masking them as filtered records.\n\nGap surfaced by the issue #166 audit: every other facade entry point\n(json/avro/protobuf/bytes) had a runnable example except custom.",
          "is_bot": false,
          "headline": "docs(examples): add KPipe.custom-format example (refs #166) (#184)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-18T18:28:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "491a9a8a4b666adc8f6e4f6e4d26b2a5599f5e16",
          "body": "Adds an `examples/bytes` module that demonstrates the\n`KPipe.bytes(topic, props)` fluent entry point — the only bundled\nformat without an example before this change (audit finding from\nissue #166).\n\nThe example wires a `MessageSink<byte[]>` that logs each record's\nlength plus a short hex preview. Useful as a reference for raw\nproxying, archival, or pre-format inspection where the pipeline\nstays in `byte[]` end-to-end with no SerDe.",
          "is_bot": false,
          "headline": "docs(examples): add KPipe.bytes example (refs #166) (#183)",
          "author_name": "Mariano Gonzalez",
          "author_login": "eschizoid",
          "committed_at": "2026-06-18T18:28:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 41,
      "commits_last_year": 256,
      "latest_release_at": "2026-07-20T04:20:58Z",
      "latest_release_tag": "v1.18.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 22,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 6.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 7,
      "stars": 57,
      "watchers": 3,
      "fork_history": {
        "days": [
          {
            "date": "2025-04-21",
            "count": 1
          },
          {
            "date": "2025-04-22",
            "count": 1
          },
          {
            "date": "2025-04-25",
            "count": 1
          },
          {
            "date": "2026-03-09",
            "count": 1
          },
          {
            "date": "2026-03-12",
            "count": 1
          },
          {
            "date": "2026-03-14",
            "count": 1
          },
          {
            "date": "2026-04-15",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 7,
        "total_forks": 7
      },
      "star_history": null,
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "justfile"
      ],
      "api_schema_files": [
        "lib/kpipe-consumer/src/test/resources/protobuf/customer.proto"
      ],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "benchmarks/build.gradle.kts",
        "build.gradle.kts",
        "examples/avro/build.gradle.kts",
        "examples/build.gradle.kts",
        "examples/bytes/build.gradle.kts",
        "examples/circuit-breaker/build.gradle.kts",
        "examples/custom-format/build.gradle.kts",
        "examples/demo/build.gradle.kts",
        "examples/json/build.gradle.kts",
        "examples/protobuf-schema-registry/build.gradle.kts",
        "examples/protobuf/build.gradle.kts",
        "examples/schema-registry/build.gradle.kts",
        "examples/tracing/build.gradle.kts",
        "lib/build.gradle.kts",
        "lib/kpipe-api/build.gradle.kts",
        "lib/kpipe-bom/build.gradle.kts",
        "lib/kpipe-consumer/build.gradle.kts",
        "lib/kpipe-core/build.gradle.kts",
        "lib/kpipe-format-avro/build.gradle.kts",
        "lib/kpipe-format-json/build.gradle.kts",
        "lib/kpipe-format-protobuf-confluent/build.gradle.kts",
        "lib/kpipe-format-protobuf/build.gradle.kts",
        "lib/kpipe-metrics-otel/build.gradle.kts",
        "lib/kpipe-metrics/build.gradle.kts",
        "lib/kpipe-producer/build.gradle.kts",
        "lib/kpipe-schema-registry-confluent/build.gradle.kts",
        "lib/kpipe-test/build.gradle.kts",
        "lib/kpipe-tracing-otel/build.gradle.kts"
      ],
      "largest_source_bytes": 66676,
      "source_files_sampled": 293,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "benchmarks/build.gradle.kts",
        "build.gradle.kts",
        "examples/build.gradle.kts",
        "lib/build.gradle.kts"
      ],
      "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": [
        "maven"
      ],
      "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": 237,
        "open_issues": 1,
        "closed_ratio": 0.967,
        "closed_issues": 29,
        "closed_unmerged_prs": 11
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "eschizoid",
          "commits": 304,
          "avatar_url": "https://avatars.githubusercontent.com/u/8173837?v=4"
        },
        {
          "type": "User",
          "login": "igor-soldev",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/229307367?v=4"
        },
        {
          "type": "User",
          "login": "jkondrat",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/5969801?v=4"
        },
        {
          "type": "User",
          "login": "matheusandre1",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/92062874?v=4"
        }
      ],
      "contributors_sampled": 4,
      "top_contributor_share": 0.99
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "benchmarks.yaml",
        "ci.yaml",
        "release.yaml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 9,
            "reason": "binaries present in source code",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 1,
            "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": 9,
            "reason": "29 out of 30 merged PRs checked by a CI test -- score normalized to 9",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/29 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "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": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 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": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "f090ec6365d334f22554b39f169cd3faab1fd4ac",
        "ran_at": "2026-07-24T14:17:07Z",
        "aggregate_score": 5.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T14:15:05Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-24T13:14:47Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 50,
          "created_at": "2025-04-20T23:04:37Z",
          "last_comment_at": "2025-04-20T23:05:41Z",
          "last_comment_author": "eschizoid"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/eschizoid/kpipe",
    "host": "github.com",
    "name": "kpipe",
    "owner": "eschizoid"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 62,
      "inputs": {
        "security": 51,
        "vitality": 87,
        "community": 43,
        "governance": 50,
        "engineering": 74
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 87,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "commits_last_year": 256,
              "human_commit_share": 0.94,
              "days_since_last_push": 0,
              "active_weeks_last_year": 22
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "22/52 weeks with commits",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 22
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "256 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 256
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 41,
              "latest_release_tag": "v1.18.0",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 6.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "41 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 41
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~6.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 6.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "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": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 43,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 37,
            "inputs": {
              "forks": 7,
              "stars": 57,
              "watchers": 3,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "57 stars",
                "points": 28.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 57
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "7 forks",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "3 watchers",
                "points": 1.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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 (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-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": 50,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 4,
              "top_contributor_share": 0.99
            },
            "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 99% of commits",
                "points": 0.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "4 contributors",
                "points": 5.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "merged_prs": 237,
              "open_issues": 1,
              "closed_issues": 29,
              "issue_closed_ratio": 0.967,
              "closed_unmerged_prs": 11
            },
            "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": "237/248 decided PRs merged",
                "points": 36.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 237,
                      "decided": 248
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/29 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 61,
            "inputs": {
              "followers": 89,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "eschizoid",
              "public_repos": 142,
              "account_age_days": 4391
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "89 followers of eschizoid",
                "points": 14.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 89,
                      "login": "eschizoid"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "142 public repos, account ~12 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 142
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 12
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 74,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "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": 24,
                "status": "met",
                "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": "29 out of 30 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "apache-kafka",
                "data-pipelines",
                "event-driven",
                "functional-programming",
                "java",
                "kafka",
                "stream-processing"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": 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": 51,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 51,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "29 out of 30 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/29 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 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": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "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": 4
            },
            "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": "moderate",
        "name": "AI Readiness",
        "value": 68,
        "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": 1,
              "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": "94 of 94 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 94,
                      "sampled": 94
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "justfile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.02,
              "toolchain_manifests": [
                "benchmarks/build.gradle.kts",
                "build.gradle.kts",
                "examples/avro/build.gradle.kts",
                "examples/build.gradle.kts",
                "examples/bytes/build.gradle.kts",
                "examples/circuit-breaker/build.gradle.kts",
                "examples/custom-format/build.gradle.kts",
                "examples/demo/build.gradle.kts",
                "examples/json/build.gradle.kts",
                "examples/protobuf-schema-registry/build.gradle.kts",
                "examples/protobuf/build.gradle.kts",
                "examples/schema-registry/build.gradle.kts",
                "examples/tracing/build.gradle.kts",
                "lib/build.gradle.kts",
                "lib/kpipe-api/build.gradle.kts",
                "lib/kpipe-bom/build.gradle.kts",
                "lib/kpipe-consumer/build.gradle.kts",
                "lib/kpipe-core/build.gradle.kts",
                "lib/kpipe-format-avro/build.gradle.kts",
                "lib/kpipe-format-json/build.gradle.kts",
                "lib/kpipe-format-protobuf-confluent/build.gradle.kts",
                "lib/kpipe-format-protobuf/build.gradle.kts",
                "lib/kpipe-metrics-otel/build.gradle.kts",
                "lib/kpipe-metrics/build.gradle.kts",
                "lib/kpipe-producer/build.gradle.kts",
                "lib/kpipe-schema-registry-confluent/build.gradle.kts",
                "lib/kpipe-test/build.gradle.kts",
                "lib/kpipe-tracing-otel/build.gradle.kts"
              ],
              "dependency_bot_commit_share": 0.06
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "justfile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "justfile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Java (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Java"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "2 of the last 100 commits agent-authored or agent-credited",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 2,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "6 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 6,
                      "sampled": 100
                    }
                  }
                ],
                "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": 100,
            "inputs": {
              "primary_language": "Java",
              "largest_source_bytes": 66676,
              "source_files_sampled": 293,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Java (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Java"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/293 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 293,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "good",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": [
                "lib/kpipe-consumer/src/test/resources/protobuf/customer.proto"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "lib/kpipe-consumer/src/test/resources/protobuf/customer.proto",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lib/kpipe-consumer/src/test/resources/protobuf/customer.proto"
                    }
                  }
                ],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T14:17:27.655567Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/e/eschizoid/kpipe.svg",
  "full_name": "eschizoid/kpipe",
  "license_state": "standard",
  "license_spdx": "Apache-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.