Update Java Spring Boot Documentation
| This documentation was generated with the assistance of AI. Please report any inaccuracies. |
Creates or refreshes the Antora documentation site for a DDD/hexagonal Spring Boot service, deriving every page from the contracts, entities, configuration classes, and Micrometer calls that are actually in the repository.
Purpose
iru-update-java-springboot-documentation does double duty on purpose: the first run scaffolds the page set, and
every later run updates it from the code — which is the only way documentation of this depth survives contact with
an evolving service.
Its governing rule is that everything on these pages is derived from something in the repository. Where
something genuinely cannot be derived — why a technology was chosen, what a use case is for, a business
constraint — the skill writes an explicit TODO: marker naming what’s needed and from whom, and never writes
plausible-sounding prose in its place. The stated reasoning: a confidently wrong architecture page is worse than an
obviously incomplete one, because nobody re-checks it. The consolidated list of TODO: markers is the most useful
part of its report.
It treats springboot-stack.yml as intent and the code as truth, so a database in the manifest with no adapter
module — or an adapter for something the manifest doesn’t list — is reported as a finding about the repository
rather than quietly reconciled.
The same discipline surfaces genuine defects as a side effect of documenting: an endpoint whose spec security doesn’t match its filter chain, an exception the code can throw but the spec doesn’t document, a property that looks dynamic but isn’t `@RefreshScope`d, a metric with unbounded tag cardinality, an index no query uses.
Unlike Setup Antora, which installs Mermaid only, this skill also wires Kroki — Mermaid handles flows and sequences, while Kroki adds PlantUML, C4, and ERD, which is what the architecture and database-model pages need. It flags that with the public Kroki server every diagram’s source text is sent to a third-party service at build time, and that a sensitive model warrants self-hosting.
Purpose group
Although grouped with the Spring Boot bootstrap family — it is the seventh sub-skill that orchestrator runs — this is the one member of that family intended to be re-run continuously, in the same spirit as Update Docs in Repository Maintenance.
Invocation
/iru-update-java-springboot-documentation
/iru-update-java-springboot-documentation <page-or-area>
Inputs
| Argument | Required | Description | Default |
|---|---|---|---|
|
No |
Positional argument naming a single page or area to refresh: |
Absent means every page |
|
No |
Read for the declared stack, as intent to be checked against the code rather than as truth. |
|
The codebase |
Yes |
The real source: |
None — derived |
Outputs
-
An Antora site with Kroki installed alongside Mermaid and the playbook amended (
kroki-fetch-diagram,kroki-server-url), plus anapi-docs-urlattribute indocs/antora.yml— resolved from the GitHub Pages API, the git remote, or a custom domain — through which every API page links to its generated reference. -
index.adoc— the service overview: purpose, capabilities, dependencies, and pointers onward. -
architecture.adoc— the module table and the two mechanisms enforcing it (the enforcer rules and the named ArchUnit test), the concurrency model and its consequences, a per-technology section, a Mermaid dependency diagram, a Kroki module-dependency diagram, and the cross-cutting concerns. Each downstream client’s section also names the contract it is generated from and records that the same contract drives the API mock standing in for that service in integration tests and local runs, so a reader knows where to add a response instead of inventing a fixture. -
use-cases.adoc— one section per use case: what it does, its trigger, its ordered steps, the ports and hence adapters it touches, every exception it can raise and what the caller sees, and a Mermaid sequence diagram including the failure branch. -
database-model.adoc— per collection/table/label: a field table (name, type, mandatory, indexed, constraints, default, description), the indexes and which query each serves, relationships, and a per-engine diagram. Read from the entities and the migrations, since indexes and constraints usually live in the latter. -
apis/rest.adoc,apis/grpc.adoc,apis/graphql.adoc,apis/messaging.adoc— version summaries, entity/message field tables with descriptions, constraints and deprecations, and endpoint documentation including authorization and every error response. Each page carries a prominent link, near the top, to its own generated reference published on GitHub Pages — OpenAPI HTML from the REST page, protobuf HTML from the gRPC page, AsyncAPI HTML from the messaging page, and the SpectaQL reference plus optional Voyager schema graph from the GraphQL page — one per contract version, written as{api-docs-url}/<kind>/<version>/index.htmland accompanied by a link to the source contract in the repository. The Voyager link is only written whengraphql-voyageris actually pinned in the GraphQL docs toolchain, since a link to a page that was never generated is worse than no link. The generated HTML is not Antora content, soxref:cannot reach it; the sharedapi-docs-urlattribute keeps every API page pointing at one base that a domain change updates in a single edit.The GraphQL page additionally documents the **endpoints** — the single `spring.graphql.path` every query and mutation `POST`s to, the WebSocket path for subscriptions, and the GraphiQL explorer path together with the profiles it is enabled in, since leaving that on in production exposes the whole schema. All of it is read from the `application*.yml` files rather than quoted from the defaults. The messaging page is derived from the AsyncAPI specification in `apis/messaging/` as well as the AVRO schemas, cross-checked against the Spring Cloud Stream bindings — the bindings are what the service actually does, the specification is what it claims to do, and a disagreement between them is reported as a finding about the repository. What justifies the page beyond the generated HTML is what the generator can't know: consumer groups, DLQ topics, the use case behind each message, and the registry's compatibility mode. * `configuration.adoc` — the property table with default, "dynamically changeable" (Yes / restart required / redeploy required, derived from the annotations), a criticality flag marking the performance and availability levers usable as a fast mitigation during a degradation, and a legend. * `metrics.adoc` — the metric table with type, every tag key and its possible values, cardinality risk flagged, and where to scrape and view them locally. * `nav.adoc` entries for every page created.
Execution flow
Dependencies
Invokes
-
Setup Antora — Step 1, only if
docs/antora.ymlis absent, to get the toolchain, playbook, and ROOT module in place before this skill adds Kroki and the service page set.
Invoked by
-
Setup Java Spring Boot — Step 8, last of seven sub-skills, via the
iru-isolated-skill-executoragent, so the pages are derived from the finished codebase rather than an in-progress one.
Also — and mainly — run standalone after any change to a contract, an entity, a configuration property, a metric, or a use case, since the pages are derived and go stale the moment the code moves.
Related agents
-
Explore(built-in) — used in Step 0 for the broad structural sweeps over the module tree, use cases, entities, and metrics, so only the specific files it identifies are read directly. See Agents. -
general-purpose(built-in, Claude Code’s default) — one-off use in Step 1 to run Setup Antora mid-run when no Antora module exists yet.
Source
SKILL.md on GitHub — the file this page was generated from.