v0.35.0 e86dbd6

.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  httprange:
25    # Byte-range selection: infrastructure shared by the HTTP adapters.
26    role: adapter
27    paths:
28      - internal/httprange/**
29  entrypoints:
30    # cmd/ermite only calls app.Run.
31    role: entrypoint
32    paths:
33      - cmd/**
34  app:
35    # Composition root and CLI: builds the adapters and wires them to the use
36    # cases. hexcheck has no dedicated bootstrap role; entrypoint is the
37    # closest.
38    role: entrypoint
39    paths:
40      - internal/app/**
41  config:
42    role: entrypoint
43    paths:
44      - internal/config/**
45  generated:
46    role: ignore
47    paths:
48      - gen/**
49      - '**/mocks/**'
50      - '**/*_templ.go'
51  readertest:
52    # Test-only fixtures and conformance suite for ports.RepoReader.
53    role: ignore
54    paths:
55      - internal/readertest/**
56# Cross-layer contracts live in ports: adapters and use cases import ports and
57# domain, never each other. hexcheck has no rule for an adapter importing a use
58# case or internal/app; internal/boundary/boundary_test.go enforces the full
59# import matrix.
60rules:
61  no-adapter-imports-in-core: error
62  no-infra-imports-in-usecase: error
63  no-framework-types-in-core: error
64  no-infra-types-in-ports: error
65  no-adapter-to-adapter-imports: warn
66  suspicious-business-logic-in-adapter: warn
67  no-local-fakes-for-ports: warn
68  missing-generated-mock-for-port: warn
69  prefer-generated-mocks: warn
70mocking:
71  generatedMockPaths:
72    - internal/ports/mocks/**
73  generatedMockNamePatterns:
74    - '{{Interface}}'
75allow:
76  # Secret-source exclusivity and file decoding are configuration validation,
77  # not domain policy; config is intentionally a composition-root helper.
78  - rule: suspicious-business-logic-in-adapter
79    path: internal/config/config.go
80    reason: validates explicit environment and secret-file sources at startup
81  # clientlimit is a shared infrastructure library, not a sibling adapter: the
82  # HTTP adapters that rate-limit clients import it by design.
83  - rule: no-adapter-to-adapter-imports
84    path: internal/adapters/githttp/**
85    reason: rate-limits Git clients with internal/clientlimit
86  - rule: no-adapter-to-adapter-imports
87    path: internal/adapters/githubapi/**
88    reason: rate-limits the clients of the REST subset with internal/clientlimit and selects byte ranges with internal/httprange
89  - rule: no-adapter-to-adapter-imports
90    path: internal/adapters/oidchttp/**
91    reason: rate-limits the clients of the OIDC token endpoint with internal/clientlimit
92  - rule: no-adapter-to-adapter-imports
93    path: internal/adapters/rpc/**
94    reason: rate-limits API clients with internal/clientlimit
95  - rule: no-adapter-to-adapter-imports
96    path: internal/adapters/web/**
97    reason: rate-limits login attempts with internal/clientlimit and selects byte ranges with internal/httprange

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 45

↑↓ moveenter openesc close