v0.12.0 dccd128

.hexcheck.yaml RawHistoryFolder

1version: 1
2components:
3  domain:
4    role: core
5    paths:
6      - internal/domain/**
7  usecase:
8    role: usecase
9    paths:
10      - internal/usecase/**
11  ports:
12    role: ports
13    paths:
14      - internal/ports/**
15  adapters:
16    role: adapter
17    paths:
18      - internal/adapters/**
19  clientlimit:
20    # Per-client HTTP rate limiting: infrastructure shared by the HTTP adapters.
21    role: adapter
22    paths:
23      - internal/clientlimit/**
24  entrypoints:
25    # cmd/ermite only calls app.Run.
26    role: entrypoint
27    paths:
28      - cmd/**
29  app:
30    # Composition root and CLI: builds the adapters and wires them to the use
31    # cases. hexcheck has no dedicated bootstrap role; entrypoint is the
32    # closest.
33    role: entrypoint
34    paths:
35      - internal/app/**
36  config:
37    role: entrypoint
38    paths:
39      - internal/config/**
40  generated:
41    role: ignore
42    paths:
43      - gen/**
44      - '**/mocks/**'
45      - '**/*_templ.go'
46  readertest:
47    # Test-only fixtures and conformance suite for ports.RepoReader.
48    role: ignore
49    paths:
50      - internal/readertest/**
51# Cross-layer contracts live in ports: adapters and use cases import ports and
52# domain, never each other. hexcheck has no rule for an adapter importing a use
53# case or internal/app; internal/boundary/boundary_test.go enforces the full
54# import matrix.
55rules:
56  no-adapter-imports-in-core: error
57  no-infra-imports-in-usecase: error
58  no-framework-types-in-core: error
59  no-infra-types-in-ports: error
60  no-adapter-to-adapter-imports: warn
61  suspicious-business-logic-in-adapter: warn
62  no-local-fakes-for-ports: warn
63  missing-generated-mock-for-port: warn
64  prefer-generated-mocks: warn
65mocking:
66  generatedMockPaths:
67    - internal/ports/mocks/**
68  generatedMockNamePatterns:
69    - '{{Interface}}'
70allow:
71  # clientlimit is a shared infrastructure library, not a sibling adapter: the
72  # HTTP adapters that rate-limit clients import it by design.
73  - rule: no-adapter-to-adapter-imports
74    path: internal/adapters/githttp/**
75    reason: rate-limits Git clients with internal/clientlimit
76  - rule: no-adapter-to-adapter-imports
77    path: internal/adapters/githubapi/**
78    reason: rate-limits the clients of the REST subset with internal/clientlimit
79  - rule: no-adapter-to-adapter-imports
80    path: internal/adapters/rpc/**
81    reason: rate-limits API clients with internal/clientlimit
82  - rule: no-adapter-to-adapter-imports
83    path: internal/adapters/web/**
84    reason: rate-limits login attempts with internal/clientlimit

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 41

↑↓ moveenter openesc close