Merge feat/quality-telemetry: quality reports and Report a problem (spec 15.26); Mac and iPhone 0.4.9
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Makefile+1 −0PRODUCT.md+26 −2callscore/report.go+175 −0callscore/report_test.go+204 −0callscore/room.go+7 −0cmd/calls/main.go+24 −1cmd/quality-summary/main.go+485 −0cmd/quality-summary/main_test.go+74 −0docs/operations/quality.md+103 −0docs/superpowers/specs/2026-09-07-meet-design.md+190 −0internal/calls/app.go+16 −0internal/calls/config.go+14 −1internal/calls/handlers_room.go+5 −0internal/calls/hub/hub.go+18 −1internal/calls/hub/relay.go+3 −1internal/calls/hub/report.go+159 −0internal/calls/hub/report_test.go+82 −0internal/calls/quality.go+477 −0internal/calls/ratelimit.go+6 −0internal/calls/static/calls.css+56 −0internal/calls/static/report.js+355 −0internal/calls/static/room.js+726 −13internal/calls/stream.go+2 −2internal/calls/templates/join.html+10 −0internal/calls/templates/partials/report.html+48 −0internal/calls/templates/room.html+11 −0internal/callstest/browser_test.go+189 −0internal/callstest/harness_test.go+11 −0internal/callstest/native_browser_test.go+43 −1internal/callstest/quality_test.go+603 −0native/README.md+22 −0native/apple/Sources/CallsInterop/Interop.swift+5 −0native/apple/Sources/CallsKit/Audio.swift+15 −0native/apple/Sources/CallsKit/AudioDevices.swift+2 −0native/apple/Sources/CallsKit/Call.swift+281 −7native/apple/Sources/CallsKit/CallChrome.swift+20 −6native/apple/Sources/CallsKit/CallsLobby.swift+23 −0native/apple/Sources/CallsKit/CallsSettingsView.swift+1 −0native/apple/Sources/CallsKit/DevicePanel.swift+18 −0native/apple/Sources/CallsKit/MacCallView.swift+19 −3native/apple/Sources/CallsKit/Media.swift+16 −0native/apple/Sources/CallsKit/QualityReport.swift+781 −0native/apple/Sources/CallsKit/ReportProblem.swift+270 −0native/apple/Sources/CallsKit/ServerSettings.swift+23 −0native/apple/Sources/CallsMac/CallsMac.swift+4 −0native/apple/Tests/CallsKitTests/QualityReportTests.swift+450 −0native/bridge/bridge.go+39 −0native/bridge/bridge_test.go+77 −0native/ios/Sources/CallsPhone.swift+2 −0native/ios/Sources/PhoneFullScreenCall.swift+5 −1native/ios/UITests/CallsPhoneUITests.swift+42 −0native/ios/project.yml+1 −1protocol/messages.go+4 −0protocol/quality.go+191 −0test/browser/call.mjs+139 −0test/browser/room-quality.test.mjs+381 −0
CI passed — run details
CI log
=== vet === go vet ./... === fmt === === test === go test ./... ok amadan.net/oficina/calls/callscore 7.286s ? amadan.net/oficina/calls/cmd/calls [no test files] ok amadan.net/oficina/calls/cmd/quality-summary 0.003s ok amadan.net/oficina/calls/internal/calls 1.619s ok amadan.net/oficina/calls/internal/calls/apns (cached) ok amadan.net/oficina/calls/internal/calls/hub 0.327s ? amadan.net/oficina/calls/internal/calls/icons [no test files] ok amadan.net/oficina/calls/internal/calls/relay (cached) ok amadan.net/oficina/calls/internal/calls/seal (cached) ok amadan.net/oficina/calls/internal/callstest 9.788s ? amadan.net/oficina/calls/protocol [no test files] ? amadan.net/oficina/calls/scripts/writeestilo [no test files] === migration-check === go run amadan.net/rastrillo/rastrillo/cmd/rastrillo migration check rastrillo migration check: models and migrations agree === race === CGO_ENABLED=1 go test -race ./internal/... ok amadan.net/oficina/calls/internal/calls 11.279s ok amadan.net/oficina/calls/internal/calls/apns (cached) ok amadan.net/oficina/calls/internal/calls/hub 2.776s ? amadan.net/oficina/calls/internal/calls/icons [no test files] ok amadan.net/oficina/calls/internal/calls/relay (cached) ok amadan.net/oficina/calls/internal/calls/seal (cached) ok amadan.net/oficina/calls/internal/callstest 29.286s
MakefileLoading diff…
PRODUCT.mdLoading diff…
callscore/report.goLoading diff…
callscore/report_test.goLoading diff…
callscore/room.goLoading diff…
cmd/calls/main.goLoading diff…
cmd/quality-summary/main.goLoading diff…
cmd/quality-summary/main_test.goLoading diff…
docs/operations/quality.mdLoading diff…
docs/superpowers/specs/2026-09-07-meet-design.mdLoading diff…
internal/calls/app.goLoading diff…
internal/calls/config.goLoading diff…
internal/calls/handlers_room.goLoading diff…
internal/calls/hub/hub.goLoading diff…
internal/calls/hub/relay.goLoading diff…
internal/calls/hub/report.goLoading diff…
internal/calls/hub/report_test.goLoading diff…
internal/calls/quality.goLoading diff…
internal/calls/ratelimit.goLoading diff…
internal/calls/static/calls.cssLoading diff…
internal/calls/static/report.jsLoading diff…
internal/calls/static/room.jsLoading diff…
internal/calls/stream.goLoading diff…
internal/calls/templates/join.htmlLoading diff…
internal/calls/templates/partials/report.htmlLoading diff…
internal/calls/templates/room.htmlLoading diff…
internal/callstest/browser_test.goLoading diff…
internal/callstest/harness_test.goLoading diff…
internal/callstest/native_browser_test.goLoading diff…
internal/callstest/quality_test.goLoading diff…
native/README.mdLoading diff…
native/apple/Sources/CallsInterop/Interop.swiftLoading diff…
native/apple/Sources/CallsKit/Audio.swiftLoading diff…
native/apple/Sources/CallsKit/AudioDevices.swiftLoading diff…
native/apple/Sources/CallsKit/Call.swiftLoading diff…
native/apple/Sources/CallsKit/CallChrome.swiftLoading diff…
native/apple/Sources/CallsKit/CallsLobby.swiftLoading diff…
native/apple/Sources/CallsKit/CallsSettingsView.swiftLoading diff…
native/apple/Sources/CallsKit/DevicePanel.swiftLoading diff…
native/apple/Sources/CallsKit/MacCallView.swiftLoading diff…
native/apple/Sources/CallsKit/Media.swiftLoading diff…
native/apple/Sources/CallsKit/QualityReport.swiftLoading diff…
native/apple/Sources/CallsKit/ReportProblem.swiftLoading diff…
native/apple/Sources/CallsKit/ServerSettings.swiftLoading diff…
native/apple/Sources/CallsMac/CallsMac.swiftLoading diff…
native/apple/Tests/CallsKitTests/QualityReportTests.swiftLoading diff…
native/bridge/bridge.goLoading diff…
native/bridge/bridge_test.goLoading diff…
native/ios/Sources/CallsPhone.swiftLoading diff…
native/ios/Sources/PhoneFullScreenCall.swiftLoading diff…
native/ios/UITests/CallsPhoneUITests.swiftLoading diff…
native/ios/project.ymlLoading diff…
protocol/messages.goLoading diff…
protocol/quality.goLoading diff…
test/browser/call.mjsLoading diff…
test/browser/room-quality.test.mjsLoading diff…