Skip to content

UAT Criteria

The acceptance criteria FCC's UAT enforces. Two kinds: cross-surface tripwires (asserted at runtime by the executable probe contract against a live stack) and config-lint criteria (asserted offline by the test suite, no running services needed).

Cross-surface tripwires

★ = auto-asserted by scripts/uat_probe_pass.py (and mirrored as an in-process pytest where noted). Documented in full in ../ecosystem/partner-probe-guide.md.

# Tripwire Check Where
T1 ★ Version coherence ws-bridge /health, ux /ux/health, /api/v1/mcp/info, and the A2A card all report the same version, equal to fcc.__version__. uat_probe_pass.py::_coherence_result; tests/test_ux_gateway.py::test_version_coherence_across_surfaces
T2 ★ MCP catalog parity /api/v1/mcp/info tools_count equals the number of tools listed, and both equal MCPToolRegistry.create_default(). uat_probe_pass.py::_mcp_info_catalog; tests/uat/test_streams.py::test_agent_ax_web_mcp_catalog
T3 ★ A2A card served + 0.3.0 /.well-known/agent-card.json returns 200 with protocolVersion == "0.3.0" and the six fcc.* skills. uat_probe_pass.py::_agent_card_0_3_0; tests/test_ux_gateway.py::test_agent_card_served_a2a_0_3_0
T4 ★ Never-5xx A documented-but-absent path returns 404, never a 5xx. uat_probe_pass.py::_never_5xx
T5 Journey-event validity Events FCC emits validate against the packaged journey_event_v1.schema.json. tests/test_journey_event_contract.py

Config-lint criteria (offline)

ID Criterion Enforced by
U-PROBE-1 The executable probe contract exists, is stdlib-only, and is INERT (exit 0) when the stack is down. scripts/uat_probe_pass.py (CI runs make uat-probe-strict)
U-PERF-1 The performance model classifies into Quick (≤250 ms) / Moderate (≤2 s) / Slow bands, and the band drives the vision sample budget. tests/test_uat_responsiveness.py
U-STREAM-1 The three journey streams (stream_agent_ax, stream_human_ux, stream_persona) are registered markers; the two deterministic streams pass offline. tests/uat/test_streams.py, pyproject.toml [tool.pytest.ini_options] markers
U-PERSONA-1 Every loaded persona is PAOM-runnable (has constitution.hard_stop). tests/uat/test_streams.py::test_persona_every_loaded_persona_is_runnable
U-PORTMAP-1 The vendored port registry stays in lock-step with NEXUS (SHA256 drift). tests/test_ecosystem_registry_drift.py
U-OPENAPI-1 Every OpenAPI path is mapped to an implementation or an explicit not-mirrored exclusion. tests/test_ux_gateway_openapi_drift.py

Running

make uat-up            # stand up the probeable stack
make uat-probe         # run the tripwire contract (advisory)
make uat-probe-strict  # CI gate (INERT-exit-0 when stack down)
make uat-streams       # deterministic journey streams
make uat-perf          # latency bands → docs/uat/v<ver>/responsiveness.json

Current as of v1.10.0.