Surfacing freeze store size as a signal: a green build is compatible with a growing store
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 48/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Quiet
- Tech stack
- java
- Domain
- developer-experience
Research direction
Start in the freeze package (com.tngtech.archunit.library.freeze): read FreezingArchRule, the ViolationStore interface and its default implementation, plus ViolationLineMatcher, to see where stored violations are read and reported. Then check the freeze section of the user guide and the existing tests under the freeze test package for how output is currently asserted. Done means store size (and a delta since the last state) is exposed by ViolationStore and surfaced in a frozen rule's output, with tests covering the new reporting.
Written by the indexing model from the issue text.
Description
Hi — an observation about FreezingArchRule, not a bug report. It comes from a
formal result on separation criteria I deposited recently, and I'm opening it here
because the result says ArchUnit made the right granularity choice, and points at
one thing the current output cannot show.
What the freeze mechanism does right.
A rule of the form no dependency from A to B is a separation criterion evaluated
against a declaration of what is permitted. Such criteria have a general
degeneration: if the permitted set can be enlarged, every violation can be removed
by enlarging it, without touching the code, and the required enlargement is
computable from the violations themselves.
FreezingArchRule does not do that. It records individual violations, and the
default ViolationLineMatcher matches the specific violation rather than the
rule's predicate. Absorbing an instance does not permit the class — a new violation
of the same kind still fails. That is strictly weaker than enlarging the rule, and
it is why freezing is usable at all. The downward ratchet — fixed violations are
automatically removed from the store — is the second half of the same virtue.
What the result says you cannot see.
Any graded measure computed from the current violation count is structurally
unable to signal drift along a path of successive absorptions: it assigns the
maximal value to every absorbed state and cannot decrease as absorptions
accumulate. The information about drift is not in the violation count — it is in
the store.
As far as I can tell from the user guide, nothing reports the number of stored
violations or its change over time. A green build whose store grew by forty lines
and one whose store shrank by forty are indistinguishable from outside.
Concrete question.
Would you consider surfacing store size — and more usefully its delta since the
last recorded state — as part of a frozen rule's output, or as something a
ViolationStore implementation is expected to expose? It is a small signal and it
is the one carrying the information that the green/red verdict structurally cannot.
Reference, if the argument is of interest: Closure Trivialization in Typed
Separation Systems, https://doi.org/10.5281/zenodo.21908527 — §10 makes the
granularity distinction precise.
- Dominant language
- Java
- Stars
- 3.9k
- Forks
- 350
- Avg merge
- 3d 2m
- Merged PRs (30d)
- 13
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from TNG/ArchUnit
-
PackageMatcher wildcards don't match package names with non-ASCII lettersPossibly taken @StefanPenndorf claimed this 4 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 25/100
Maintainers usually reply within 1 day
-
beFreeOfCycles() misses cycles: TarjanComponentFinder does not return the component with the lowest node indexPossibly taken @StefanPenndorf claimed this 4 days ago. Open
Difficulty 4/5 3-5 days Newbie friendliness 30/100
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 52/100
TNG/ArchUnit#1773 · 1 comment ·
Maintainers usually reply within 1 day
-
Constructor parameters added by the compiler (inner classes, enums) make `getParameters()` / `getParameterTypes()` inconsistent and misplace parameter annotationsPossibly taken @SamuelAdigos claimed this 5 days ago. Open
Difficulty 5/5 Over a week Newbie friendliness 48/100
TNG/ArchUnit#1772 · 3 comments ·
Maintainers usually reply within 1 day
-
breaking change
Difficulty 5/5 Over a week Newbie friendliness 18/100
TNG/ArchUnit#1756 · 1 comment ·
Maintainers usually reply within 1 day
Similar issues
-
5.0.x backport enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 63/100
spring-cloud/spring-cloud-function#1507 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
open-learning-exchange/myplanet#18484 ·
Maintainers usually reply within 1 day
-
ai-driven-fuzzing bug claude Minor
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
linagora/twake-calendar-side-service#1417 · 2 comments ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
line/armeria#7109 · 3 reactions ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
open-feature/java-sdk-contrib#1966 ·
Maintainers usually reply within 1 day