It looks like I just bricked my first -J4 SOP8 piece.
I started with the WCH GPIO toggle code and my -F4 TSSOP20 on the evaluation board I bought on Aliexpress. After some time of trying to find the pins for LED1 and LED2, it turns out that you connect a jumper from the pin you want to use to the LED pin. Okay, that's fine. Then I changed the code a bit to verify that it was actually my code on the device.
The original code used GPIO D0 for the LED, but the -J4 does not have D0. So I changed it to C1 in the code and on the board. The LED flashes correctly.
Then I hooked up a -J4 that I had soldered onto a SOP8 to DIP8 breakout board and connected an LED and resistor to Vdd and C1. It programmed, but the LED was flashing slowly. Okay, the original code was set for HSE and 48mhz, and my board did not have a crystal. So it was running from the HSI (24mhz) after timing out in the HSE 48mhz setup. I changed the config to HSI 24mhz, and now it won't program. The IDE just gave me "board chip status error".
SWIO is on pin 8, but I am not using that as GPIO. I learned on STM32 to never configure the programming pin as GPIO.
It turns out the the WCH sample code uses the UART to send messages, and ...
The UART uses D5 as the UART TX alternate function. And D5 is on pin 8.
The -J4 chip does not have an external reset, so it looks like I just bricked my (ten-cent) chip.
If I want to use the UART TX, it looks like I can use D6 (pin 1) instead if I modify USART_Printf_Init().
Hope this helps someone!