KB-48CE

01 — Production API Truth Baseline

4 min read Revision 1
architecturerpproduction-apitruth-baseline2026-06-06

— 01 PRODUCTION API TRUTH BASELINE — live probe 2026-06-06 ~04:47 UTC, host vps.incomexsaigoncorp.vn

Method: read-only HTTPS GET probes from outside, capturing status, time, body, headers; cross-checked against the deployed Nitro route manifest inside container incomex-nuxt (image nuxt-ssr-local:s174) and against Postgres truth.

Full route truth table (20 RP routes probed):

route status class note
/api/registry/counts 200 HEALTHY body {"total":2122910} = RAW birth-polluted count (raw<>clean truth note)
/api/registry/raw-counts 200 HEALTHY 22929 bytes
/api/registry/composition 200 HEALTHY 12539 bytes
/api/registry/health 200 HEALTHY slow ~6.4s
/api/registry/species-matrix 200 HEALTHY_SLOW ~17.8–21.8s, near timeout; same entity-bloat pattern as matrix
/api/registry/species-summary 200 HEALTHY {"total":42}
/api/registry/unmanaged 200 HEALTHY 8520 bytes
/api/registry/system-issues 200 HEALTHY all=223255
/api/registry/system-issues-detail 400 PARAM_REQUIRED needs param
/api/registry/system-issues-groups 200 HEALTHY 1072 bytes
/api/registry/system-issues-subgroups 400 PARAM_REQUIRED needs param
/api/registries/system-issues 200 HEALTHY plural alias
/api/registries/system-issues/detail 400 PARAM_REQUIRED needs param
/api/registries/index 404 ROUTE_MISSING REAL BREAK — page calls it, route not mounted
/api/registries-pivot/summary 200 HEALTHY pg-backed
/api/registries-pivot/rows 200 HEALTHY 64283 bytes, pg-backed
/api/registries-pivot/node 400 PARAM_REQUIRED needs ?code
/api/registry/matrix 500 SERVER_ERROR REAL BREAK — 500 at ~28s
/api/registry/pivot-query 500 SERVER_ERROR REAL BREAK — Directus 400
/api/registry/refresh-counts 404 METHOD_POST_ONLY GET 404 by design (mutating POST route)

Rollup: HEALTHY 12, PARAM_REQUIRED 4, SERVER_ERROR 2, ROUTE_MISSING 1 (matches the prior P0 control-plane probe exactly), plus the POST-only refresh-counts.

Captured failure bodies:

PIVOT_MISSING = 14 (DB truth): v_registries_pivot_node_contract.count_status = 'PIVOT_MISSING' (25 pivot_backed + 14 missing = 39 UI tree nodes). See doc 05.

Secondary observations (not API breaks, logged not hidden):

  • Homepage SSR fetch of /items/pages returns 403 Forbidden in nuxt logs; the page still renders 200 via fallback. Separate Directus-permission/field issue, out of the RP API-break scope.
  • /api/registry/counts returns the raw polluted object total 2,122,910 rather than the clean managed count — a raw-vs-clean truth concern for the UI, not a 404/500.

Truth views created: v_rp_production_api_truth_status_v2, v_rp_production_api_failure_inventory, v_rp_production_ui_no_false_green_guard. Read-back: ui guard verdict = BLOCKED_REAL_API_BREAKS_PRESENT_DO_NOT_CLAIM_READY (real_break_routes=3, healthy=12).

Back to Knowledge Hub knowledge/dev/reports/architecture/rp-production-api-operator-fix-ui-truth-smoke-2026-06-06/01-production-api-truth-baseline.md