# Changelog

## Score

- CAI 61 → 56 (-5.1)
- Rubric changed (rubric-2026.10.1 → rubric-2026.10.5) — scores are not directly comparable.

## Lenses

- Code Health 100 → 75 (-24.1)
- Architecture 99 → 99 (+0.2)
- Maturity 53 → 47 (-5.4)
- Readiness 55 → 50 (-5.4)
- Security 82 → 82 (+0.0)
- Performance 70 → 70 (+0.0)

## Resolved (2)

- Off-boarding risk: anonymized user #1
- Workflow token permissions not restricted

## New (19)

- Ambiguous relationship between `Fs2Grpc` and `Fs2GrpcPlugin`. Both types expose `requires()`, `trigger()`, and `projectSettings()`. It is unclear if `Fs2Grpc` is a configuration object used by `Fs2GrpcPlugin`, or if they are two different entry points for the same functionality. The presence of `convertOptionsToScalapbGen` only on `Fs2GrpcPlugin` suggests `Fs2Grpc` might be a subset or a different abstraction, but the overlapping method signatures (`requires`, `trigger`, `projectSettings`) are highly redundant and confusing.
- Documentation: no architecture or design documentation
- Duplicate type definition with different scopes. `CodeGeneratorOption` is defined at the top level of the `codegen` package and also re-exported/defined inside `Fs2GrpcPlugin.autoImport`. This creates confusion about which type to use in user code (e.g., `import fs2.grpc.codegen.CodeGeneratorOption` vs `import Fs2GrpcPlugin.autoImport.CodeGeneratorOption`), and suggests a lack of clear ownership for the configuration options.
- Off-boarding risk: anonymized user #1
- Orphaned file (codegen/src/main/scala/fs2/grpc/codegen/Fs2AbstractServicePrinter.scala)
- Orphaned file (codegen/src/main/scala/fs2/grpc/codegen/Fs2GrpcExhaustiveTrailersServicePrinter.scala)
- Orphaned file (otel4s-trace/src/main/scala/fs2/grpc/otel4s/trace/GrpcSpanFinalizers.scala)
- Orphaned file (otel4s-trace/src/main/scala/fs2/grpc/otel4s/trace/TraceClientAspect.scala)
- Orphaned file (runtime/src/main/scala/fs2/grpc/client/ClientAspect.scala)
- Orphaned file (runtime/src/main/scala/fs2/grpc/client/Fs2StreamClientCallListener.scala)
- Orphaned file (runtime/src/main/scala/fs2/grpc/client/internal/Fs2UnaryCallHandler.scala)
- Orphaned file (runtime/src/main/scala/fs2/grpc/server/Fs2ServerCallListener.scala)
- Orphaned file (runtime/src/main/scala/fs2/grpc/server/Fs2StreamServerCallListener.scala)
- Orphaned file (runtime/src/main/scala/fs2/grpc/server/ServiceAspect.scala)
- Orphaned file (runtime/src/main/scala/fs2/grpc/server/internal/Fs2ServerCall.scala)
- Orphaned file (runtime/src/main/scala/fs2/grpc/server/internal/Fs2UnaryServerCallHandler.scala)
- Orphaned file (runtime/src/main/scala/fs2/grpc/shared/StreamOutput.scala)
- Workflow token permissions not restricted (.github/workflows/ci.yml)
- Workflow token permissions not restricted (.github/workflows/clean.yml)

## Changes since last survey

- 6 commits — 6 feature/other, 0 fixes

## By area

- (repo) — 3 commits
- project/plugins.sbt — 3 commits

## Notable commits

- change: Merge pull request #881 from typelevel/update/compilerplugin-0.11.21
- change: Merge pull request #882 from typelevel/update/sbt-updates-0.7.1
- change: Merge pull request #883 from typelevel/update/sbt-protoc-gen-project-0.2.0
- change: Update compilerplugin, scalapb-runtime, ... to 0.11.21
- change: Update sbt-protoc-gen-project to 0.2.0
- change: Update sbt-updates to 0.7.1
