Adds Component._parse_cmd_payload(payload_str) helper and CmdPayloadError exception. Existing components in the workspace already call this helper; pinning lucid-component-base @ v2.4.0 in their pyproject.toml is required for wheel builds to work against the published base.
Also branches the failure-result envelope by action prefix in _make_cmd_handler (cfg-set actions get the cfg-set result shape; other actions stay generic) and makes publish_log emit the canonical {count, lines} envelope so the logs topic has one consistent shape.
Infra: Makefile test targets now invoke .venv/bin/python -m pytest so make test works regardless of which pytest is first on $PATH.
Commits since v2.3.1:
- Make publish_log emit canonical {count, lines} envelope
- Branch failure-result envelope by action prefix in _make_cmd_handler
- Update publish_log test to match canonical envelope shape
- Add CmdPayloadError and Component._parse_cmd_payload helper
- Use venv pytest in Makefile