Repository navigation
Conversation
…pty-bus NACKs Schema 1.2.0 of own-firmware-oracle's index says what a reply means per gateway: on F460, F461 and MyHomeServer1 the firmware reports success only after a device TX-ACK, which the empty emulated bus never gives, so a NACK with verdict `out` is "went out, nobody answered", not a refusal (findings/empty-bus-reply-semantics.md). The oracle tools read that field now: the Ground Truth lines of lookup_firmware_verdict say so instead of "refused/rejected", compare_gateways adds a note under the outcome classes when such rows are present, the fleet summary shows each gateway's semantics, and status() exposes the map. An index without the field keeps the plain reading. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by A
Summary
lookup_firmware_verdictcurrently explains everyNACKas "Gateway refused/rejected the command", andcompare_gatewaysgroupsNACK + OUTas a separate outcome class. On F460020012, F461020011and MyHomeServer1028206that reading is wrong for most rows: those firmwares report success only after a device TX-ACK, which the empty emulated bus never gives, soNACKwith verdictOUTmeans "the frame went out, no device answered", not a refusal (own-firmware-oraclefindings/empty-bus-reply-semantics.md; 228 of the 309OUTrows of each of those gateways areNACK). Since schema1.2.0the index says this per gateway ingateways[].reply_semantics(empty_bus_txack/pic_ack/unknown); MyHOME already reads verdicts that way (MyHOME#766). An AI agent reading the current tool output concludes that e.g.*#1*06##is refused by the F461, which it is not (a live F461 answers it).Changes (
src/openwebnet_mcp/firmware_oracle.py)load()keeps aproduct -> reply_semanticsmap (empty string for an index without the field).reply_meaning(product, reply, verdict): one sentence per row.NACK+OUTon anempty_bus_txackgateway: "Frame went out on the bus; the NACK is this firmware's empty-bus rule (no device TX-ACK on the emulated bus), not a refusal."NACK+SILENT: "Gateway refused the frame (*#*0##); nothing reached the bus." Other replies keep their wording.format_verdict_markdown(the Ground Truth lines oflookup_firmware_verdict) uses it.compare_gateways(frame=…)adds a note under the outcome classes when such rows are present:NACK + OUTon those gateways is not a divergence fromACK + OUT.Reply Semanticscolumn;status()exposes the map.1.1.0snapshot until chore(oracle): sync the bundled oracle index to own-firmware-oracle 53f9514 (schema 1.2.0, 529 inputs) #20 lands) keeps the plain reading: no behaviour change until the field is present.Tests
tests/test_firmware_oracle.py: five new tests on a schema-1.2.0 index built intmp_path(F461empty_bus_txack, MH200Npic_ack, a catalogued F455): the map is loaded and exposed;reply_meaningfor every reply/verdict pair; the Ground Truth text for an empty-bus row, a refused row and apic_ackNACK; thecompare_gatewaysnote and the fleet column; and an index without the field. One existing assertion changed with the wording (refused/rejected→refused the frame … nothing reached the bus).Verification
pytest -q: 167 passed, 4 skipped; coverage 96 % (--cov-fail-under=95).ruff check src tests: clean.1.1.0index and the1.2.0one of chore(oracle): sync the bundled oracle index to own-firmware-oracle 53f9514 (schema 1.2.0, 529 inputs) #20 (sibling checkout of own-firmware-oracle at53f9514).🤖 Generated with Claude Code