Settings, About gains "Report this build": works or a problem, five tick boxes for what you actually exercised, how long you have run it, an optional line. It posts to the report service and lands on wadamesh.com/beta, which is what the next promote is decided on. Ticking matters: "it works" from somebody who watched it boot and "it works" from somebody who messaged on it all week are not the same claim, and a board only goes green on two of the second kind. "Report a bug" draws a QR for a prefilled GitHub issue form. The issue is filed from the reporter's phone under their own account, so no write token has to exist in a public firmware image and the reporter gets the replies. "Count this device" is off by default. It lets the update check say which board and version it is running, so a board with no reports can be told apart from a board nobody owns. Those need opposite responses and nothing could tell them apart before. Mechanics: the POST rides the existing core-0 tile/update worker and its WiFiClient/HTTPClient, like the version check, because a second pair on that ~8 KB stack overflows it. The device id is a salted SHA-256 of the public key truncated to 64 bits, so a second report replaces the first without saying who sent it. Sending is two taps and the second lists every field that leaves. Prefs v64 appends report_ping + report_done_n at the tail, which the schema's trailing static_assert now checks. Also here: scripts/build/matrix-check.sh prints what testers reported for a tag, and release.sh runs it before a --promote. It never blocks; a board nobody owns can never go green. With no reports at all it now says so rather than reporting a clean bill of health, which is the habit this is meant to replace. Built on all eleven S3 envs and the T-Display P4. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
41 lines
1.8 KiB
Bash
Executable File
41 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Print what beta testers actually reported for a tag, from the report service
|
|
# (deploy/report-service.py). Read-only and side-effect free: release.sh calls it
|
|
# before a --promote, and you can run it on its own any time.
|
|
#
|
|
# scripts/build/matrix-check.sh beta_84
|
|
#
|
|
# It never fails a promote. A board nobody owns can never go green, and some
|
|
# promotes are made on other evidence; this exists so the promote is a decision
|
|
# rather than a habit.
|
|
TAG="${1:?usage: matrix-check.sh <tag>}"
|
|
command -v curl >/dev/null 2>&1 || exit 0
|
|
command -v python3 >/dev/null 2>&1 || exit 0
|
|
|
|
curl -fsS --max-time 8 "http://firmware.wadamesh.com/report/matrix.json?tag=$TAG" 2>/dev/null \
|
|
| python3 -c '
|
|
import json, sys
|
|
try:
|
|
d = json.load(sys.stdin)
|
|
except Exception:
|
|
sys.exit(0)
|
|
s = d.get("summary", {})
|
|
print("")
|
|
print("test matrix for %s: %d green, %d part-way, %d with a problem, %d silent (%d reports, %d devices)"
|
|
% (d.get("tag", "?"), s.get("green", 0), s.get("amber", 0), s.get("red", 0),
|
|
s.get("none", 0), s.get("reports", 0), s.get("devices", 0)))
|
|
for b in d.get("boards", []):
|
|
if b.get("status") in ("red", "amber") or (b.get("status") == "none" and b.get("devices")):
|
|
print(" %-22s %s (%d works, %d problems, %s running)"
|
|
% (b.get("board", "?"), b.get("status"), b.get("works", 0), b.get("issues", 0),
|
|
b.get("devices") or "?"))
|
|
if s.get("promote_ready"):
|
|
print("every board anyone is known to be running has been vouched for. wadamesh.com/beta")
|
|
elif not s.get("reports"):
|
|
print("NOBODY has reported on this build. wadamesh.com/beta")
|
|
else:
|
|
print("NOT vouched for: %s" % (", ".join(s.get("blocked_by", [])) or "no board is green yet"))
|
|
print("promoting anyway is a choice, not an error. wadamesh.com/beta")
|
|
print("")
|
|
'
|