Handle Discovery missing-config diagnostics

This commit is contained in:
rcourtman 2026-05-20 16:13:49 +01:00
parent ba374da2ee
commit 35399389a9
6 changed files with 12 additions and 9 deletions

View file

@ -1399,7 +1399,8 @@ AI runtime.
identified-service summary when the service name, category, version,
paths, ports, facts, and suggested URL are all absent or placeholders,
including generic workload types such as `service` or `container` and
diagnostic facts such as metadata-only status or missing-config errors.
diagnostic facts such as metadata-only status, config-availability
failures, or missing-config errors.
Discovery is an opt-in observed-context layer, not an automatic row-link
owner. The reducer must carry provenance, observed time, service version,
endpoint candidates, and URL-source copy so drawer surfaces can show

View file

@ -62,8 +62,8 @@ describe('DiscoveryTab', () => {
},
{
category: 'config',
key: 'missing_config',
value: 'nodes/delly/lxc/152.conf not found on host',
key: 'config_availability',
value: 'missing_node_config',
source: 'all_commands',
confidence: 1,
discovered_at: '2026-05-19T00:00:00Z',

View file

@ -317,8 +317,8 @@ describe('resource drawer discovery promotion', () => {
},
{
category: 'config',
key: 'missing_config',
value: 'nodes/delly/lxc/152.conf not found on host',
key: 'config_availability',
value: 'missing_node_config',
source: 'all_commands',
confidence: 1,
discovered_at: '2026-05-19T00:00:00Z',

View file

@ -267,8 +267,8 @@ describe('GuestDrawer', () => {
},
{
category: 'config',
key: 'missing_config',
value: 'nodes/delly/lxc/152.conf not found on host',
key: 'config_availability',
value: 'missing_node_config',
source: 'all_commands',
confidence: 1,
discovered_at: '2026-05-19T00:00:00Z',

View file

@ -246,8 +246,8 @@ describe('discoveryPresentation', () => {
},
{
category: 'config',
key: 'missing_config',
value: 'nodes/delly/lxc/152.conf not found on host',
key: 'config_availability',
value: 'missing_node_config',
source: 'all_commands',
confidence: 1,
discovered_at: '2026-05-19T00:00:00Z',

View file

@ -79,7 +79,9 @@ const isMeaningfulDiscoveryFact = (fact: DiscoveryFact): boolean => {
const source = normalizeDiscoveryToken(fact.source);
if (!isMeaningfulDiscoveryText(fact.value)) return false;
if (key === 'status' && source === 'metadata') return false;
if (key.includes('availability') && value.includes('missing')) return false;
if (key.startsWith('missing') || key.endsWith('missing')) return false;
if (value.startsWith('missing ') || value.includes(' missing ')) return false;
if (
value.includes('does not exist') ||
value.includes('not found') ||