š¤ 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`.
3.8 KiB
title, description, weight
| title | description | weight |
|---|---|---|
| Node identity resolution | How aĀ node learns who itĀ is: node.env identity keys andĀ theĀ FQDN fallback. | 12 |
Every apex operation runs inĀ theĀ context ofĀ exactly one node. TheĀ engine derives that node identityĀ ā node name, subnet, FQDN, andĀ public hostĀ ā fromĀ theĀ node.env file atĀ theĀ repository root, withĀ theĀ OS hostname asĀ aĀ fallback forĀ theĀ FQDN only. TheĀ framework assumes noĀ domain andĀ noĀ clustering: aĀ node declares who itĀ isĀ explicitly. This resolution step succeeds theĀ root_require_node mechanism ofĀ theĀ bash "root" commons framework that apex replaces.
Identity sources
node.env
node.env isĀ aĀ plain KEY=value file (shell-sourceable) located atĀ theĀ repository root. When parsed, comments andĀ blank lines are ignored, andĀ surrounding single orĀ double quotes around values are stripped.
ItĀ declares identity explicitly through these keys:
APEX_NODE_FQDNĀ ā theĀ node's real FQDN, used forĀ traefikHost()routing. IfĀ unset, theĀ engine falls back toĀ theĀ OS hostname (andĀ warns).APEX_NODE_HOSTĀ ā theĀ node's public host name, used forĀ theĀ backup--hostandĀ theĀ observability/notifyinstance. Defaults toĀAPEX_NODE_FQDN.APEX_SUBNETĀ ā theĀ node's/24forĀ theĀdirectnetwork. Required; there isĀ noĀ other source forĀ itĀ (see Concept: Fleet addressing scheme).
APEX_NODE_FQDN=node1.example.com
APEX_NODE_HOST=node1.example.com
APEX_SUBNET=198.18.16.0/24
TheĀ OS hostname
TheĀ OS hostname isĀ consulted only asĀ aĀ fallback forĀ APEX_NODE_FQDN. When node.env does not set APEX_NODE_FQDN, theĀ engine uses theĀ hostname andĀ emits aĀ warning. ItĀ isĀ never parsed forĀ aĀ node name orĀ any other coordinate.
Resolution order
{{% steps %}}
Resolve theĀ FQDN
fqdn isĀ APEX_NODE_FQDN fromĀ node.env, orĀ theĀ OS hostname when that key isĀ unset. IfĀ neither yields aĀ value, resolution fails (see Failure modes).
Resolve theĀ public host
host isĀ APEX_NODE_HOST fromĀ node.env, orĀ fqdn when that key isĀ unset.
Derive theĀ short name
name isĀ theĀ first label ofĀ host (host.split(".")[0])Ā ā forĀ example, node1 forĀ node1.example.com. ItĀ isĀ used forĀ logs, theĀ sync/<node> branch, andĀ messages.
Read theĀ subnet
subnet isĀ always read fromĀ APEX_SUBNET inĀ node.env. ItĀ isĀ required.
{{% /steps %}}
TheĀ result isĀ aĀ Node record withĀ four fields: name, subnet, fqdn, andĀ host.
Warnings
Identity resolution emits exactly one warning; itĀ signals aĀ recoverable inconsistency that should be fixed.
| Condition | Warning message |
|---|---|
APEX_NODE_FQDN isĀ unset inĀ node.env (theĀ hostname isĀ used instead) |
APEX_NODE_FQDN not set in node.env; using hostname '<fqdn>'. |
Failure modes
Resolution refuses toĀ guess. Two conditions are fatal, andĀ both exit withĀ code 66Ā ā theĀ engine's exit-code convention forĀ missing input:
- No FQDN atĀ all.
APEX_NODE_FQDNisĀ unset inĀnode.envand theĀ OS hostname isĀ empty. TheĀ engine writesidentity: APEX_NODE_FQDN missing from node.env and no hostnametoĀ stderr andĀ exits. - No subnet.
APEX_SUBNETisĀ absent fromĀnode.env(including when theĀ file itself isĀ missing). TheĀ engine writesidentity: APEX_SUBNET missing from node.envtoĀ stderr andĀ exits.
Warning
AĀ valid
node.envcarryingAPEX_SUBNETisĀ required onĀ every node.APEX_NODE_FQDNmay be omitted only when theĀ OS hostname supplies aĀ usable FQDN.
See also: