Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteAnton Brilliantov’s proposal is to make a repository declaration the authoritative record for deployable service facts, then generate the service-catalog card and check the generated files in CI. The important part is not generation alone: CI must fail when the checked-in output no longer matches its inputs. Otherwise, generated documentation can become stale just like a hand-maintained wiki.
What “a service exists when it is declared” means
In Brilliantov’s model, the declaration is operational, not just descriptive: a service that is not declared does not deploy, and therefore is not included in the catalog. The card is a rendering of that declaration and its evidence, rather than a separate record someone must remember to update. This aims to give deployment and catalog information one authoritative home.
As an Amazon Associate I earn from qualifying purchases.
The approach is not a claim that a declaration can describe every useful fact automatically. A generated card is only as complete as its structured inputs and evidence sources. In particular, a service’s own manifest cannot establish who calls it; incoming links need evidence beyond the callee’s declaration.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
What the generated service card contains
Brilliantov describes seven rows for a card. Some can come from service declarations; others depend on additional evidence or interpretation.
#1 Best Overall
| Card row | What it records |
|---|---|
| Daemons and roles | Runtime components, including synchronous handlers and background processing. |
| Resources | Databases, queues, schedules, and migrations. |
| Environment variables | Configuration names, including where service-owned variables are defined. |
| Default metrics | A snapshot of metrics the service exposes. |
| Owner and team | Ownership recorded in declaration fields. |
| Incoming links | Services or callers that invoke this service; this cannot be inferred from the callee’s manifest alone. |
| Declared commitments | Service commitments associated with metrics capable of measuring them. |
What Brilliantov’s project snapshot shows
The figures below are counts reported by Brilliantov for his project in 2026, not industry benchmarks. They illustrate what his catalog captures, not what another team should expect.
| Snapshot | Reported count and breakdown | Additional detail |
|---|---|---|
| Environment variables | 59 total: 45 platform-declared and 14 service-defined. | The catalog records a platform catalog owner for platform variables, and the file and line where service variables are read. |
| Metrics | 67 snapshot records: 59 from the platform, 6 from the service, and one <dynamic> record for the dynamic-metric factory. |
Records include name, type, help text, labels, histogram buckets, source, and declaration location. |
Why generation needs a drift check
Generating a file once does not keep it current. If declarations change but the checked-in catalog does not, the generated artifact becomes another stale document. Brilliantov’s mechanism is to run the generator in CI with --check and fail the build when output differs. He describes a corresponding check for the metrics snapshot as well.
Rank #2
The generator is built at the platform version pinned in the service’s own modules file. That makes the check compare against the version relevant to that service rather than an unrelated platform revision. Locally, Brilliantov says he reverts timestamp-only changes to avoid noisy diffs.
Checking a Go version-injection example
Brilliantov also describes a Go build failure mode: a linker -X flag targeting a missing symbol may be silently ignored. In his example, build and tests can pass while the resulting binary still reports its default dev version. He checks the binary for the expected tag with strings, so the missing symbol is caught. This is his example, not a guarantee that every Go build behaves this way in every configuration.
Rank #3
Where this approach has blind spots and costs
Runtime-assembled resource variables can be missing
The environment snapshot reads configuration declarations, so resource-variable names assembled at runtime do not appear in the generated catalog. Brilliantov documents those names separately and says checks look for expected platform names and disallowed names. This is a known gap, not complete coverage.
Schema changes are migrations
Adding a card field means changing the declaration format and regenerating snapshots across services that use it. That is more involved than adding a sentence to a wiki page, especially when many services must adopt the new format.
Rank #4
Checks create friction by design
A drift check can fail for changes a developer sees as cosmetic, such as renaming a config field, moving a line, or adding a metric. That friction is the enforcement mechanism that prevents unnoticed divergence, but it consumes developer time.
When a generated catalog is worth the work
Brilliantov says a hand-written page can be reasonable when there is one service and one person, and the service changes more slowly than the page. In that situation, declaration formats, generators, and CI checks may cost more to maintain than the errors they prevent.
For a team deciding between the approaches, the useful questions are how often service facts change, how harmful stale information is, how much of the needed information can be represented in structured declarations, and how much generator and CI maintenance the team can sustain. Also consider whether important facts are runtime-derived and therefore need separate documentation or checks. These are decision criteria, not a measured comparison of the two methods.
What is proposed, and what is not yet running
The declaration-backed files and checks are part of Brilliantov’s described project. The catalog web interface, call map, owners, and commitments are future direction in his account, not a running installation he claims to have built. The distinction matters: generating usable catalog data is a concrete repository practice; a complete service-catalog product with navigable relationships is a separate step.
Brilliantov’s closing question is useful for any team reviewing its own service documentation: which fields of the service card are generated, and which are still typed by hand?
Read Anton Brilliantov’s article, “A Service Exists When It Is Declared,” on DEV Community.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




