š¤ PR generated for branch `fix/cyrillic-fonts-dev-certs-and-page-head`.
### Changes Summary
- **Fonts**: Add Cyrillic glyph subsets for Lato, EB Garamond, and Fira
Code.
- **Dev**: Support remote Root CA and encrypted dev CA key in
`.env.dev`.
- **UI & Kits**: Add size variant to `Breadcrumbs` component and enlarge
`PageHead` breadcrumbs with tuned collapse scroll threshold.
- **ESLint**: Add `no-hanging-particles` i18n & markdown typography rule
with auto-fixer.
- **Content & i18n**: Apply `ru-text` editorial and typography polish
(em dashes, number ranges, Ā«ŃĀ» restoration, non-breaking spaces) across
`services/www` and `services/docs`.
4.4 KiB
title, description, weight
| title | description | weight |
|---|---|---|
| Troubleshooting | Symptoms, diagnosis, andĀ fixes forĀ common apex failure modes. | 40 |
Failure modes theĀ engine reports, withĀ theĀ exact log lines itĀ emits.
APEX_NODE_FQDN falls back toĀ theĀ hostname
Symptoms: every action logs APEX_NODE_FQDN not set in node.env; using hostname '<fqdn>'.
Diagnosis: node.env does not set APEX_NODE_FQDN, soĀ theĀ engine derived theĀ FQDN fromĀ theĀ OS hostname. OnĀ aĀ node whose hostname isĀ theĀ intended FQDN this isĀ harmless; otherwise traefik Host() routing will use theĀ wrong name.
Solution: set APEX_NODE_FQDN explicitly inĀ node.env atĀ theĀ repository root (forĀ example APEX_NODE_FQDN=node1.example.com).
Identity exits 66Ā
Symptoms: identity: APEX_NODE_FQDN missing from node.env and no hostname orĀ identity: APEX_SUBNET missing from node.env, exit 66.
Diagnosis: aĀ required identity field cannot be resolved. TheĀ first line means neither APEX_NODE_FQDN norĀ anĀ OS hostname yields anĀ FQDN; theĀ second means APEX_SUBNET isĀ absent. TheĀ engine refuses toĀ guess.
Solution: create orĀ complete node.env atĀ theĀ repository rootĀ ā set APEX_SUBNET, andĀ set APEX_NODE_FQDN (orĀ ensure theĀ OS hostname isĀ usable).
configure/ufw exits 66Ā
Symptoms: Rules directory does not exist: ... orĀ Config directory does not exist: ..., exit 66.
Diagnosis: exactly one ofĀ configs/ufw/docker/ orĀ configs/ufw/host/ isĀ missingĀ ā aĀ broken config layout rather than anĀ intentionally rule-less node.
Solution: restore theĀ missing directory (empty isĀ acceptable: anĀ empty docker/ warns No .rules files found ... nothing to apply. andĀ continues).
ufw tooling missing
Symptoms: ufw not installed/working via sudo. Run configure/base first. orĀ ufw-docker not found at ~/.local/bin/ufw-docker. Run configure/base first., exit 1.
Diagnosis: theĀ firewall layer's prerequisites are absent.
Solution: run apex configure/base, then retry apex configure/ufw.
Crontab install refused orĀ rolled back
Symptoms: Rendered crontab is empty; aborting (previous kept). (exit 65) orĀ crontab install failed; restoring previous. (exit 1).
Diagnosis: theĀ rendered configs/cron/crontab was empty (template/variable problemĀ ā remember unknown $VARS stay literal, they do not blank theĀ file) orĀ crontab rejected theĀ syntax.
Solution: inspect theĀ printed preview, fix theĀ template, re-run apex configure/cron. TheĀ previous crontab isĀ intact inĀ both cases.
sync/repository aborts
Symptoms: Commons submodule at <path> has uncommitted changes. Aborting. orĀ Directory '<repo>/compositions' does not exist. Cannot sync., exit 1.
Diagnosis: theĀ capture-up commit refuses toĀ record aĀ broken checkoutĀ ā aĀ dirty pinned submodule orĀ aĀ missing compositions tree.
Solution: forĀ aĀ dirty submodule, git -C commons checkout -- . (orĀ commit anĀ intentional pin move); forĀ aĀ missing tree, restore theĀ checkout before theĀ next scheduled run.
Telegram not delivered
Symptoms: Telegram Bot URL not provided. Skipping notification. orĀ Failed to send Telegram notification: <error>Ā ā andĀ notify-gated actions (backup/run, sync/repository, sync/packages) exit 1 even though their work succeeded.
Diagnosis: theĀ bot URL argument was empty, orĀ theĀ send failed (network, proxy, revoked token). TheĀ non-zero exit isĀ deliberate: anĀ unattended run whose status cannot be reported isĀ treated asĀ failed.
Solution: verify theĀ URL source file theĀ cron line reads, network/proxy reachability, andĀ theĀ bot token; re-run manually toĀ confirm delivery.
docker compose rejects theĀ core wrapper
Symptoms: docker compose errors onĀ theĀ include keyword when evaluating compositions/apex/docker-compose.yml.
Diagnosis: theĀ core composition isĀ consumed through include:, which requires Docker Compose v2.20+.
Solution: upgrade theĀ Compose plugin (docker compose version toĀ verify).
See also: