{
  "version": 1,
  "repo": "honojs/hono",
  "builtAt": "2026-11-10T21:40:01.852Z",
  "baseRate": 0.09034267912772585,
  "prs": 983,
  "labelled": 963,
  "bad": 87,
  "rules": [
    {
      "id": "learned.risk.hotspot-dir:src/helper",
      "title": "Fragile area: src/helper/",
      "category": "risk",
      "paths": [
        "src/helper/**"
      ],
      "kind": "hotspot-dir",
      "fileLevel": false,
      "matched": 124,
      "bad": 27,
      "rate": 0.21774193548387097,
      "lift": 2.4101779755283648,
      "examples": [
        {
          "number": 5541,
          "title": "feat!: add routable error and not-found middleware",
          "url": "https://github.com/honojs/hono/pull/5541",
          "fixedBy": [
            {
              "number": 5563,
              "url": "https://github.com/honojs/hono/pull/5563"
            }
          ],
          "reverted": false
        },
        {
          "number": 5500,
          "title": "chore!: remove deprecated APIs",
          "url": "https://github.com/honojs/hono/pull/5500",
          "fixedBy": [
            {
              "number": 5514,
              "url": "https://github.com/honojs/hono/pull/5514"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/types.ts",
      "title": "Hotspot: src/types.ts",
      "category": "risk",
      "paths": [
        "src/types.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 47,
      "bad": 15,
      "rate": 0.3191489361702128,
      "lift": 3.5326485693323555,
      "examples": [
        {
          "number": 5541,
          "title": "feat!: add routable error and not-found middleware",
          "url": "https://github.com/honojs/hono/pull/5541",
          "fixedBy": [
            {
              "number": 5563,
              "url": "https://github.com/honojs/hono/pull/5563"
            }
          ],
          "reverted": false
        },
        {
          "number": 4598,
          "title": "perf(types): optimize `MergeMiddlewareResponse` type",
          "url": "https://github.com/honojs/hono/pull/4598",
          "fixedBy": [
            {
              "number": 4602,
              "url": "https://github.com/honojs/hono/pull/4602"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-dir:src/validator",
      "title": "Fragile area: src/validator/",
      "category": "risk",
      "paths": [
        "src/validator/**"
      ],
      "kind": "hotspot-dir",
      "fileLevel": false,
      "matched": 33,
      "bad": 12,
      "rate": 0.36363636363636365,
      "lift": 4.025078369905956,
      "examples": [
        {
          "number": 5541,
          "title": "feat!: add routable error and not-found middleware",
          "url": "https://github.com/honojs/hono/pull/5541",
          "fixedBy": [
            {
              "number": 5563,
              "url": "https://github.com/honojs/hono/pull/5563"
            }
          ],
          "reverted": false
        },
        {
          "number": 5067,
          "title": "fix(utils/body,validator): normalize Content-Type media type for case-insensitive matching",
          "url": "https://github.com/honojs/hono/pull/5067",
          "fixedBy": [
            {
              "number": 5071,
              "url": "https://github.com/honojs/hono/pull/5071"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-dir:src/utils",
      "title": "Fragile area: src/utils/",
      "category": "risk",
      "paths": [
        "src/utils/**"
      ],
      "kind": "hotspot-dir",
      "fileLevel": false,
      "matched": 148,
      "bad": 23,
      "rate": 0.1554054054054054,
      "lift": 1.7201770736253494,
      "examples": [
        {
          "number": 5495,
          "title": "fix(utils/url): preserve encoded duplicate query order",
          "url": "https://github.com/honojs/hono/pull/5495",
          "fixedBy": [
            {
              "number": 5607,
              "url": "https://github.com/honojs/hono/pull/5607"
            }
          ],
          "reverted": false
        },
        {
          "number": 5500,
          "title": "chore!: remove deprecated APIs",
          "url": "https://github.com/honojs/hono/pull/5500",
          "fixedBy": [
            {
              "number": 5514,
              "url": "https://github.com/honojs/hono/pull/5514"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-dir:src/client",
      "title": "Fragile area: src/client/",
      "category": "risk",
      "paths": [
        "src/client/**"
      ],
      "kind": "hotspot-dir",
      "fileLevel": false,
      "matched": 65,
      "bad": 15,
      "rate": 0.23076923076923078,
      "lift": 2.554376657824934,
      "examples": [
        {
          "number": 5541,
          "title": "feat!: add routable error and not-found middleware",
          "url": "https://github.com/honojs/hono/pull/5541",
          "fixedBy": [
            {
              "number": 5563,
              "url": "https://github.com/honojs/hono/pull/5563"
            }
          ],
          "reverted": false
        },
        {
          "number": 5442,
          "title": "chore: let oxfmt sort imports instead of eslint",
          "url": "https://github.com/honojs/hono/pull/5442",
          "fixedBy": [
            {
              "number": 5475,
              "url": "https://github.com/honojs/hono/pull/5475"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/hono-base.ts",
      "title": "Hotspot: src/hono-base.ts",
      "category": "risk",
      "paths": [
        "src/hono-base.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 49,
      "bad": 13,
      "rate": 0.2653061224489796,
      "lift": 2.9366643209007743,
      "examples": [
        {
          "number": 5541,
          "title": "feat!: add routable error and not-found middleware",
          "url": "https://github.com/honojs/hono/pull/5541",
          "fixedBy": [
            {
              "number": 5563,
              "url": "https://github.com/honojs/hono/pull/5563"
            }
          ],
          "reverted": false
        },
        {
          "number": 5511,
          "title": "chore!: remove deprecated `app.mount()`",
          "url": "https://github.com/honojs/hono/pull/5511",
          "fixedBy": [
            {
              "number": 5513,
              "url": "https://github.com/honojs/hono/pull/5513"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/helper/factory/index.ts",
      "title": "Hotspot: src/helper/factory/index.ts",
      "category": "risk",
      "paths": [
        "src/helper/factory/index.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 21,
      "bad": 8,
      "rate": 0.38095238095238093,
      "lift": 4.216748768472907,
      "examples": [
        {
          "number": 4568,
          "title": "chore: bump linter and formatter",
          "url": "https://github.com/honojs/hono/pull/4568",
          "fixedBy": [
            {
              "number": 4583,
              "url": "https://github.com/honojs/hono/pull/4583"
            }
          ],
          "reverted": false
        },
        {
          "number": 4465,
          "title": "fix(types): cannot `.use` non-return mw from `createMiddleware`",
          "url": "https://github.com/honojs/hono/pull/4465",
          "fixedBy": [
            {
              "number": 4492,
              "url": "https://github.com/honojs/hono/pull/4492"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/context.ts",
      "title": "Hotspot: src/context.ts",
      "category": "risk",
      "paths": [
        "src/context.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 69,
      "bad": 14,
      "rate": 0.2028985507246377,
      "lift": 2.245877061469266,
      "examples": [
        {
          "number": 5541,
          "title": "feat!: add routable error and not-found middleware",
          "url": "https://github.com/honojs/hono/pull/5541",
          "fixedBy": [
            {
              "number": 5563,
              "url": "https://github.com/honojs/hono/pull/5563"
            }
          ],
          "reverted": false
        },
        {
          "number": 4707,
          "title": "perf(context): add fast path to c.json() matching c.text() optimization",
          "url": "https://github.com/honojs/hono/pull/4707",
          "fixedBy": [
            {
              "number": 4757,
              "url": "https://github.com/honojs/hono/pull/4757"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/helper/adapter/index.ts",
      "title": "Hotspot: src/helper/adapter/index.ts",
      "category": "risk",
      "paths": [
        "src/helper/adapter/index.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 9,
      "bad": 5,
      "rate": 0.5555555555555556,
      "lift": 6.149425287356323,
      "examples": [
        {
          "number": 4568,
          "title": "chore: bump linter and formatter",
          "url": "https://github.com/honojs/hono/pull/4568",
          "fixedBy": [
            {
              "number": 4583,
              "url": "https://github.com/honojs/hono/pull/4583"
            }
          ],
          "reverted": false
        },
        {
          "number": 3856,
          "title": "fix(helper/adapter): `env` should set `c` type correctly",
          "url": "https://github.com/honojs/hono/pull/3856",
          "fixedBy": [
            {
              "number": 3885,
              "url": "https://github.com/honojs/hono/pull/3885"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-dir:src/preset",
      "title": "Fragile area: src/preset/",
      "category": "risk",
      "paths": [
        "src/preset/**"
      ],
      "kind": "hotspot-dir",
      "fileLevel": false,
      "matched": 7,
      "bad": 4,
      "rate": 0.5714285714285714,
      "lift": 6.325123152709359,
      "examples": [
        {
          "number": 5541,
          "title": "feat!: add routable error and not-found middleware",
          "url": "https://github.com/honojs/hono/pull/5541",
          "fixedBy": [
            {
              "number": 5563,
              "url": "https://github.com/honojs/hono/pull/5563"
            }
          ],
          "reverted": false
        },
        {
          "number": 4568,
          "title": "chore: bump linter and formatter",
          "url": "https://github.com/honojs/hono/pull/4568",
          "fixedBy": [
            {
              "number": 4583,
              "url": "https://github.com/honojs/hono/pull/4583"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-dir:src/router",
      "title": "Fragile area: src/router/",
      "category": "risk",
      "paths": [
        "src/router/**"
      ],
      "kind": "hotspot-dir",
      "fileLevel": false,
      "matched": 50,
      "bad": 10,
      "rate": 0.2,
      "lift": 2.213793103448276,
      "examples": [
        {
          "number": 5547,
          "title": "fix(reg-exp-router): support line terminators in route paths for v5",
          "url": "https://github.com/honojs/hono/pull/5547",
          "fixedBy": [
            {
              "number": 5552,
              "url": "https://github.com/honojs/hono/pull/5552"
            }
          ],
          "reverted": false
        },
        {
          "number": 5541,
          "title": "feat!: add routable error and not-found middleware",
          "url": "https://github.com/honojs/hono/pull/5541",
          "fixedBy": [
            {
              "number": 5563,
              "url": "https://github.com/honojs/hono/pull/5563"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/utils/types.ts",
      "title": "Hotspot: src/utils/types.ts",
      "category": "risk",
      "paths": [
        "src/utils/types.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 18,
      "bad": 6,
      "rate": 0.3333333333333333,
      "lift": 3.689655172413793,
      "examples": [
        {
          "number": 4568,
          "title": "chore: bump linter and formatter",
          "url": "https://github.com/honojs/hono/pull/4568",
          "fixedBy": [
            {
              "number": 4583,
              "url": "https://github.com/honojs/hono/pull/4583"
            }
          ],
          "reverted": false
        },
        {
          "number": 3443,
          "title": "perf(types): replace intersection with union to get better perf",
          "url": "https://github.com/honojs/hono/pull/3443",
          "fixedBy": [
            {
              "number": 3507,
              "url": "https://github.com/honojs/hono/pull/3507"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/validator/validator.ts",
      "title": "Hotspot: src/validator/validator.ts",
      "category": "risk",
      "paths": [
        "src/validator/validator.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 20,
      "bad": 6,
      "rate": 0.3,
      "lift": 3.320689655172414,
      "examples": [
        {
          "number": 5067,
          "title": "fix(utils/body,validator): normalize Content-Type media type for case-insensitive matching",
          "url": "https://github.com/honojs/hono/pull/5067",
          "fixedBy": [
            {
              "number": 5071,
              "url": "https://github.com/honojs/hono/pull/5071"
            }
          ],
          "reverted": false
        },
        {
          "number": 4568,
          "title": "chore: bump linter and formatter",
          "url": "https://github.com/honojs/hono/pull/4568",
          "fixedBy": [
            {
              "number": 4583,
              "url": "https://github.com/honojs/hono/pull/4583"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/middleware/etag/digest.ts",
      "title": "Hotspot: src/middleware/etag/digest.ts",
      "category": "risk",
      "paths": [
        "src/middleware/etag/digest.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 9,
      "bad": 4,
      "rate": 0.4444444444444444,
      "lift": 4.919540229885057,
      "examples": [
        {
          "number": 5205,
          "title": "fix(etag): stabilize digest across stream chunks",
          "url": "https://github.com/honojs/hono/pull/5205",
          "fixedBy": [
            {
              "number": 5239,
              "url": "https://github.com/honojs/hono/pull/5239"
            }
          ],
          "reverted": false
        },
        {
          "number": 5199,
          "title": " fix(etag): resolve incorrect incremental hashing for chunked responses",
          "url": "https://github.com/honojs/hono/pull/5199",
          "fixedBy": [
            {
              "number": 5205,
              "url": "https://github.com/honojs/hono/pull/5205"
            }
          ],
          "reverted": true
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/request.ts",
      "title": "Hotspot: src/request.ts",
      "category": "risk",
      "paths": [
        "src/request.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 36,
      "bad": 8,
      "rate": 0.2222222222222222,
      "lift": 2.4597701149425286,
      "examples": [
        {
          "number": 5500,
          "title": "chore!: remove deprecated APIs",
          "url": "https://github.com/honojs/hono/pull/5500",
          "fixedBy": [
            {
              "number": 5514,
              "url": "https://github.com/honojs/hono/pull/5514"
            }
          ],
          "reverted": false
        },
        {
          "number": 5282,
          "title": "fix(request): drop stale content length for cloned FormData",
          "url": "https://github.com/honojs/hono/pull/5282",
          "fixedBy": [
            {
              "number": 5288,
              "url": "https://github.com/honojs/hono/pull/5288"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/middleware/etag/index.ts",
      "title": "Hotspot: src/middleware/etag/index.ts",
      "category": "risk",
      "paths": [
        "src/middleware/etag/index.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 21,
      "bad": 6,
      "rate": 0.2857142857142857,
      "lift": 3.1625615763546797,
      "examples": [
        {
          "number": 5111,
          "title": "feat(etag): support conditional requests for the QUERY method",
          "url": "https://github.com/honojs/hono/pull/5111",
          "fixedBy": [
            {
              "number": 5196,
              "url": "https://github.com/honojs/hono/pull/5196"
            },
            {
              "number": 5199,
              "url": "https://github.com/honojs/hono/pull/5199"
            },
            {
              "number": 5234,
              "url": "https://github.com/honojs/hono/pull/5234"
            }
          ],
          "reverted": false
        },
        {
          "number": 4198,
          "title": "fix(etag): fallback if `res.clone()` is not supported",
          "url": "https://github.com/honojs/hono/pull/4198",
          "fixedBy": [
            {
              "number": 4200,
              "url": "https://github.com/honojs/hono/pull/4200"
            }
          ],
          "reverted": true
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/helper/streaming/sse.ts",
      "title": "Hotspot: src/helper/streaming/sse.ts",
      "category": "risk",
      "paths": [
        "src/helper/streaming/sse.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 11,
      "bad": 4,
      "rate": 0.36363636363636365,
      "lift": 4.025078369905956,
      "examples": [
        {
          "number": 5135,
          "title": "fix(sse): emit retry feild when retry is `0`",
          "url": "https://github.com/honojs/hono/pull/5135",
          "fixedBy": [
            {
              "number": 5138,
              "url": "https://github.com/honojs/hono/pull/5138"
            }
          ],
          "reverted": false
        },
        {
          "number": 3393,
          "title": "chore(lint): ESLint v9",
          "url": "https://github.com/honojs/hono/pull/3393",
          "fixedBy": [
            {
              "number": 3441,
              "url": "https://github.com/honojs/hono/pull/3441"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/middleware/cors/index.ts",
      "title": "Hotspot: src/middleware/cors/index.ts",
      "category": "risk",
      "paths": [
        "src/middleware/cors/index.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 13,
      "bad": 4,
      "rate": 0.3076923076923077,
      "lift": 3.4058355437665786,
      "examples": [
        {
          "number": 5210,
          "title": "  perf(cors): pre-join static array header options during initialization",
          "url": "https://github.com/honojs/hono/pull/5210",
          "fixedBy": [
            {
              "number": 5235,
              "url": "https://github.com/honojs/hono/pull/5235"
            }
          ],
          "reverted": false
        },
        {
          "number": 3089,
          "title": "chore: update outdated links in JSDoc",
          "url": "https://github.com/honojs/hono/pull/3089",
          "fixedBy": [
            {
              "number": 3134,
              "url": "https://github.com/honojs/hono/pull/3134"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/utils/body.ts",
      "title": "Hotspot: src/utils/body.ts",
      "category": "risk",
      "paths": [
        "src/utils/body.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 13,
      "bad": 4,
      "rate": 0.3076923076923077,
      "lift": 3.4058355437665786,
      "examples": [
        {
          "number": 5067,
          "title": "fix(utils/body,validator): normalize Content-Type media type for case-insensitive matching",
          "url": "https://github.com/honojs/hono/pull/5067",
          "fixedBy": [
            {
              "number": 5071,
              "url": "https://github.com/honojs/hono/pull/5071"
            }
          ],
          "reverted": false
        },
        {
          "number": 4568,
          "title": "chore: bump linter and formatter",
          "url": "https://github.com/honojs/hono/pull/4568",
          "fixedBy": [
            {
              "number": 4583,
              "url": "https://github.com/honojs/hono/pull/4583"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.risk.hotspot-file:src/adapter/cloudflare-workers/websocket.ts",
      "title": "Hotspot: src/adapter/cloudflare-workers/websocket.ts",
      "category": "risk",
      "paths": [
        "src/adapter/cloudflare-workers/websocket.ts"
      ],
      "kind": "hotspot-file",
      "fileLevel": true,
      "matched": 8,
      "bad": 3,
      "rate": 0.375,
      "lift": 4.150862068965518,
      "examples": [
        {
          "number": 5463,
          "title": "feat(adapters): add the seven adapters as workspace packages",
          "url": "https://github.com/honojs/hono/pull/5463",
          "fixedBy": [
            {
              "number": 5485,
              "url": "https://github.com/honojs/hono/pull/5485"
            }
          ],
          "reverted": false
        },
        {
          "number": 3531,
          "title": "feat(ws): Make WebSocket adapter more changeable",
          "url": "https://github.com/honojs/hono/pull/3531",
          "fixedBy": [
            {
              "number": 3570,
              "url": "https://github.com/honojs/hono/pull/3570"
            },
            {
              "number": 3576,
              "url": "https://github.com/honojs/hono/pull/3576"
            },
            {
              "number": 3616,
              "url": "https://github.com/honojs/hono/pull/3616"
            }
          ],
          "reverted": false
        }
      ]
    },
    {
      "id": "learned.hygiene.title-style",
      "title": "Titles follow \"Conventional Commits (type(scope): summary)\"",
      "category": "hygiene",
      "when": {
        "titleMustMatch": "^(feat|fix|chore|docs|refactor|test|tests|perf|ci|build|style|revert)(\\([^)]+\\))?!?: \\S"
      },
      "kind": "title",
      "fileLevel": false,
      "matched": 20,
      "bad": 3,
      "rate": 0.15,
      "lift": 1.660344827586207,
      "examples": [
        {
          "number": 5210,
          "title": "  perf(cors): pre-join static array header options during initialization",
          "url": "https://github.com/honojs/hono/pull/5210",
          "fixedBy": [
            {
              "number": 5235,
              "url": "https://github.com/honojs/hono/pull/5235"
            }
          ],
          "reverted": false
        },
        {
          "number": 5199,
          "title": " fix(etag): resolve incorrect incremental hashing for chunked responses",
          "url": "https://github.com/honojs/hono/pull/5199",
          "fixedBy": [
            {
              "number": 5205,
              "url": "https://github.com/honojs/hono/pull/5205"
            }
          ],
          "reverted": true
        }
      ]
    }
  ]
}
