EricssonResearch / EricssonResearch/openwebrtc-examples
NativeDemo crashes on audio calls in simulator
- Dominant language
- Objective-C
- Stars
- 336
- Forks
- 209
- PR merge metrics
- No merged PRs in 30d
Description
XCode 7.0.1
PODS:
- InAppSettingsKit (2.4.4)
- OpenWebRTC (0.3.1)
- OpenWebRTC-SDK (0.1.1)
iOS SDK 9.0
Run NativeDemo on simulator.
Initiate audio-only call from demo.openwebrtc.org.
NativeDemo crashes:
Warning: Error creating LLDB target at path '/Users/adrian/Library/Developer/Xcode/DerivedData/NativeDemo-gmcmlyfnvfmjnvahlzldcltffsut/Build/Products/Debug-iphonesimulator/NativeDemo.app'- using an empty LLDB target which can cause slow memory reads from remote devices.
2015-10-19 12:17:20.646 NativeDemo[11347:609620] [OpenWebRTC] initialized correctly!
2015-10-19 12:17:20.881 NativeDemo[11347:609620] Video settings: {
bitrate = 1024000;
framerate = 25;
height = 480;
mode = VGA;
width = 640;
}
2015-10-19 12:17:21.482 NativeDemo[11347:609620] Can't find keyplane that supports type 4 for keyboard iPhone-PortraitTruffle-NumberPad; using 675849259_PortraitTruffle_iPhone-Simple-Pad_Default
2015-10-19 12:17:32.920 NativeDemo[11347:609620] Joining room with ID: ef81ee
[audio/capture] Default audio input
2015-10-19 12:17:32.928 NativeDemo[11347:609686] gotLocalSourcesWithNames: (
"Default audio input"
)
2015-10-19 12:18:29.755 NativeDemo[11347:609620] peer joinedRoom: ef81ee
2015-10-19 12:18:29.756 NativeDemo[11347:609620] [PeerServerHandler] Sending orientation msg: {"orientation": 90}
2015-10-19 12:18:30.169 NativeDemo[11347:609620] [PeerServerHandler] Message successfully sent to peer
2015-10-19 12:18:35.381 NativeDemo[11347:609620] [EventSource] invalid line, expected data: 6b-1f906ccce9e6\r\n"},"sessionDescription":{"version":0,"originator":{"username":"-","sessionId":5962652382924314000,"sessionVersion":2,"netType":"IN","addressType":"IP4","address":"127.0.0.1"},"sessionName":"-","startTime":0,"stopTime":0,"mediaDescriptions":[{"type":"audio","port":"34740","protocol":"UDP/TLS/RTP/SAVPF","netType":"IN","addressType":"IP4","address":"10.0.1.25","mode":"sendrecv","payloads":[{"type":111,"encodingName":"opus","clockRate":48000,"channels":2},{"type":103,"encodingName":"ISAC","clockRate":16000,"channels":1},{"type":9,"encodingName":"G722","clockRate":8000,"channels":1},{"type":0,"encodingName":"PCMU","clockRate":8000,"channels":1},{"type":8,"encodingName":"PCMA","clockRate":8000,"channels":1},{"type":106,"encodingName":"CN","clockRate":32000,"channels":1},{"type":105,"encodingName":"CN","clockRate":16000,"channels":1},{"type":13,"encodingName":"CN","clockRate":8000,"channels":1},{"type":126,"encodingName":"telephone-event","clockRate":8000,"channels":1}],"rtcp":{"netType":"IN","port":9,"addressType":"IP4","address":"0.0.0.0","mux":true},"ssrcs":[2926162354],"cname":"Dw0KZO5eQ2H8pIUk","mediaStreamId":"pikA5m35htN4J9svIq2pPiiSeKFWBvXt3Vha","mediaStreamTrackId":"132c1d16-a598-430e-b46b-1f906ccce9e6","ice":{"ufrag":"J17sIn3vorx/5AGk","password":"4F+ryXPybJHjUGWcLYU3q0ex","candidates":[{"foundation":"668689512","componentId":1,"transport":"UDP","priority":2122262783,"address":"2607:fb90:62e:54c4:0:16:a9d1:3201","port":44417,"type":"host"},{"foundation":"1456924780","componentId":1,"transport":"UDP","priority":2122194687,"address":"10.0.1.25","port":34740,"type":"host"}]},"dtls":{"fingerprintHashFunction":"sha-256","fingerprint":"08:86:95:FB:0B:8F:77:A6:18:97:08:0A:74:98:BB:F9:37:F9:54:16:5F:51:0D:F6:C2:01:51:04:66:A5:23:1B","setup":"actpass"}}]},"type":"offer"}
2015-10-19 12:18:35.382 NativeDemo[11347:609620] peer sentOffer: v=0
o=- 5962652382924313089 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio
a=msid-semantic: WMS pikA5m35htN4J9svIq2pPiiSeKFWBvXt3Vha
m=audio 34740 UDP/TLS/RTP/SAVPF 111 103 9 0 8 106 105 13 126
c=IN IP4 10.0.1.25
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:668689512 1 udp 2122262783 2607:fb90:62e:54c4:0:16:a9d1:3201 44417 typ host generation 0
a=candidate:1456924780 1 udp 2122194687 10.0.1.25 34740 typ host generation 0
a=ice-ufrag:J17sIn3vorx/5AGk
a=ice-pwd:4F+ryXPybJHjUGWcLYU3q0ex
a=fingerprint:sha-256 08:86:95:FB:0B:8F:77:A6:18:97:08:0A:74:98:BB:F9:37:F9:54:16:5F:51:0D:F6:C2:01:51:04:66:A5:23:1B
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10; useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=ssrc:2926162354 cname:Dw0KZO5eQ2H8pIUk
a=ssrc:2926162354 msid:pikA5m35htN4J9svIq2pPiiSeKFWBvXt3Vha 132c1d16-a598-430e-b46b-1f906ccce9e6
a=ssrc:2926162354 mslabel:pikA5m35htN4J9svIq2pPiiSeKFWBvXt3Vha
a=ssrc:2926162354 label:132c1d16-a598-430e-b46b-1f906ccce9e6
2015-10-19 12:18:35.399 NativeDemo[11347:609620] Parsed Offer SDP: {
mediaDescriptions = (
{
address = "10.0.1.25";
addressType = IP4;
cname = Dw0KZO5eQ2H8pIUk;
dtls = {
fingerprint = "08:86:95:FB:0B:8F:77:A6:18:97:08:0A:74:98:BB:F9:37:F9:54:16:5F:51:0D:F6:C2:01:51:04:66:A5:23:1B";
fingerprintHashFunction = "sha-256";
setup = actpass;
};
ice = {
candidates = (
{
address = "2607:fb90:62e:54c4:0:16:a9d1:3201";
componentId = 1;
foundation = 668689512;
port = 44417;
priority = 2122262783;
transport = UDP;
type = host;
},
{
address = "10.0.1.25";
componentId = 1;
foundation = 1456924780;
port = 34740;
priority = 2122194687;
transport = UDP;
type = host;
}
);
password = "4F+ryXPybJHjUGWcLYU3q0ex";
ufrag = "J17sIn3vorx/5AGk";
};
mediaStreamId = pikA5m35htN4J9svIq2pPiiSeKFWBvXt3Vha;
mediaStreamTrackId = "132c1d16-a598-430e-b46b-1f906ccce9e6";
mode = sendrecv;
netType = IN;
payloads = (
{
channels = 2;
clockRate = 48000;
encodingName = opus;
parameters = {
minptime = 10;
};
type = 111;
},
{
channels = 1;
clockRate = 16000;
encodingName = ISAC;
type = 103;
},
{
channels = 1;
clockRate = 8000;
encodingName = G722;
type = 9;
},
{
channels = 1;
clockRate = 8000;
encodingName = PCMU;
type = 0;
},
{
channels = 1;
clockRate = 8000;
encodingName = PCMA;
type = 8;
},
{
channels = 1;
clockRate = 32000;
encodingName = CN;
type = 106;
},
{
channels = 1;
clockRate = 16000;
encodingName = CN;
type = 105;
},
{
channels = 1;
clockRate = 8000;
encodingName = CN;
type = 13;
},
{
channels = 1;
clockRate = 8000;
encodingName = "telephone-event";
type = 126;
}
);
port = 34740;
protocol = "UDP/TLS/RTP/SAVPF";
rtcp = {
address = "0.0.0.0";
addressType = IP4;
mux = 1;
netType = IN;
port = 9;
};
ssrcs = (
2926162354
);
type = audio;
}
);
originator = {
address = "127.0.0.1";
addressType = IP4;
netType = IN;
sessionId = "5.962652382924314e+18";
sessionVersion = 2;
username = "-";
};
sessionName = "-";
startTime = 0;
stopTime = 0;
version = 0;
}
2015-10-19 12:18:35.486 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:668689512 1 udp 2122262783 2607:fb90:62e:54c4:0:16:a9d1:3201 44417 typ host generation 0";
candidateDescription = {
address = "2607:fb90:62e:54c4:0:16:a9d1:3201";
componentId = 1;
foundation = 668689512;
port = 44417;
priority = 2122262783;
transport = UDP;
type = host;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:35.487 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:35.679 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:1456924780 1 udp 2122194687 10.0.1.25 34740 typ host generation 0";
candidateDescription = {
address = "10.0.1.25";
componentId = 1;
foundation = 1456924780;
port = 34740;
priority = 2122194687;
transport = UDP;
type = host;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:35.679 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:35.879 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:668689512 2 udp 2122262782 2607:fb90:62e:54c4:0:16:a9d1:3201 51519 typ host generation 0";
candidateDescription = {
address = "2607:fb90:62e:54c4:0:16:a9d1:3201";
componentId = 2;
foundation = 668689512;
port = 51519;
priority = 2122262782;
transport = UDP;
type = host;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:35.880 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:36.074 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:1456924780 2 udp 2122194686 10.0.1.25 59657 typ host generation 0";
candidateDescription = {
address = "10.0.1.25";
componentId = 2;
foundation = 1456924780;
port = 59657;
priority = 2122194686;
transport = UDP;
type = host;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:36.075 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:36.216 NativeDemo[11347:609686] ############################# got_dtls_certificate
2015-10-19 12:18:36.217 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> can_send_answer
2015-10-19 12:18:36.217 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> can_send_answer????
2015-10-19 12:18:36.217 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> can_send_answer: NO
2015-10-19 12:18:36.230 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.230 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.231 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.231 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.232 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.232 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.232 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.233 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.233 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.233 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.234 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.234 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.235 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.235 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.236 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.236 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.236 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.237 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.263 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:1767413912 1 tcp 1518283007 2607:fb90:62e:54c4:0:16:a9d1:3201 0 typ host tcptype active generation 0";
candidateDescription = {
address = "2607:fb90:62e:54c4:0:16:a9d1:3201";
componentId = 1;
foundation = 1767413912;
port = 0;
priority = 1518283007;
tcpType = active;
transport = TCP;
type = host;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:36.263 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:36.408 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.408 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.409 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.409 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.410 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> Got local candidate
2015-10-19 12:18:36.410 NativeDemo[11347:609686] ############################# TODO: Send candidate to other side (ICE trickle).
2015-10-19 12:18:36.532 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:408229020 1 tcp 1518214911 10.0.1.25 0 typ host tcptype active generation 0";
candidateDescription = {
address = "10.0.1.25";
componentId = 1;
foundation = 408229020;
port = 0;
priority = 1518214911;
tcpType = active;
transport = TCP;
type = host;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:36.533 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:36.930 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:1767413912 2 tcp 1518283006 2607:fb90:62e:54c4:0:16:a9d1:3201 0 typ host tcptype active generation 0";
candidateDescription = {
address = "2607:fb90:62e:54c4:0:16:a9d1:3201";
componentId = 2;
foundation = 1767413912;
port = 0;
priority = 1518283006;
tcpType = active;
transport = TCP;
type = host;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:36.931 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:37.248 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:408229020 2 tcp 1518214910 10.0.1.25 0 typ host tcptype active generation 0";
candidateDescription = {
address = "10.0.1.25";
componentId = 2;
foundation = 408229020;
port = 0;
priority = 1518214910;
tcpType = active;
transport = TCP;
type = host;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:37.248 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:37.473 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:341513956 1 udp 1685987071 104.193.168.116 34565 typ srflx raddr 10.0.1.25 rport 34740 generation 0";
candidateDescription = {
address = "104.193.168.116";
componentId = 1;
foundation = 341513956;
port = 34565;
priority = 1685987071;
relatedAddress = "10.0.1.25";
relatedPort = 34740;
transport = UDP;
type = srflx;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:37.474 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:37.780 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:341513956 2 udp 1685987070 104.193.168.116 35677 typ srflx raddr 10.0.1.25 rport 59657 generation 0";
candidateDescription = {
address = "104.193.168.116";
componentId = 2;
foundation = 341513956;
port = 35677;
priority = 1685987070;
relatedAddress = "10.0.1.25";
relatedPort = 59657;
transport = UDP;
type = srflx;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:37.781 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:37.975 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:2848939570 1 udp 41819903 192.36.158.14 52812 typ relay raddr 104.193.168.116 rport 34565 generation 0";
candidateDescription = {
address = "192.36.158.14";
componentId = 1;
foundation = 2848939570;
port = 52812;
priority = 41819903;
relatedAddress = "104.193.168.116";
relatedPort = 34565;
transport = UDP;
type = relay;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:37.976 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:38.281 NativeDemo[11347:609620] peer sentCandidate: {
candidate = "candidate:2848939570 2 udp 41819902 192.36.158.14 64883 typ relay raddr 104.193.168.116 rport 35677 generation 0";
candidateDescription = {
address = "192.36.158.14";
componentId = 2;
foundation = 2848939570;
port = 64883;
priority = 41819902;
relatedAddress = "104.193.168.116";
relatedPort = 35677;
transport = UDP;
type = relay;
};
sdpMLineIndex = 0;
sdpMid = audio;
}
2015-10-19 12:18:38.281 NativeDemo[11347:609620] [OpenWebRTCNativeHandler] Handled remote candidate
2015-10-19 12:18:39.237 NativeDemo[11347:609686] ############################# candidate_gathering_done
2015-10-19 12:18:39.237 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> can_send_answer
2015-10-19 12:18:39.238 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> can_send_answer????
2015-10-19 12:18:39.239 NativeDemo[11347:609686] >>>>>>>>>>>>>>>>>>>>>>>>>> can_send_answer: YES
2015-10-19 12:18:39.247 NativeDemo[11347:609686] Answer generated:
{
sdp = "v=0
\no=- 1445282319242978300 1 IN IP4 127.0.0.1
\ns=-
\nt=0 0
\nm=audio 1 RTP/SAVPF 111
\nc=IN IP4 0.0.0.0
\na=rtcp-mux
\na=sendrecv
\na=rtpmap:111 opus/48000/2
\na=ice-ufrag:DRvk
\na=ice-pwd:EfDfk4T61YLkrjdjDbTSUq
\na=candidate:1 1 UDP 2013266431 fe80::bc80:fdff:fe72:dc4a 60667 typ host
\na=candidate:2 1 TCP 1019216383 fe80::bc80:fdff:fe72:dc4a 0 typ host tcptype active
\na=candidate:3 1 TCP 1015022079 fe80::bc80:fdff:fe72:dc4a 50118 typ host tcptype passive
\na=candidate:4 1 UDP 2013266431 10.0.1.13 57921 typ host
\na=candidate:5 1 TCP 1019216383 10.0.1.13 0 typ host tcptype active
\na=candidate:6 1 TCP 1015022079 10.0.1.13 50119 typ host tcptype passive
\na=candidate:7 1 UDP 2013266431 fe80::aa66:7fff:fe03:4ab0 57922 typ host
\na=candidate:8 1 TCP 1019216383 fe80::aa66:7fff:fe03:4ab0 0 typ host tcptype active
\na=candidate:9 1 TCP 1015022079 fe80::aa66:7fff:fe03:4ab0 50120 typ host tcptype passive
\na=candidate:10 1 UDP 1677722111 104.193.168.116 34588 typ srflx raddr 10.0.1.13 rport 57921
\na=candidate:11 1 TCP 847249919 104.193.168.116 0 typ srflx raddr 10.0.1.13 rport 0 tcptype active
\na=candidate:12 1 TCP 843055615 104.193.168.116 50119 typ srflx raddr 10.0.1.13 rport 50119 tcptype passive
\na=fingerprint:sha-256 9F:1D:94:99:0F:16:37:A1:DB:36:B5:CE:F0:13:79:AD:C0:98:56:14:A0:81:35:A6:7D:4A:49:08:39:88:5C:FF
\na=setup:active
\n";
type = answer;
}
2015-10-19 12:18:39.758 NativeDemo[11347:609620] Rotating remote view to: 90
*\* Message: Got remote source: Remote audio stream
(:11347): GLib-GObject-CRITICAL *_: g_object_set: assertion 'G_IS_OBJECT (object)' failed
*_
ERROR:owr_audio_renderer.c:152:owr_audio_renderer_get_element: assertion failed: (sink)
(lldb)
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the issue in NativeDemo with XCode 7.0.1, iOS SDK 9.0, the listed OpenWebRTC pods, and an audio-only call from demo.openwebrtc.org. Start with the supplied log around can_send_answer, ICE candidates, and the reported crash, then confirm the simulator completes an audio call without crashing.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, objective-c
- Domain
- audio-video-rtc, mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100