woylie/let_me
77.6
Strong · 18 September 2026
2k
lines of production code
Elixir
primary language
1
measurement over time
What this system is
LetMe is an authorization library for Elixir that enables developers to define and evaluate complex access control policies using dynamic logical expressions. It provides a Domain Specific Language for composing rules with granular filtering, supports configurable error reporting, and includes utilities for data redaction and schema scoping. The system shifts from static allow/deny lists to expression-based evaluation, allowing for composable and maintainable security logic.
Features
New 'Rules and Checks' cheatsheet added
A new documentation file, \cheatsheets/rules.cheatmd\, has been added to provide examples and guidance on defining policies, checks, and rules within the application. This resource covers minimal examples for policy and check modules, demonstrates how to implement checks with and without options, shows how to handle object-dependent checks, and illustrates various rule configurations such as combining checks with AND/OR logic, conditional allows/denies, and adding descriptions.
cheatsheets · high confidence
Behavioural changes
LetMe authorization library introduces expression-based rules and configurable error handling
The library has been refactored to replace static allow/deny lists with dynamic logical expressions (powered by the Spek library) for defining authorization rules, enabling more complex and composable policy logic. This change introduces a new \LetMe.Rule\ struct to store these expressions and pre-hooks, and updates the \LetMe.Policy\ DSL to compile these expressions into optimized authorization functions. Additionally, users can now configure the error response format via the \:error\ option (supporting \:simple\, \:detailed\, or custom values) in \use LetMe.Policy\ and individual \authorize\ calls, allowing for either basic boolean checks or detailed error structs containing the evaluated expression parts. The \LetMe.Schema\ behavior remains available for scoping queries and redacting fields, but the core authorization mechanism has shifted from list-based matching to expression evaluation.
_lib/let\me · high confidence
Library renamed from Expel to LetMe with new authorization rule filtering
The library has been renamed from Expel to LetMe. The previous \Expel\ module and its \hello/0\ function have been removed and replaced by the new \LetMe\ module, which provides core functionality for defining and evaluating authorization rules. This includes a new \filter\_rules/2\ function that allows users to filter lists of authorization rules by object, action, check (including specific arguments or custom matchers), and metadata, facilitating more granular policy management.
lib · high confidence
Project renamed to LetMe with updated documentation and configuration
The project has been renamed from Expel to LetMe, reflected in the updated README, .gitignore (tarball patterns), and .formatter.exs (exported macro locals). The configuration files .credo.exs, renovate.json, coveralls.json, SECURITY.md, CODE\_OF\_CONDUCT.md, and LICENSE have been added or updated to align with the new project identity and tooling standards.
(repo-wide) · high confidence
Test coverage
Added test suite for LetMe redaction logic; Added test support modules for authorization policy testing; Added tests for policy evaluation and unauthorized error handling.
Dependencies
Project renamed to LetMe with dependency and tooling updates
The project has been renamed from Expel to LetMe, updating the application ID, module names, and package metadata. Several dependencies have been updated or added: castore is pinned to 1.0.20, credo to 1.7.19, dialyxir to 1.4.7, ex\_doc to 0.40.3, and excoveralls to 0.18.5. Additionally, makeup\_diff (0.1.1) and spek (\~\> 0.5.0) have been added to the dependency list. The project version is set to 3.0.4.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 78.
Lenses
- Code Health 100
- Architecture 100
- Maturity 59
- Readiness 90
- Security 97
Changes since last survey
- 300 commits — 282 feature/other, 18 fixes
By area
- (root) — 123 commits
- (repo) — 99 commits
- lib/let_me — 40 commits
- .github/workflows — 24 commits
- test/let_me — 5 commits
- lib/let_me.ex — 3 commits
- .github/dependabot.yml — 2 commits
- .github/CODEOWNERS — 1 commit
- .github/FUNDING.yml — 1 commit
- test/let_me_test.exs — 1 commit
- test/support — 1 commit
Notable commits
- fix: Merge pull request #123 from woylie/fix/readme-example
- fix: Merge pull request #136 from woylie/fix/coveralls-uploads
- fix: Merge pull request #162 from woylie/fix-exception-checks
- fix: Merge pull request #190 from woylie/fixes
- fix: Merge pull request #198 from woylie/fix/clause-will-never-match
- fix: Merge pull request #60 from woylie/fix-docs-about-passing-module
- fix: fix compile warning for branches based on rules the evaluate to literal
- fix: fix compile-time warnings if expression is a literal
- fix: fix examples
- fix: fix exception checks
- fix: fix factorization folding
- fix: fix flaky test
- fix: fix log metadata for unknown rules
- fix: fix option name
- fix: fix readme check function examples, clarify arity
- fix: fix type reference
- fix: fix type spec
- fix: fix: package cheatsheets
- change: Bump actions/cache from 3 to 4
- change: Bump actions/checkout from 3 to 4
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
woylie/let_me was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 18 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit d8ce5c24b9f1cddb09fb19ef1cdf57d546265060 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-5d04157a340d.