GitHub topics on docs hub playbooks
Antora docs hub repositories (playbooks that publish a site) use GitHub repository topics so maintainers can find consumers after a release (gh search repos --topic facto-stack).
Provider rule: a hub tags the provider it declares. When that provider is a compose pack, the pack owns its members, so the hub carries the pack topic only.
Provider rule
@antora-supplemental/facto-stack is the provider for the standard hub stack. Declare the pack plus antora in package.json and tag the repo facto-stack.
| Provided by facto-stack (do not pin or tag in the hub) | Why |
|---|---|
Extensions: incremental, page-context, site-nav-tree, soft-nav-page-toc, nav-typology(+diataxis), link-validator, linkinator, page-edit, antora-search-chat, build-stack, extension-lister, orphan-finder, unversioned-component-urls, Lunr |
Pack |
Maint CLIs: orphan-finder, nav-drift, stale-page, playbook-pin-auditor, deep-link-contracts |
Run as |
Valentus UI bundle |
The playbook still names |
Valentus is not an npm dependency of the pack. facto-stack does not set ui.bundle.url; the hub playbook does. Treat the bundle as the pack’s paired theme, not a member extension.
What a hub still owns
-
supplemental-uicopies. Antora does not merge extension UI automatically. The hub keeps its own copies of partials, helpers, CSS, andsoft-nav.js. They are hub-owned files, not a dependency pin. Re-sync them from the member repos when a member changes itsui/files. -
Non-pack extensions the hub genuinely needs (for example a local
./lib/*.js). Those are direct and may carry their own topic. -
Playbook config:
siteNavTree.include,lunr,softNavPageToc,pageContextAntora, …
Topics to apply
| Hub shape | Topics |
|---|---|
Hub uses facto-stack (the standard case) |
|
Hub uses Valentus but no compose pack |
|
Hub with a separate, non-pack reason to pin a member (rare) |
|
Rule of thumb: if facto-stack supplies it, do not tag it. The topic search for a member (topic:page-context) should list real direct consumers, not every hub that happens to run the pack.
How to decide (checklist)
-
List playbook
antora.extensions. If the only Antora entry is the pack (plus local files), the hub isfacto-stack. -
List hub
package.jsondeps. Drop members the pack already pulls; keep onlyfacto-stack,antora, local tooling, and non-pack extensions. -
Check the UI bundle. With the pack, no
valentus-themetopic. Without the pack, tag the theme. -
Replace the repo’s topics (see below).
Example — DevCentr hub (dev-centr/docs): topics facto-stack only.
Replace the topics
Use the full intended list. PUT /repos/{owner}/{repo}/topics replaces every topic, so list any non-provider topics you want to keep.
$body = @{ names = @('facto-stack') } | ConvertTo-Json -Compress
$body | gh api -X PUT repos/dev-centr/docs/topics --input -
Before overwriting, read the current set with gh api repos/dev-centr/docs/topics --jq .names and decide what else to keep.
soft-nav-page-toc vs soft-nav.js
Two things share the "soft nav" name:
-
@antora-supplemental/soft-nav-page-tocis a build-time Antora extension (pack member). It adds compose-time nav-hidden meta and breadcrumbs and can inject a small script that rebuilds the right-hand page TOC after a SoftNav swap. -
supplemental-ui/js/soft-nav.jsis the in-browser SoftNav script copied from antora-ui-chassisunchecked. It does the actual content swap on link clicks. Hub copies already rebuild the aside TOC, so hubs setsoftNavPageToc: { injectScript: false }.
The extension is a package you get through the pack; soft-nav.js is a file the hub owns. Neither replaces the other.
Capability/gallery topics (antora-theme, antora-docs, …) stay separate; see Theme products — GitHub topics.
After wiring or removing a direct dep
-
Update the topics on the playbook repository.
-
Note the change in the hub changelog when retagging is part of a deliberate stack change.
Skills: antora-extension-consumers (topics + pins) and update-consumers (recursive bump). Registry: Product dependency topicsunchecked.
See also
-
facto-stackunchecked — compose pack for hub profiles