diff --git a/api/openapi.yaml b/api/openapi.yaml
index b6aa88b6..677c5d23 100644
--- a/api/openapi.yaml
+++ b/api/openapi.yaml
@@ -5204,6 +5204,14 @@ components:
properties:
scan_id: {type: string, format: uuid}
host_id: {type: string, format: uuid}
+ # Human-friendly host label resolved from the hosts table for the
+ # scan-detail header (so it shows a hostname/IP, not a raw UUID).
+ # Populated on the detail endpoint (GET /scans/{id}); the list
+ # endpoint leaves them absent since the caller already has host
+ # context. hostname is the registered hostname (may be empty);
+ # ip_address is always present for a real host. Spec api-scans.
+ hostname: {type: string}
+ ip_address: {type: string}
status: {type: string, description: 'queued | running | completed | failed'}
trigger_source: {type: string, description: 'on_demand | scheduled'}
queued_at: {type: string, format: date-time}
diff --git a/frontend/src/api/schema.d.ts b/frontend/src/api/schema.d.ts
index 382c9c70..b07313a8 100644
--- a/frontend/src/api/schema.d.ts
+++ b/frontend/src/api/schema.d.ts
@@ -3479,6 +3479,8 @@ export interface components {
scan_id: string;
/** Format: uuid */
host_id: string;
+ hostname?: string;
+ ip_address?: string;
/** @description queued | running | completed | failed */
status: string;
/** @description on_demand | scheduled */
diff --git a/frontend/src/pages/scans/ScanDetailPage.tsx b/frontend/src/pages/scans/ScanDetailPage.tsx
index 0607a9c3..0f8e79b4 100644
--- a/frontend/src/pages/scans/ScanDetailPage.tsx
+++ b/frontend/src/pages/scans/ScanDetailPage.tsx
@@ -143,7 +143,9 @@ export function ScanDetailPage() {
>
- {scan.host_id.slice(0, 8)}
+ {/* Human-friendly label: hostname if registered, else IP, else
+ a short UUID as a last resort (api-scans resolves these). */}
+ {scan.hostname || scan.ip_address || scan.host_id.slice(0, 8)}
{scan.status}
diff --git a/frontend/tests/pages/scan-detail.test.tsx b/frontend/tests/pages/scan-detail.test.tsx
index ba1cea4c..052f27b3 100644
--- a/frontend/tests/pages/scan-detail.test.tsx
+++ b/frontend/tests/pages/scan-detail.test.tsx
@@ -161,4 +161,16 @@ describe('frontend-scan-detail', () => {
// No em-dash in copy.
expect(stripComments(PAGE_SRC)).not.toContain('—');
});
+
+ // @ac AC-08
+ test('frontend-scan-detail/AC-08 — Host field shows hostname || ip || short uuid, not a bare uuid', () => {
+ // The Host Meta uses the hostname-then-IP-then-short-UUID fallback.
+ expect(PAGE_SRC).toMatch(
+ /scan\.hostname \|\| scan\.ip_address \|\| scan\.host_id\.slice\(0, 8\)/,
+ );
+ // And it is NOT the old bare-UUID render (slice as the sole child).
+ expect(PAGE_SRC).not.toMatch(/>\s*\{scan\.host_id\.slice\(0, 8\)\}\s*);
+ // Still a Link to the host detail page.
+ expect(PAGE_SRC).toContain('to="/hosts/$hostId"');
+ });
});
diff --git a/internal/scanresult/reader.go b/internal/scanresult/reader.go
index 56dbab4f..af95b065 100644
--- a/internal/scanresult/reader.go
+++ b/internal/scanresult/reader.go
@@ -35,8 +35,13 @@ func NewReader(pool *pgxpool.Pool) *Reader { return &Reader{pool: pool} }
// ScanSummary is the scan_runs metadata shown in the list and the scan
// detail header.
type ScanSummary struct {
- ScanID uuid.UUID
- HostID uuid.UUID
+ ScanID uuid.UUID
+ HostID uuid.UUID
+ // Hostname + IPAddress are the human-friendly host label, resolved
+ // from the hosts table by GetScan for the detail header. ListByHost
+ // leaves them empty (the list caller already has host context).
+ Hostname string
+ IPAddress string
Status string
TriggerSource string
QueuedAt time.Time
@@ -155,7 +160,11 @@ func (rd *Reader) ListByHost(ctx context.Context, hostID uuid.UUID, limit int, c
return out, next, nil
}
-// GetScan returns a scan's metadata, or ErrScanNotFound.
+// GetScan returns a scan's metadata, or ErrScanNotFound. It also resolves
+// the host's hostname + ip_address from the hosts table so the detail
+// header can show a human-friendly label instead of a raw UUID. A missing
+// host row (the FK is ON DELETE RESTRICT, so this is unexpected) leaves the
+// label fields empty rather than failing the scan read.
func (rd *Reader) GetScan(ctx context.Context, scanID uuid.UUID) (ScanSummary, error) {
run, err := scanruns.Get(ctx, rd.pool, scanID)
if errors.Is(err, scanruns.ErrNotFound) {
@@ -164,7 +173,19 @@ func (rd *Reader) GetScan(ctx context.Context, scanID uuid.UUID) (ScanSummary, e
if err != nil {
return ScanSummary{}, err
}
- return summaryFromRun(run), nil
+ s := summaryFromRun(run)
+ var hostname, ip string
+ // host(ip_address) renders the inet as plain text (no /netmask), matching
+ // how internal/host formats it; COALESCE keeps a NULL hostname/IP as "".
+ err = rd.pool.QueryRow(ctx,
+ `SELECT COALESCE(hostname, ''), COALESCE(host(ip_address), '') FROM hosts WHERE id = $1`,
+ s.HostID).Scan(&hostname, &ip)
+ if err != nil && !errors.Is(err, pgx.ErrNoRows) {
+ return ScanSummary{}, fmt.Errorf("scanresult: resolve host label: %w", err)
+ }
+ s.Hostname = hostname
+ s.IPAddress = ip
+ return s, nil
}
// ScanResults returns every rule's verdict for a scan, ordered by
diff --git a/internal/server/api/server.gen.go b/internal/server/api/server.gen.go
index 4ba82421..a48a047b 100644
--- a/internal/server/api/server.gen.go
+++ b/internal/server/api/server.gen.go
@@ -2852,6 +2852,8 @@ type ScanSchedulePreview struct {
type ScanSummary struct {
FinishedAt *time.Time `json:"finished_at,omitempty"`
HostId openapi_types.UUID `json:"host_id"`
+ Hostname *string `json:"hostname,omitempty"`
+ IpAddress *string `json:"ip_address,omitempty"`
PolicyVersion string `json:"policy_version"`
QueuedAt time.Time `json:"queued_at"`
RulesError int `json:"rules_error"`
@@ -9261,286 +9263,286 @@ var swaggerSpec = []string{
"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",
- "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",
+ "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",
}
// decodeSpec returns the embedded OpenAPI spec as raw JSON bytes,
diff --git a/internal/server/api_scans_test.go b/internal/server/api_scans_test.go
index cdb3d064..14c2bbc6 100644
--- a/internal/server/api_scans_test.go
+++ b/internal/server/api_scans_test.go
@@ -10,6 +10,7 @@
// AC-05 TestScanRuleEvidence_ShapeAnd404
// AC-06 TestScanOSCAL_PerRuleAndWholeScanParseAnd404
// AC-07 TestScansSurface_OwnsEvidence_HostTabDoesNot
+// AC-08 TestScanById_HostLabelResolved
package server
@@ -232,6 +233,74 @@ func TestScanById_ShapeAnd404(t *testing.T) {
})
}
+// @ac AC-08
+// AC-08: GET /scans/{id} resolves the host's hostname + ip_address (from
+// the hosts table) onto the ScanSummary so the detail header shows a
+// human-friendly label, not a UUID. A host with an empty hostname yields
+// an empty/absent hostname but a populated ip_address.
+func TestScanById_HostLabelResolved(t *testing.T) {
+ t.Run("api-scans/AC-08", func(t *testing.T) {
+ url, pool := freshAPIServer(t)
+ ctx := context.Background()
+
+ // Host WITH a hostname (seedHostForIntel sets hostname intel-
+ // + ip 192.0.2.30).
+ hostID := seedHostForIntel(t, pool)
+ var wantHostname string
+ if err := pool.QueryRow(ctx, `SELECT hostname FROM hosts WHERE id=$1`, hostID).
+ Scan(&wantHostname); err != nil {
+ t.Fatalf("read seeded hostname: %v", err)
+ }
+ scanID := seedScan(t, pool, hostID, time.Now().UTC(), []scanresult.Result{
+ {RuleID: "r1", Status: scanresult.StatusPass, Severity: "low"},
+ })
+
+ // Host with an EMPTY hostname but a real IP.
+ creator := firstSeededUserID(t, pool)
+ noNameID, _ := uuid.NewV7()
+ if _, err := pool.Exec(ctx,
+ `INSERT INTO hosts (id, hostname, ip_address, created_by) VALUES ($1, '', $2::inet, $3)`,
+ noNameID, "198.51.100.7", creator); err != nil {
+ t.Fatalf("seed no-hostname host: %v", err)
+ }
+ noNameScan := seedScan(t, pool, noNameID, time.Now().UTC(), []scanresult.Result{
+ {RuleID: "r1", Status: scanresult.StatusPass, Severity: "low"},
+ })
+
+ get := func(id string) map[string]any {
+ req := asRole(t, "GET", url+"/api/v1/scans/"+id, auth.RoleViewer, nil)
+ resp := doReq(t, req)
+ defer resp.Body.Close()
+ if resp.StatusCode != http.StatusOK {
+ t.Fatalf("status = %d, want 200", resp.StatusCode)
+ }
+ var detail struct {
+ Scan map[string]any `json:"scan"`
+ }
+ if err := json.NewDecoder(resp.Body).Decode(&detail); err != nil {
+ t.Fatalf("decode: %v", err)
+ }
+ return detail.Scan
+ }
+
+ named := get(scanID.String())
+ if named["hostname"] != wantHostname {
+ t.Errorf("hostname = %v, want %q", named["hostname"], wantHostname)
+ }
+ if named["ip_address"] != "192.0.2.30" {
+ t.Errorf("ip_address = %v, want 192.0.2.30", named["ip_address"])
+ }
+
+ noName := get(noNameScan.String())
+ if hn, ok := noName["hostname"]; ok && hn != "" {
+ t.Errorf("empty-hostname host returned hostname = %v, want empty/absent", hn)
+ }
+ if noName["ip_address"] != "198.51.100.7" {
+ t.Errorf("ip_address = %v, want 198.51.100.7 (IP fallback)", noName["ip_address"])
+ }
+ })
+}
+
// @ac AC-04
func TestScanDetail_NoRawCheckOutput(t *testing.T) {
t.Run("api-scans/AC-04", func(t *testing.T) {
diff --git a/internal/server/scans_handlers.go b/internal/server/scans_handlers.go
index f2592ea2..2eb59e5a 100644
--- a/internal/server/scans_handlers.go
+++ b/internal/server/scans_handlers.go
@@ -296,6 +296,16 @@ func toAPIScanSummary(s scanresult.ScanSummary) api.ScanSummary {
}
out.StartedAt = s.StartedAt
out.FinishedAt = s.FinishedAt
+ // Human-friendly host label (detail endpoint only; empty on list rows,
+ // which omit them). Pointer-wrap so an unresolved label stays absent.
+ if s.Hostname != "" {
+ hn := s.Hostname
+ out.Hostname = &hn
+ }
+ if s.IPAddress != "" {
+ ip := s.IPAddress
+ out.IpAddress = &ip
+ }
return out
}
diff --git a/specs/api/scans.spec.yaml b/specs/api/scans.spec.yaml
index 7d5f8781..0e61d0c9 100644
--- a/specs/api/scans.spec.yaml
+++ b/specs/api/scans.spec.yaml
@@ -1,7 +1,7 @@
spec:
id: api-scans
title: Scans API — durable scan history, evidence, and OSCAL export
- version: "1.0.0"
+ version: "1.1.0"
status: approved
tier: 2
@@ -70,6 +70,10 @@ spec:
description: The OSCAL endpoints MUST reconstruct a valid OSCAL 1.0.6 Assessment Results document from the stored outcomes via Kensa's exporter (per-rule and whole-scan), return it as a downloadable JSON attachment, and 404 when the scan/rule is unknown
type: technical
enforcement: error
+ - id: C-07
+ description: 'v1.1.0 — GET /scans/{id} MUST resolve the scan host''s hostname + ip_address from the hosts table and include them on the returned ScanSummary, so the detail header can show a human-friendly host label instead of a raw UUID. A missing host row (unexpected — the FK is ON DELETE RESTRICT) leaves the label fields empty rather than failing the read. The list endpoint (GET /scans) MAY omit these (the caller already has host context)'
+ type: technical
+ enforcement: error
acceptance_criteria:
- id: AC-01
@@ -100,3 +104,7 @@ spec:
description: Source-inspection — the scan evidence surface lives only in scans_handlers.go; the api-host-compliance pinned handler files (host_compliance_handler.go, host_compliance_lens_handler.go) still contain no occurrence of the token "evidence", so the host tab stays evidence-free while /scans owns evidence.
priority: high
references_constraints: [C-02]
+ - id: AC-08
+ description: 'v1.1.0 — GET /scans/{id} for a scan whose host has a registered hostname returns ScanSummary.hostname = that hostname and ip_address = the host IP; for a host with an empty hostname, hostname is empty/absent and ip_address is still populated. The values are resolved from the hosts table (not the scan_runs row).'
+ priority: high
+ references_constraints: [C-07]
diff --git a/specs/frontend/scan-detail.spec.yaml b/specs/frontend/scan-detail.spec.yaml
index 510b7e4a..c48ef3fd 100644
--- a/specs/frontend/scan-detail.spec.yaml
+++ b/specs/frontend/scan-detail.spec.yaml
@@ -1,7 +1,7 @@
spec:
id: frontend-scan-detail
title: Scan detail page + per-rule evidence/OSCAL drill-down
- version: "1.0.0"
+ version: "1.1.0"
status: approved
tier: 2
@@ -80,6 +80,15 @@ spec:
no em-dashes and renders no non-functional remediation controls.
type: technical
enforcement: error
+ - id: C-08
+ description: >-
+ v1.1.0 — the scan-detail Host field MUST show a human-friendly
+ label, not a raw UUID: the registered hostname when present, else
+ the IP address, else a short host_id prefix as a last resort
+ (scan.hostname || scan.ip_address || scan.host_id.slice(0,8)). It
+ remains a Link to /hosts/$hostId.
+ type: technical
+ enforcement: error
acceptance_criteria:
- id: AC-01
@@ -118,3 +127,12 @@ spec:
Fix or remediation control.
priority: high
references_constraints: [C-07]
+ - id: AC-08
+ description: >-
+ v1.1.0 source-inspection — ScanDetailPage's Host Meta renders
+ `scan.hostname || scan.ip_address || scan.host_id.slice(0, 8)`
+ (hostname-then-IP-then-short-UUID fallback), wrapped in a Link to
+ /hosts/$hostId. It does NOT render a bare scan.host_id.slice(0, 8)
+ as the sole label.
+ priority: high
+ references_constraints: [C-08]