Repository navigation
Conversation
- Add references/python/scripts/verify.sh: stage-dispatched run-and-observe verification (publisher, consumer, roundtrip, direct, direct-request-reply, app) with the same VERIFY: markers and 0/1/2 exit contract as the JCSMP script - Run each role with its project's .venv interpreter; connection arguments are optional when config.json is present, and separate projects use the --subscriber-dir/--publisher-dir and --replier-dir/--requestor-dir flags - Classify Python API connection, authentication, and TLS signatures (observed live) and the queue bind denial as environment failures (exit 2) - Move the interim checklist into references/python/verification-checklist.md and rewrite implement-mode Steps 4 to 6 around the bundled script - Add the smoke fixture (latest solace-pubsubplus from PyPI, py_compile, build every sample's API objects without a broker, config helper paths) and the python-smoke-check CI job beside compile-check - Update SKILL.md Invariant 5, python.md, the Suggested overlay, the leaf files, the evals README prerequisites, and the CLAUDE.md commands
- Rename the CI jobs compile-check and python-smoke-check to jcsmp-sample-check and python-sample-check, so every API's offline check of its baked samples (no broker, no API key) has one name pattern - Move each fixture to references/<api>/evals/sample-check/ with the entry script check-samples.sh (Python driver check_samples.py) and rename the fixture pom artifactId to jcsmp-sample-check - Update the CI step names, CLAUDE.md commands and roster convention, and the SKILL.md reference-file lines - The scheme extends to the Java and Go APIs as java-sample-check and go-sample-check
- Require PUBLISH_ACKED for roundtrip and a MESSAGE_RECEIVED beyond those already logged, so a message an earlier run left on the durable queue no longer passes a broken publisher - Record the foreground role's exit code (124 on a hang) and fail the publisher, roundtrip, direct, and request-reply stages when it is non-zero - Count PASS_MARKER lines before the app-stage trigger so a startup backlog does not pass the stage - Refuse Python connection arguments when config.json exists, because the scripts prefer config.json and the heads-up named a different broker - Derive the Python sample-check module list from the copied samples instead of a second hand-kept list - Scope the exit-code docs: the app-stage pass rule, the foreground exit code, and precondition exits that do not count as fix-loop attempts - Apply the same verify.sh fixes to the shipped JCSMP script and fix the stale compile.sh comments
|
Tested Findings1. With Solace Suggested's HA values, an unreachable broker is classified as a code failure (exit 1, should be 2)
On the refused port the API was still retrying at the 2. 3. The Python request-reply "no reply" message is unreachable Passed
|
- Replace every ubuntu-latest runner label with ubuntu-26.04 so a runner image change cannot alter CI without a commit - Pin the python-sample-check job to Python 3.11, the oldest Python version still in support, instead of 3.x
- Classify a long-running role that is still connecting at the readiness deadline (no VERIFY: CONNECTED) as an environment failure, exit 2, naming the host; an unroutable host or a blocked port previously gave exit 1 in both APIs, and a refused port did too with the Python HA retry values - Re-check the environment signatures after the stage before reporting a code failure, and match Python's "Session connect timeout" - Take the stale MESSAGE_RECEIVED and PASS_MARKER counts only after they stop changing for 2 seconds, so a queued message delivered just after the bind no longer passes roundtrip - Show the request-reply "no reply" diagnosis whenever the requestor exited on its own without a reply, since the Python requestors exit 1 in that case - Add the stalled connect to the exit 2 text in both implement-mode.md files and script headers
What is the purpose of this change?
Python Implement mode had no verify script, so every generated Python project ended in a compile-only fallback. This adds a Python
verify.sh(the counterpart of the JCSMP script), a verification checklist template, and a CI check for the baked Python samples. It unblockslive_verifyfor the Python output evals (EBP-3108).How is this accomplished?
references/python/scripts/verify.shwith the stagespublisher,consumer,roundtrip,direct,direct-request-reply, andapp, and the sameVERIFY:markers and 0/1/2 exit contract as JCSMP. Each role runs in its project's own.venv. Separate projects use--subscriber-dir/--publisher-dirand--replier-dir/--requestor-dir.SOLCLIENT_SUBCODE_*names for login, VPN, host, connection, trust store, certificate, and queue bind failures.references/python/verification-checklist.mdand rewrote implement-mode Steps 5 and 6 around the bundled script.python-sample-checkCI job and its fixture. It compiles, imports, and builds every baked sample against the latestsolace-pubsubpluswithout a broker, and parsesverify.sh.compile-checkjob tojcsmp-sample-checkand moved its fixture, so every API uses<api>-sample-checkandreferences/<api>/evals/sample-check/.verify.sh:roundtripignores messages already on the queue, a failed or hung foreground role fails its stage, and theappstage ignores markers logged before the trigger.Anything reviews should focus on/be aware of?
verify.sh, so it reaches users only with the next release.compile-checkalone. No branch protection requires the check by name. Theagent-plugins-workflowskill in solly-marketplace still namescompile-check.verify.shrefuses connection arguments whenconfig.jsonexists, because the scripts would connect to theconfig.jsonbroker.tcps://broker on projects generated from this branch, and bad credentials, VPN, and trust store each exited 2. Item 6 was checked with stub roles, not a broker. All runs used macOS bash 3.2.f4592a0, before item 6:topics-no-files-negative, repeats and is not related to this PR: the model writes a file against the topics skill's chat-only rule.