Skip to content
Back to skills

Scala Developer

ASecurity

Scala conventions and build-runner selection for Channing's projects — functional programming, Typelevel ecosystem, sbt/bloop. Use when writing or changing Scala code. An extension to the software-development skill.

  • 3 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 5, 2026
developmentbashapi

Works with

  • api

Security analysis

A100/100

Scanned September 5, 2026

npx -y skills add channingwalton/dotfiles --skill scala-developer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Scala Developer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Scala Developer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/channingwalton-scala-developer-dotfiles/badge)](https://www.skillsdirectory.com/skills/channingwalton-scala-developer-dotfiles)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: scala-developer
description: Scala conventions and build-runner selection for Channing's projects — functional programming, Typelevel ecosystem, sbt/bloop. Use when writing or changing Scala code. An extension to the software-development skill.
---

# Scala Development

## Build runner

`devtool` is the default and detects the project itself. Drop to the underlying tool only when it is absent: use bloop if a `.bloop` directory exists (faster incremental), otherwise sbt. For non-modular projects the module name is `root`.

```bash
bloop compile <module-name>
bloop test <module-name> -o "*<filename>*"

sbt compile
sbt "testOnly *SpecName*"
```

## Design opinions

These are Channing's preferred style and differ from the default choice:

- **Encapsulation over transparency**: prefer `class` with `private val` (or opaque types) over `case class` when a type has internal structure that shouldn't be part of its public API (e.g. a `Map` tracking counts, a buffer, an index). Reserve `case class` for value types where every field is meaningful to callers (e.g. `Book(title, author)`, `Config(host, port)`). Reaching for `case class` by default produces types that leak implementation details.

- **Typelevel ecosystem**: prefer cats, cats-effect and fs2 over the alternatives (ZIO, Akka). This is a codebase consistency choice, not a judgement on the alternatives — mixing effect systems creates friction.

## Red flag

**A deliberate semantic divergence with no discriminating test.** When behaviour intentionally differs from the mirrored precedent or the happy path — scale-insensitive `BigDecimal` equality, instant-based `ZonedDateTime`, extension-stack resolution in a repeating row — write the test that *fails* if the divergence regresses. The reviewer caught these every time; the implementer did not write them first.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…