Page MenuHomePhabricator

Duplicate roots for some view-topiclist rev API requests
Closed, ResolvedPublic

Description

There is some kind of issue that can cause duplicate roots (topics) in view-topiclist requests. I noticed it when working on https://gerrit.wikimedia.org/r/#/c/170998/ , but it turns out that it's present on master and even production.

Production example: https://www.mediawiki.org/w/api.php?action=flow&format=jsonfm&page=Talk%3AFlow_QA&submodule=view-topiclist&vtloffset-dir=rev&vtllimit=10&vtloffset-id=rqe9hb1t8yarz97m

Paste for posterity:

1{
2 "flow": {
3 "view-topiclist": {
4 "result": {
5 "topiclist": {
6 "submitted": {
7 "offset-dir": "rev",
8 "sortby": "newest",
9 "savesortby": false,
10 "offset-id": "rqe9hb1t8yarz97m",
11 "offset": null,
12 "limit": 10,
13 "render": false,
14 "toconly": false
15 },
16 "errors": [],
17 "sortby": "",
18 "workflowId": "rl7itnpkdbwa8b5w",
19 "roots": [
20 "ry51fussyfpos7k9",
21 "ry4n6b5cpy6y9o4h",
22 "rs9l9vau450s2nvr",
23 "rqgvx99tpd5njsdj",
24 "s0f6tno1s2qnzx47",
25 "ry62pq3us5tys0ra",
26 "ry51fussyfpos7k9",
27 "ry4n6b5cpy6y9o4h",
28 "rs9l9vau450s2nvr",
29 "rqgvx99tpd5njsdj"
30 ],
31 "posts": {
32 "ry51fussyfpos7k9": [
33 "ry51fusuik5c4ea1"
34 ],
35 "ry51fusw2okzgkzt": [
36 "ry51fusw2okzgkzt"
37 ],
38 "ry4n6b5cpy6y9o4h": [
39 "ry4n6b5ea2mlluu9"
40 ],
41 "ry4n6b5fu728y1k1": [
42 "ry4n6b5fu728y1k1"
43 ],
44 "rs9l9vau450s2nvr": [
45 "rs9l9vavo9gfeulj"
46 ],
47 "rs9l9vavobfgiwkn": [
48 "rs9l9vavobfgiwkn"
49 ],
50 "rs9lajhsbpq7kjfo": [
51 "rs9lajhsbpq7kjfo"
52 ],
53 "ry4ind992ypo37j2": [
54 "ry4ind992ypo37j2"
55 ],
56 "rqgvx99tpd5njsdj": [
57 "s1cjhwxz5ltcxlr6"
58 ],
59 "rqgvx99ydqglkciv": [
60 "rqgvx99ydqglkciv"
61 ],
62 "s0f6tno1s2qnzx47": [
63 "s0f6tno6gg1m0h9j"
64 ],
65 "s0f6tno6gi0n4j8n": [
66 "s0f6tno6gi0n4j8n"
67 ],
68 "ry62pq3us5tys0ra": [
69 "ry62pq3wca9m47h2"
70 ],
71 "ry62pq3zgj4wskwm": [
72 "ry62pq3zgj4wskwm"
73 ]
74 },
75 "revisions": {
76 "ry51fusuik5c4ea1": {
77 "workflowId": "ry51fussyfpos7k9",
78 "revisionId": "ry51fusuik5c4ea1",
79 "timestamp": "20140708232334",
80 "changeType": "new-post",
81 "dateFormats": [],
82 "properties": {
83 "topic-of-post": {
84 "plaintext": "Foo"
85 }
86 },
87 "isOriginalContent": true,
88 "isModerated": false,
89 "links": {
90 "topic-history": {
91 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=history",
92 "title": "History"
93 },
94 "topic": {
95 "url": "/wiki/Topic:Ry51fussyfpos7k9",
96 "title": "topic"
97 },
98 "post": {
99 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&topic_showPostId=ry51fussyfpos7k9#flow-post-ry51fussyfpos7k9",
100 "title": "post"
101 },
102 "topic-revision": {
103 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&topic_revId=ry51fusuik5c4ea1&action=single-view",
104 "title": "topic revision"
105 },
106 "watch-topic": {
107 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=watch",
108 "title": "Watch"
109 },
110 "unwatch-topic": {
111 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=unwatch",
112 "title": "Unwatch"
113 }
114 },
115 "actions": {
116 "reply": {
117 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=reply&topic_postId=ry51fussyfpos7k9#flow-reply-ry51fussyfpos7k9",
118 "title": "Reply"
119 },
120 "edit": {
121 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=edit-title&topic_revId=ry51fusuik5c4ea1",
122 "title": "Edit title"
123 },
124 "hide": {
125 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=moderate-topic&topic_moderationState=hide",
126 "title": "Hide topic"
127 },
128 "summarize": {
129 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=edit-topic-summary",
130 "title": "Summarize"
131 }
132 },
133 "size": {
134 "old": 0,
135 "new": 3
136 },
137 "author": {
138 "name": "198.73.209.5",
139 "wiki": "mediawikiwiki",
140 "gender": "unknown",
141 "links": {
142 "contribs": {
143 "url": "/wiki/Special:Contributions/198.73.209.5",
144 "title": "Contributions/198.73.209.5",
145 "exists": true
146 },
147 "userpage": {
148 "url": "/wiki/User:198.73.209.5",
149 "title": "198.73.209.5",
150 "exists": false
151 },
152 "talk": {
153 "url": "/wiki/User_talk:198.73.209.5",
154 "title": "User talk:198.73.209.5",
155 "exists": false
156 }
157 },
158 "id": 0
159 },
160 "lastEditUser": {
161 "name": null,
162 "wiki": null,
163 "gender": "unknown",
164 "links": [],
165 "id": null
166 },
167 "lastEditId": null,
168 "previousRevisionId": null,
169 "content": {
170 "content": "Foo",
171 "format": "plaintext"
172 },
173 "watchable": false,
174 "replyToId": null,
175 "postId": "ry51fussyfpos7k9",
176 "isMaxThreadingDepth": false,
177 "creator": {
178 "name": "198.73.209.5",
179 "wiki": "mediawikiwiki",
180 "gender": "unknown",
181 "links": {
182 "contribs": {
183 "url": "/wiki/Special:Contributions/198.73.209.5",
184 "title": "Contributions/198.73.209.5",
185 "exists": true
186 },
187 "userpage": {
188 "url": "/wiki/User:198.73.209.5",
189 "title": "198.73.209.5",
190 "exists": false
191 },
192 "talk": {
193 "url": "/wiki/User_talk:198.73.209.5",
194 "title": "User talk:198.73.209.5",
195 "exists": false
196 }
197 },
198 "id": 0
199 },
200 "replies": [
201 "ry51fusw2okzgkzt"
202 ],
203 "reply_count": 1,
204 "last_updated_readable": "23:23, 8 July 2014",
205 "last_updated": 1404861814000
206 },
207 "ry51fusw2okzgkzt": {
208 "workflowId": "ry51fussyfpos7k9",
209 "revisionId": "ry51fusw2okzgkzt",
210 "timestamp": "20140708232334",
211 "changeType": "reply",
212 "dateFormats": [],
213 "properties": [],
214 "isOriginalContent": true,
215 "isModerated": false,
216 "links": {
217 "topic-history": {
218 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=history",
219 "title": "History"
220 },
221 "topic": {
222 "url": "/wiki/Topic:Ry51fussyfpos7k9",
223 "title": "topic"
224 },
225 "post": {
226 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&topic_showPostId=ry51fusw2okzgkzt#flow-post-ry51fusw2okzgkzt",
227 "title": "post"
228 },
229 "post-revision": {
230 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&topic_postId=ry51fusw2okzgkzt&topic_revId=ry51fusw2okzgkzt&action=single-view",
231 "title": "post revision"
232 },
233 "watch-topic": {
234 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=watch",
235 "title": "Watch"
236 },
237 "unwatch-topic": {
238 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=unwatch",
239 "title": "Unwatch"
240 }
241 },
242 "actions": {
243 "reply": {
244 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=reply&topic_postId=ry51fusw2okzgkzt#flow-post-ry51fusw2okzgkzt",
245 "title": "Reply"
246 },
247 "hide": {
248 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=moderate-post&topic_postId=ry51fusw2okzgkzt&topic_moderationState=hide",
249 "title": "Hide"
250 },
251 "summarize": {
252 "url": "/w/index.php?title=Topic:Ry51fussyfpos7k9&action=edit-topic-summary",
253 "title": "Summarize"
254 }
255 },
256 "size": {
257 "old": 0,
258 "new": 43
259 },
260 "author": {
261 "name": "198.73.209.5",
262 "wiki": "mediawikiwiki",
263 "gender": "unknown",
264 "links": {
265 "contribs": {
266 "url": "/wiki/Special:Contributions/198.73.209.5",
267 "title": "Contributions/198.73.209.5",
268 "exists": true
269 },
270 "userpage": {
271 "url": "/wiki/User:198.73.209.5",
272 "title": "198.73.209.5",
273 "exists": false
274 },
275 "talk": {
276 "url": "/wiki/User_talk:198.73.209.5",
277 "title": "User talk:198.73.209.5",
278 "exists": false
279 }
280 },
281 "id": 0
282 },
283 "lastEditUser": {
284 "name": null,
285 "wiki": null,
286 "gender": "unknown",
287 "links": [],
288 "id": null
289 },
290 "lastEditId": null,
291 "previousRevisionId": null,
292 "content": {
293 "content": "<p data-parsoid='{\"dsr\":[0,3,0,0]}'>bar</p>",
294 "format": "html"
295 },
296 "watchable": false,
297 "replyToId": "ry51fussyfpos7k9",
298 "postId": "ry51fusw2okzgkzt",
299 "isMaxThreadingDepth": false,
300 "creator": {
301 "name": "198.73.209.5",
302 "wiki": "mediawikiwiki",
303 "gender": "unknown",
304 "links": {
305 "contribs": {
306 "url": "/wiki/Special:Contributions/198.73.209.5",
307 "title": "Contributions/198.73.209.5",
308 "exists": true
309 },
310 "userpage": {
311 "url": "/wiki/User:198.73.209.5",
312 "title": "198.73.209.5",
313 "exists": false
314 },
315 "talk": {
316 "url": "/wiki/User_talk:198.73.209.5",
317 "title": "User talk:198.73.209.5",
318 "exists": false
319 }
320 },
321 "id": 0
322 },
323 "replies": []
324 },
325 "ry4n6b5ea2mlluu9": {
326 "workflowId": "ry4n6b5cpy6y9o4h",
327 "revisionId": "ry4n6b5ea2mlluu9",
328 "timestamp": "20140708190725",
329 "changeType": "new-post",
330 "dateFormats": [],
331 "properties": {
332 "topic-of-post": {
333 "plaintext": "Manually add"
334 }
335 },
336 "isOriginalContent": true,
337 "isModerated": false,
338 "links": {
339 "topic-history": {
340 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=history",
341 "title": "History"
342 },
343 "topic": {
344 "url": "/wiki/Topic:Ry4n6b5cpy6y9o4h",
345 "title": "topic"
346 },
347 "post": {
348 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&topic_showPostId=ry4n6b5cpy6y9o4h#flow-post-ry4n6b5cpy6y9o4h",
349 "title": "post"
350 },
351 "topic-revision": {
352 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&topic_revId=ry4n6b5ea2mlluu9&action=single-view",
353 "title": "topic revision"
354 },
355 "watch-topic": {
356 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=watch",
357 "title": "Watch"
358 },
359 "unwatch-topic": {
360 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=unwatch",
361 "title": "Unwatch"
362 }
363 },
364 "actions": {
365 "reply": {
366 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=reply&topic_postId=ry4n6b5cpy6y9o4h#flow-reply-ry4n6b5cpy6y9o4h",
367 "title": "Reply"
368 },
369 "edit": {
370 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=edit-title&topic_revId=ry4n6b5ea2mlluu9",
371 "title": "Edit title"
372 },
373 "hide": {
374 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=moderate-topic&topic_moderationState=hide",
375 "title": "Hide topic"
376 },
377 "summarize": {
378 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=edit-topic-summary",
379 "title": "Summarize"
380 }
381 },
382 "size": {
383 "old": 0,
384 "new": 12
385 },
386 "author": {
387 "name": "198.73.209.1",
388 "wiki": "mediawikiwiki",
389 "gender": "unknown",
390 "links": {
391 "contribs": {
392 "url": "/wiki/Special:Contributions/198.73.209.1",
393 "title": "Contributions/198.73.209.1",
394 "exists": true
395 },
396 "userpage": {
397 "url": "/wiki/User:198.73.209.1",
398 "title": "198.73.209.1",
399 "exists": false
400 },
401 "talk": {
402 "url": "/wiki/User_talk:198.73.209.1",
403 "title": "User talk:198.73.209.1",
404 "exists": false
405 }
406 },
407 "id": 0
408 },
409 "lastEditUser": {
410 "name": null,
411 "wiki": null,
412 "gender": "unknown",
413 "links": [],
414 "id": null
415 },
416 "lastEditId": null,
417 "previousRevisionId": null,
418 "content": {
419 "content": "Manually add",
420 "format": "plaintext"
421 },
422 "watchable": false,
423 "replyToId": null,
424 "postId": "ry4n6b5cpy6y9o4h",
425 "isMaxThreadingDepth": false,
426 "creator": {
427 "name": "198.73.209.1",
428 "wiki": "mediawikiwiki",
429 "gender": "unknown",
430 "links": {
431 "contribs": {
432 "url": "/wiki/Special:Contributions/198.73.209.1",
433 "title": "Contributions/198.73.209.1",
434 "exists": true
435 },
436 "userpage": {
437 "url": "/wiki/User:198.73.209.1",
438 "title": "198.73.209.1",
439 "exists": false
440 },
441 "talk": {
442 "url": "/wiki/User_talk:198.73.209.1",
443 "title": "User talk:198.73.209.1",
444 "exists": false
445 }
446 },
447 "id": 0
448 },
449 "replies": [
450 "ry4n6b5fu728y1k1"
451 ],
452 "reply_count": 1,
453 "last_updated_readable": "19:07, 8 July 2014",
454 "last_updated": 1404846445000
455 },
456 "ry4n6b5fu728y1k1": {
457 "workflowId": "ry4n6b5cpy6y9o4h",
458 "revisionId": "ry4n6b5fu728y1k1",
459 "timestamp": "20140708190725",
460 "changeType": "reply",
461 "dateFormats": [],
462 "properties": [],
463 "isOriginalContent": true,
464 "isModerated": false,
465 "links": {
466 "topic-history": {
467 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=history",
468 "title": "History"
469 },
470 "topic": {
471 "url": "/wiki/Topic:Ry4n6b5cpy6y9o4h",
472 "title": "topic"
473 },
474 "post": {
475 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&topic_showPostId=ry4n6b5fu728y1k1#flow-post-ry4n6b5fu728y1k1",
476 "title": "post"
477 },
478 "post-revision": {
479 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&topic_postId=ry4n6b5fu728y1k1&topic_revId=ry4n6b5fu728y1k1&action=single-view",
480 "title": "post revision"
481 },
482 "watch-topic": {
483 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=watch",
484 "title": "Watch"
485 },
486 "unwatch-topic": {
487 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=unwatch",
488 "title": "Unwatch"
489 }
490 },
491 "actions": {
492 "reply": {
493 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=reply&topic_postId=ry4n6b5fu728y1k1#flow-post-ry4n6b5fu728y1k1",
494 "title": "Reply"
495 },
496 "hide": {
497 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=moderate-post&topic_postId=ry4n6b5fu728y1k1&topic_moderationState=hide",
498 "title": "Hide"
499 },
500 "summarize": {
501 "url": "/w/index.php?title=Topic:Ry4n6b5cpy6y9o4h&action=edit-topic-summary",
502 "title": "Summarize"
503 }
504 },
505 "size": {
506 "old": 0,
507 "new": 48
508 },
509 "author": {
510 "name": "198.73.209.1",
511 "wiki": "mediawikiwiki",
512 "gender": "unknown",
513 "links": {
514 "contribs": {
515 "url": "/wiki/Special:Contributions/198.73.209.1",
516 "title": "Contributions/198.73.209.1",
517 "exists": true
518 },
519 "userpage": {
520 "url": "/wiki/User:198.73.209.1",
521 "title": "198.73.209.1",
522 "exists": false
523 },
524 "talk": {
525 "url": "/wiki/User_talk:198.73.209.1",
526 "title": "User talk:198.73.209.1",
527 "exists": false
528 }
529 },
530 "id": 0
531 },
532 "lastEditUser": {
533 "name": null,
534 "wiki": null,
535 "gender": "unknown",
536 "links": [],
537 "id": null
538 },
539 "lastEditId": null,
540 "previousRevisionId": null,
541 "content": {
542 "content": "<p data-parsoid='{\"dsr\":[0,8,0,0]}'>And more</p>",
543 "format": "html"
544 },
545 "watchable": false,
546 "replyToId": "ry4n6b5cpy6y9o4h",
547 "postId": "ry4n6b5fu728y1k1",
548 "isMaxThreadingDepth": false,
549 "creator": {
550 "name": "198.73.209.1",
551 "wiki": "mediawikiwiki",
552 "gender": "unknown",
553 "links": {
554 "contribs": {
555 "url": "/wiki/Special:Contributions/198.73.209.1",
556 "title": "Contributions/198.73.209.1",
557 "exists": true
558 },
559 "userpage": {
560 "url": "/wiki/User:198.73.209.1",
561 "title": "198.73.209.1",
562 "exists": false
563 },
564 "talk": {
565 "url": "/wiki/User_talk:198.73.209.1",
566 "title": "User talk:198.73.209.1",
567 "exists": false
568 }
569 },
570 "id": 0
571 },
572 "replies": []
573 },
574 "rs9l9vavo9gfeulj": {
575 "workflowId": "rs9l9vau450s2nvr",
576 "revisionId": "rs9l9vavo9gfeulj",
577 "timestamp": "20140405011634",
578 "changeType": "new-post",
579 "dateFormats": [],
580 "properties": {
581 "topic-of-post": {
582 "plaintext": "test"
583 }
584 },
585 "isOriginalContent": true,
586 "isModerated": false,
587 "links": {
588 "topic-history": {
589 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=history",
590 "title": "History"
591 },
592 "topic": {
593 "url": "/wiki/Topic:Rs9l9vau450s2nvr",
594 "title": "topic"
595 },
596 "post": {
597 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&topic_showPostId=rs9l9vau450s2nvr#flow-post-rs9l9vau450s2nvr",
598 "title": "post"
599 },
600 "topic-revision": {
601 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&topic_revId=rs9l9vavo9gfeulj&action=single-view",
602 "title": "topic revision"
603 },
604 "watch-topic": {
605 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=watch",
606 "title": "Watch"
607 },
608 "unwatch-topic": {
609 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=unwatch",
610 "title": "Unwatch"
611 }
612 },
613 "actions": {
614 "reply": {
615 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=reply&topic_postId=rs9l9vau450s2nvr#flow-reply-rs9l9vau450s2nvr",
616 "title": "Reply"
617 },
618 "edit": {
619 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=edit-title&topic_revId=rs9l9vavo9gfeulj",
620 "title": "Edit title"
621 },
622 "hide": {
623 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=moderate-topic&topic_moderationState=hide",
624 "title": "Hide topic"
625 },
626 "summarize": {
627 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=edit-topic-summary",
628 "title": "Summarize"
629 }
630 },
631 "size": {
632 "old": 0,
633 "new": 4
634 },
635 "author": {
636 "name": "Bsitu",
637 "wiki": "mediawikiwiki",
638 "gender": "unknown",
639 "links": {
640 "contribs": {
641 "url": "/wiki/Special:Contributions/Bsitu",
642 "title": "Contributions/Bsitu",
643 "exists": true
644 },
645 "userpage": {
646 "url": "/wiki/User:Bsitu",
647 "title": "Bsitu",
648 "exists": true
649 },
650 "talk": {
651 "url": "/wiki/User_talk:Bsitu",
652 "title": "User talk:Bsitu",
653 "exists": true
654 }
655 },
656 "id": 418968
657 },
658 "lastEditUser": {
659 "name": null,
660 "wiki": null,
661 "gender": "unknown",
662 "links": [],
663 "id": null
664 },
665 "lastEditId": null,
666 "previousRevisionId": null,
667 "content": {
668 "content": "test",
669 "format": "plaintext"
670 },
671 "watchable": false,
672 "replyToId": null,
673 "postId": "rs9l9vau450s2nvr",
674 "isMaxThreadingDepth": false,
675 "creator": {
676 "name": "Bsitu",
677 "wiki": "mediawikiwiki",
678 "gender": "unknown",
679 "links": {
680 "contribs": {
681 "url": "/wiki/Special:Contributions/Bsitu",
682 "title": "Contributions/Bsitu",
683 "exists": true
684 },
685 "userpage": {
686 "url": "/wiki/User:Bsitu",
687 "title": "Bsitu",
688 "exists": true
689 },
690 "talk": {
691 "url": "/wiki/User_talk:Bsitu",
692 "title": "User talk:Bsitu",
693 "exists": true
694 }
695 },
696 "id": 418968
697 },
698 "replies": [
699 "rs9l9vavobfgiwkn",
700 "ry4ind992ypo37j2"
701 ],
702 "reply_count": 3,
703 "last_updated_readable": "17:46, 8 July 2014",
704 "last_updated": 1404841569000
705 },
706 "rs9l9vavobfgiwkn": {
707 "workflowId": "rs9l9vau450s2nvr",
708 "revisionId": "rs9l9vavobfgiwkn",
709 "timestamp": "20140405011634",
710 "changeType": "reply",
711 "dateFormats": [],
712 "properties": [],
713 "isOriginalContent": true,
714 "isModerated": false,
715 "links": {
716 "topic-history": {
717 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=history",
718 "title": "History"
719 },
720 "topic": {
721 "url": "/wiki/Topic:Rs9l9vau450s2nvr",
722 "title": "topic"
723 },
724 "post": {
725 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&topic_showPostId=rs9l9vavobfgiwkn#flow-post-rs9l9vavobfgiwkn",
726 "title": "post"
727 },
728 "post-revision": {
729 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&topic_postId=rs9l9vavobfgiwkn&topic_revId=rs9l9vavobfgiwkn&action=single-view",
730 "title": "post revision"
731 },
732 "watch-topic": {
733 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=watch",
734 "title": "Watch"
735 },
736 "unwatch-topic": {
737 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=unwatch",
738 "title": "Unwatch"
739 }
740 },
741 "actions": {
742 "reply": {
743 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=reply&topic_postId=rs9l9vavobfgiwkn#flow-post-rs9l9vavobfgiwkn",
744 "title": "Reply"
745 },
746 "hide": {
747 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=moderate-post&topic_postId=rs9l9vavobfgiwkn&topic_moderationState=hide",
748 "title": "Hide"
749 },
750 "summarize": {
751 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=edit-topic-summary",
752 "title": "Summarize"
753 }
754 },
755 "size": {
756 "old": 0,
757 "new": 44
758 },
759 "author": {
760 "name": "Bsitu",
761 "wiki": "mediawikiwiki",
762 "gender": "unknown",
763 "links": {
764 "contribs": {
765 "url": "/wiki/Special:Contributions/Bsitu",
766 "title": "Contributions/Bsitu",
767 "exists": true
768 },
769 "userpage": {
770 "url": "/wiki/User:Bsitu",
771 "title": "Bsitu",
772 "exists": true
773 },
774 "talk": {
775 "url": "/wiki/User_talk:Bsitu",
776 "title": "User talk:Bsitu",
777 "exists": true
778 }
779 },
780 "id": 418968
781 },
782 "lastEditUser": {
783 "name": null,
784 "wiki": null,
785 "gender": "unknown",
786 "links": [],
787 "id": null
788 },
789 "lastEditId": null,
790 "previousRevisionId": null,
791 "content": {
792 "content": "<p data-parsoid='{\"dsr\":[0,4,0,0]}'>test</p>",
793 "format": "html"
794 },
795 "watchable": false,
796 "replyToId": "rs9l9vau450s2nvr",
797 "postId": "rs9l9vavobfgiwkn",
798 "isMaxThreadingDepth": false,
799 "creator": {
800 "name": "Bsitu",
801 "wiki": "mediawikiwiki",
802 "gender": "unknown",
803 "links": {
804 "contribs": {
805 "url": "/wiki/Special:Contributions/Bsitu",
806 "title": "Contributions/Bsitu",
807 "exists": true
808 },
809 "userpage": {
810 "url": "/wiki/User:Bsitu",
811 "title": "Bsitu",
812 "exists": true
813 },
814 "talk": {
815 "url": "/wiki/User_talk:Bsitu",
816 "title": "User talk:Bsitu",
817 "exists": true
818 }
819 },
820 "id": 418968
821 },
822 "replies": [
823 "rs9lajhsbpq7kjfo"
824 ]
825 },
826 "rs9lajhsbpq7kjfo": {
827 "workflowId": "rs9l9vau450s2nvr",
828 "revisionId": "rs9lajhsbpq7kjfo",
829 "timestamp": "20140405011654",
830 "changeType": "reply",
831 "dateFormats": [],
832 "properties": [],
833 "isOriginalContent": true,
834 "isModerated": false,
835 "links": {
836 "topic-history": {
837 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=history",
838 "title": "History"
839 },
840 "topic": {
841 "url": "/wiki/Topic:Rs9l9vau450s2nvr",
842 "title": "topic"
843 },
844 "post": {
845 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&topic_showPostId=rs9lajhsbpq7kjfo#flow-post-rs9lajhsbpq7kjfo",
846 "title": "post"
847 },
848 "post-revision": {
849 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&topic_postId=rs9lajhsbpq7kjfo&topic_revId=rs9lajhsbpq7kjfo&action=single-view",
850 "title": "post revision"
851 },
852 "watch-topic": {
853 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=watch",
854 "title": "Watch"
855 },
856 "unwatch-topic": {
857 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=unwatch",
858 "title": "Unwatch"
859 }
860 },
861 "actions": {
862 "reply": {
863 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=reply&topic_postId=rs9lajhsbpq7kjfo#flow-post-rs9lajhsbpq7kjfo",
864 "title": "Reply"
865 },
866 "hide": {
867 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=moderate-post&topic_postId=rs9lajhsbpq7kjfo&topic_moderationState=hide",
868 "title": "Hide"
869 },
870 "summarize": {
871 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=edit-topic-summary",
872 "title": "Summarize"
873 }
874 },
875 "size": {
876 "old": 0,
877 "new": 202
878 },
879 "author": {
880 "name": "Bsitu",
881 "wiki": "mediawikiwiki",
882 "gender": "unknown",
883 "links": {
884 "contribs": {
885 "url": "/wiki/Special:Contributions/Bsitu",
886 "title": "Contributions/Bsitu",
887 "exists": true
888 },
889 "userpage": {
890 "url": "/wiki/User:Bsitu",
891 "title": "Bsitu",
892 "exists": true
893 },
894 "talk": {
895 "url": "/wiki/User_talk:Bsitu",
896 "title": "User talk:Bsitu",
897 "exists": true
898 }
899 },
900 "id": 418968
901 },
902 "lastEditUser": {
903 "name": null,
904 "wiki": null,
905 "gender": "unknown",
906 "links": [],
907 "id": null
908 },
909 "lastEditId": null,
910 "previousRevisionId": null,
911 "content": {
912 "content": "<p data-parsoid='{\"dsr\":[0,27,0,0]}'><a href=\"/wiki/User:Bsitu\" title=\"User:Bsitu\" rel=\"mw:WikiLink\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./User:Bsitu\"},\"sa\":{\"href\":\"User:Bsitu\"},\"dsr\":[0,20,13,2]}'>Bsitu</a>: Hello</p>",
913 "format": "html"
914 },
915 "watchable": false,
916 "replyToId": "rs9l9vavobfgiwkn",
917 "postId": "rs9lajhsbpq7kjfo",
918 "isMaxThreadingDepth": false,
919 "creator": {
920 "name": "Bsitu",
921 "wiki": "mediawikiwiki",
922 "gender": "unknown",
923 "links": {
924 "contribs": {
925 "url": "/wiki/Special:Contributions/Bsitu",
926 "title": "Contributions/Bsitu",
927 "exists": true
928 },
929 "userpage": {
930 "url": "/wiki/User:Bsitu",
931 "title": "Bsitu",
932 "exists": true
933 },
934 "talk": {
935 "url": "/wiki/User_talk:Bsitu",
936 "title": "User talk:Bsitu",
937 "exists": true
938 }
939 },
940 "id": 418968
941 },
942 "replies": []
943 },
944 "ry4ind992ypo37j2": {
945 "workflowId": "rs9l9vau450s2nvr",
946 "revisionId": "ry4ind992ypo37j2",
947 "timestamp": "20140708174609",
948 "changeType": "reply",
949 "dateFormats": [],
950 "properties": [],
951 "isOriginalContent": true,
952 "isModerated": false,
953 "links": {
954 "topic-history": {
955 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=history",
956 "title": "History"
957 },
958 "topic": {
959 "url": "/wiki/Topic:Rs9l9vau450s2nvr",
960 "title": "topic"
961 },
962 "post": {
963 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&topic_showPostId=ry4ind992ypo37j2#flow-post-ry4ind992ypo37j2",
964 "title": "post"
965 },
966 "post-revision": {
967 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&topic_postId=ry4ind992ypo37j2&topic_revId=ry4ind992ypo37j2&action=single-view",
968 "title": "post revision"
969 },
970 "watch-topic": {
971 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=watch",
972 "title": "Watch"
973 },
974 "unwatch-topic": {
975 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=unwatch",
976 "title": "Unwatch"
977 }
978 },
979 "actions": {
980 "reply": {
981 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=reply&topic_postId=ry4ind992ypo37j2#flow-post-ry4ind992ypo37j2",
982 "title": "Reply"
983 },
984 "hide": {
985 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=moderate-post&topic_postId=ry4ind992ypo37j2&topic_moderationState=hide",
986 "title": "Hide"
987 },
988 "summarize": {
989 "url": "/w/index.php?title=Topic:Rs9l9vau450s2nvr&action=edit-topic-summary",
990 "title": "Summarize"
991 }
992 },
993 "size": {
994 "old": 0,
995 "new": 62
996 },
997 "author": {
998 "name": "198.73.209.1",
999 "wiki": "mediawikiwiki",
1000 "gender": "unknown",
1001 "links": {
1002 "contribs": {
1003 "url": "/wiki/Special:Contributions/198.73.209.1",
1004 "title": "Contributions/198.73.209.1",
1005 "exists": true
1006 },
1007 "userpage": {
1008 "url": "/wiki/User:198.73.209.1",
1009 "title": "198.73.209.1",
1010 "exists": false
1011 },
1012 "talk": {
1013 "url": "/wiki/User_talk:198.73.209.1",
1014 "title": "User talk:198.73.209.1",
1015 "exists": false
1016 }
1017 },
1018 "id": 0
1019 },
1020 "lastEditUser": {
1021 "name": null,
1022 "wiki": null,
1023 "gender": "unknown",
1024 "links": [],
1025 "id": null
1026 },
1027 "lastEditId": null,
1028 "previousRevisionId": null,
1029 "content": {
1030 "content": "<p data-parsoid='{\"dsr\":[0,21,0,0]}'>Can I reply anonhere?</p>",
1031 "format": "html"
1032 },
1033 "watchable": false,
1034 "replyToId": "rs9l9vau450s2nvr",
1035 "postId": "ry4ind992ypo37j2",
1036 "isMaxThreadingDepth": false,
1037 "creator": {
1038 "name": "198.73.209.1",
1039 "wiki": "mediawikiwiki",
1040 "gender": "unknown",
1041 "links": {
1042 "contribs": {
1043 "url": "/wiki/Special:Contributions/198.73.209.1",
1044 "title": "Contributions/198.73.209.1",
1045 "exists": true
1046 },
1047 "userpage": {
1048 "url": "/wiki/User:198.73.209.1",
1049 "title": "198.73.209.1",
1050 "exists": false
1051 },
1052 "talk": {
1053 "url": "/wiki/User_talk:198.73.209.1",
1054 "title": "User talk:198.73.209.1",
1055 "exists": false
1056 }
1057 },
1058 "id": 0
1059 },
1060 "replies": []
1061 },
1062 "s1cjhwxz5ltcxlr6": {
1063 "workflowId": "rqgvx99tpd5njsdj",
1064 "revisionId": "s1cjhwxz5ltcxlr6",
1065 "timestamp": "20140829194715",
1066 "changeType": "close-topic",
1067 "dateFormats": [],
1068 "properties": {
1069 "topic-of-post": {
1070 "plaintext": "Manual tests passed"
1071 }
1072 },
1073 "isOriginalContent": false,
1074 "isModerated": true,
1075 "links": {
1076 "topic": {
1077 "url": "/wiki/Topic:Rqgvx99tpd5njsdj",
1078 "title": "topic"
1079 },
1080 "topic-history": {
1081 "url": "/w/index.php?title=Topic:Rqgvx99tpd5njsdj&action=history",
1082 "title": "History"
1083 },
1084 "watch-topic": {
1085 "url": "/w/index.php?title=Topic:Rqgvx99tpd5njsdj&action=watch",
1086 "title": "Watch"
1087 },
1088 "unwatch-topic": {
1089 "url": "/w/index.php?title=Topic:Rqgvx99tpd5njsdj&action=unwatch",
1090 "title": "Unwatch"
1091 }
1092 },
1093 "actions": [],
1094 "size": {
1095 "old": 19,
1096 "new": 19
1097 },
1098 "author": {
1099 "name": "SPage (WMF)",
1100 "wiki": "mediawikiwiki",
1101 "gender": "unknown",
1102 "links": {
1103 "contribs": {
1104 "url": "/wiki/Special:Contributions/SPage_(WMF)",
1105 "title": "Contributions/SPage (WMF)",
1106 "exists": true
1107 },
1108 "userpage": {
1109 "url": "/wiki/User:SPage_(WMF)",
1110 "title": "SPage (WMF)",
1111 "exists": true
1112 },
1113 "talk": {
1114 "url": "/wiki/User_talk:SPage_(WMF)",
1115 "title": "User talk:SPage (WMF)",
1116 "exists": true
1117 }
1118 },
1119 "id": 619583
1120 },
1121 "lastEditUser": {
1122 "name": "Quiddity (WMF)",
1123 "wiki": "mediawikiwiki",
1124 "gender": "unknown",
1125 "links": {
1126 "contribs": {
1127 "url": "/wiki/Special:Contributions/Quiddity_(WMF)",
1128 "title": "Contributions/Quiddity (WMF)",
1129 "exists": true
1130 },
1131 "userpage": {
1132 "url": "/wiki/User:Quiddity_(WMF)",
1133 "title": "Quiddity (WMF)",
1134 "exists": true
1135 },
1136 "talk": {
1137 "url": "/wiki/User_talk:Quiddity_(WMF)",
1138 "title": "User talk:Quiddity (WMF)",
1139 "exists": true
1140 }
1141 },
1142 "id": 968235
1143 },
1144 "lastEditId": "rqgwn1f9y1apks4h",
1145 "previousRevisionId": "rqgwn1f9y1apks4h",
1146 "moderator": {
1147 "name": "SPage (WMF)",
1148 "wiki": "mediawikiwiki",
1149 "gender": "unknown",
1150 "links": {
1151 "contribs": {
1152 "url": "/wiki/Special:Contributions/SPage_(WMF)",
1153 "title": "Contributions/SPage (WMF)",
1154 "exists": true
1155 },
1156 "userpage": {
1157 "url": "/wiki/User:SPage_(WMF)",
1158 "title": "SPage (WMF)",
1159 "exists": true
1160 },
1161 "talk": {
1162 "url": "/wiki/User_talk:SPage_(WMF)",
1163 "title": "User talk:SPage (WMF)",
1164 "exists": true
1165 }
1166 },
1167 "id": 619583
1168 },
1169 "moderateState": "lock",
1170 "moderateReason": {
1171 "content": "Glad to hear it.",
1172 "format": "plaintext"
1173 },
1174 "content": {
1175 "content": "Manual tests passed",
1176 "format": "plaintext"
1177 },
1178 "summary": {
1179 "content": "<p data-parsoid='{\"dsr\":[0,16,0,0]}'>Glad to hear it.</p>",
1180 "format": "html",
1181 "revId": "s1cjhwy0pq909sgy"
1182 },
1183 "watchable": false,
1184 "replyToId": null,
1185 "postId": "rqgvx99tpd5njsdj",
1186 "isMaxThreadingDepth": false,
1187 "creator": {
1188 "name": "Quiddity (WMF)",
1189 "wiki": "mediawikiwiki",
1190 "gender": "unknown",
1191 "links": {
1192 "contribs": {
1193 "url": "/wiki/Special:Contributions/Quiddity_(WMF)",
1194 "title": "Contributions/Quiddity (WMF)",
1195 "exists": true
1196 },
1197 "userpage": {
1198 "url": "/wiki/User:Quiddity_(WMF)",
1199 "title": "Quiddity (WMF)",
1200 "exists": true
1201 },
1202 "talk": {
1203 "url": "/wiki/User_talk:Quiddity_(WMF)",
1204 "title": "User talk:Quiddity (WMF)",
1205 "exists": true
1206 }
1207 },
1208 "id": 968235
1209 },
1210 "replies": [
1211 "rqgvx99ydqglkciv"
1212 ],
1213 "reply_count": 1,
1214 "last_updated_readable": "19:47, 29 August 2014",
1215 "last_updated": 1409341635000
1216 },
1217 "rqgvx99ydqglkciv": {
1218 "workflowId": "rqgvx99tpd5njsdj",
1219 "revisionId": "rqgvx99ydqglkciv",
1220 "timestamp": "20140307000951",
1221 "changeType": "reply",
1222 "dateFormats": [],
1223 "properties": [],
1224 "isOriginalContent": true,
1225 "isModerated": false,
1226 "links": {
1227 "topic-history": {
1228 "url": "/w/index.php?title=Topic:Rqgvx99tpd5njsdj&action=history",
1229 "title": "History"
1230 },
1231 "topic": {
1232 "url": "/wiki/Topic:Rqgvx99tpd5njsdj",
1233 "title": "topic"
1234 },
1235 "post": {
1236 "url": "/w/index.php?title=Topic:Rqgvx99tpd5njsdj&topic_showPostId=rqgvx99ydqglkciv#flow-post-rqgvx99ydqglkciv",
1237 "title": "post"
1238 },
1239 "post-revision": {
1240 "url": "/w/index.php?title=Topic:Rqgvx99tpd5njsdj&topic_postId=rqgvx99ydqglkciv&topic_revId=rqgvx99ydqglkciv&action=single-view",
1241 "title": "post revision"
1242 },
1243 "watch-topic": {
1244 "url": "/w/index.php?title=Topic:Rqgvx99tpd5njsdj&action=watch",
1245 "title": "Watch"
1246 },
1247 "unwatch-topic": {
1248 "url": "/w/index.php?title=Topic:Rqgvx99tpd5njsdj&action=unwatch",
1249 "title": "Unwatch"
1250 }
1251 },
1252 "actions": {
1253 "summarize": {
1254 "url": "/w/index.php?title=Topic:Rqgvx99tpd5njsdj&action=edit-topic-summary",
1255 "title": "Summarize"
1256 }
1257 },
1258 "size": {
1259 "old": 0,
1260 "new": 44
1261 },
1262 "author": {
1263 "name": "Quiddity (WMF)",
1264 "wiki": "mediawikiwiki",
1265 "gender": "unknown",
1266 "links": {
1267 "contribs": {
1268 "url": "/wiki/Special:Contributions/Quiddity_(WMF)",
1269 "title": "Contributions/Quiddity (WMF)",
1270 "exists": true
1271 },
1272 "userpage": {
1273 "url": "/wiki/User:Quiddity_(WMF)",
1274 "title": "Quiddity (WMF)",
1275 "exists": true
1276 },
1277 "talk": {
1278 "url": "/wiki/User_talk:Quiddity_(WMF)",
1279 "title": "User talk:Quiddity (WMF)",
1280 "exists": true
1281 }
1282 },
1283 "id": 968235
1284 },
1285 "lastEditUser": {
1286 "name": null,
1287 "wiki": null,
1288 "gender": "unknown",
1289 "links": [],
1290 "id": null
1291 },
1292 "lastEditId": null,
1293 "previousRevisionId": null,
1294 "content": {
1295 "content": "<p data-parsoid='{\"dsr\":[0,4,0,0]}'>test</p>",
1296 "format": "html"
1297 },
1298 "watchable": false,
1299 "replyToId": "rqgvx99tpd5njsdj",
1300 "postId": "rqgvx99ydqglkciv",
1301 "isMaxThreadingDepth": false,
1302 "creator": {
1303 "name": "Quiddity (WMF)",
1304 "wiki": "mediawikiwiki",
1305 "gender": "unknown",
1306 "links": {
1307 "contribs": {
1308 "url": "/wiki/Special:Contributions/Quiddity_(WMF)",
1309 "title": "Contributions/Quiddity (WMF)",
1310 "exists": true
1311 },
1312 "userpage": {
1313 "url": "/wiki/User:Quiddity_(WMF)",
1314 "title": "Quiddity (WMF)",
1315 "exists": true
1316 },
1317 "talk": {
1318 "url": "/wiki/User_talk:Quiddity_(WMF)",
1319 "title": "User talk:Quiddity (WMF)",
1320 "exists": true
1321 }
1322 },
1323 "id": 968235
1324 },
1325 "replies": []
1326 },
1327 "s0f6tno6gg1m0h9j": {
1328 "workflowId": "s0f6tno1s2qnzx47",
1329 "revisionId": "s0f6tno6gg1m0h9j",
1330 "timestamp": "20140814202729",
1331 "changeType": "new-post",
1332 "dateFormats": [],
1333 "properties": {
1334 "topic-of-post": {
1335 "plaintext": "Test new topic"
1336 }
1337 },
1338 "isOriginalContent": true,
1339 "isModerated": false,
1340 "links": {
1341 "topic-history": {
1342 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=history",
1343 "title": "History"
1344 },
1345 "topic": {
1346 "url": "/wiki/Topic:S0f6tno1s2qnzx47",
1347 "title": "topic"
1348 },
1349 "post": {
1350 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&topic_showPostId=s0f6tno1s2qnzx47#flow-post-s0f6tno1s2qnzx47",
1351 "title": "post"
1352 },
1353 "topic-revision": {
1354 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&topic_revId=s0f6tno6gg1m0h9j&action=single-view",
1355 "title": "topic revision"
1356 },
1357 "watch-topic": {
1358 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=watch",
1359 "title": "Watch"
1360 },
1361 "unwatch-topic": {
1362 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=unwatch",
1363 "title": "Unwatch"
1364 }
1365 },
1366 "actions": {
1367 "reply": {
1368 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=reply&topic_postId=s0f6tno1s2qnzx47#flow-reply-s0f6tno1s2qnzx47",
1369 "title": "Reply"
1370 },
1371 "edit": {
1372 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=edit-title&topic_revId=s0f6tno6gg1m0h9j",
1373 "title": "Edit title"
1374 },
1375 "hide": {
1376 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=moderate-topic&topic_moderationState=hide",
1377 "title": "Hide topic"
1378 },
1379 "summarize": {
1380 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=edit-topic-summary",
1381 "title": "Summarize"
1382 }
1383 },
1384 "size": {
1385 "old": 0,
1386 "new": 14
1387 },
1388 "author": {
1389 "name": "SPage (WMF)",
1390 "wiki": "mediawikiwiki",
1391 "gender": "unknown",
1392 "links": {
1393 "contribs": {
1394 "url": "/wiki/Special:Contributions/SPage_(WMF)",
1395 "title": "Contributions/SPage (WMF)",
1396 "exists": true
1397 },
1398 "userpage": {
1399 "url": "/wiki/User:SPage_(WMF)",
1400 "title": "SPage (WMF)",
1401 "exists": true
1402 },
1403 "talk": {
1404 "url": "/wiki/User_talk:SPage_(WMF)",
1405 "title": "User talk:SPage (WMF)",
1406 "exists": true
1407 }
1408 },
1409 "id": 619583
1410 },
1411 "lastEditUser": {
1412 "name": null,
1413 "wiki": null,
1414 "gender": "unknown",
1415 "links": [],
1416 "id": null
1417 },
1418 "lastEditId": null,
1419 "previousRevisionId": null,
1420 "content": {
1421 "content": "Test new topic",
1422 "format": "plaintext"
1423 },
1424 "watchable": false,
1425 "replyToId": null,
1426 "postId": "s0f6tno1s2qnzx47",
1427 "isMaxThreadingDepth": false,
1428 "creator": {
1429 "name": "SPage (WMF)",
1430 "wiki": "mediawikiwiki",
1431 "gender": "unknown",
1432 "links": {
1433 "contribs": {
1434 "url": "/wiki/Special:Contributions/SPage_(WMF)",
1435 "title": "Contributions/SPage (WMF)",
1436 "exists": true
1437 },
1438 "userpage": {
1439 "url": "/wiki/User:SPage_(WMF)",
1440 "title": "SPage (WMF)",
1441 "exists": true
1442 },
1443 "talk": {
1444 "url": "/wiki/User_talk:SPage_(WMF)",
1445 "title": "User talk:SPage (WMF)",
1446 "exists": true
1447 }
1448 },
1449 "id": 619583
1450 },
1451 "replies": [
1452 "s0f6tno6gi0n4j8n"
1453 ],
1454 "reply_count": 1,
1455 "last_updated_readable": "20:27, 14 August 2014",
1456 "last_updated": 1408048049000
1457 },
1458 "s0f6tno6gi0n4j8n": {
1459 "workflowId": "s0f6tno1s2qnzx47",
1460 "revisionId": "s0f6tno6gi0n4j8n",
1461 "timestamp": "20140814202729",
1462 "changeType": "reply",
1463 "dateFormats": [],
1464 "properties": [],
1465 "isOriginalContent": true,
1466 "isModerated": false,
1467 "links": {
1468 "topic-history": {
1469 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=history",
1470 "title": "History"
1471 },
1472 "topic": {
1473 "url": "/wiki/Topic:S0f6tno1s2qnzx47",
1474 "title": "topic"
1475 },
1476 "post": {
1477 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&topic_showPostId=s0f6tno6gi0n4j8n#flow-post-s0f6tno6gi0n4j8n",
1478 "title": "post"
1479 },
1480 "post-revision": {
1481 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&topic_postId=s0f6tno6gi0n4j8n&topic_revId=s0f6tno6gi0n4j8n&action=single-view",
1482 "title": "post revision"
1483 },
1484 "watch-topic": {
1485 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=watch",
1486 "title": "Watch"
1487 },
1488 "unwatch-topic": {
1489 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=unwatch",
1490 "title": "Unwatch"
1491 }
1492 },
1493 "actions": {
1494 "reply": {
1495 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=reply&topic_postId=s0f6tno6gi0n4j8n#flow-post-s0f6tno6gi0n4j8n",
1496 "title": "Reply"
1497 },
1498 "hide": {
1499 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=moderate-post&topic_postId=s0f6tno6gi0n4j8n&topic_moderationState=hide",
1500 "title": "Hide"
1501 },
1502 "summarize": {
1503 "url": "/w/index.php?title=Topic:S0f6tno1s2qnzx47&action=edit-topic-summary",
1504 "title": "Summarize"
1505 }
1506 },
1507 "size": {
1508 "old": 0,
1509 "new": 57
1510 },
1511 "author": {
1512 "name": "SPage (WMF)",
1513 "wiki": "mediawikiwiki",
1514 "gender": "unknown",
1515 "links": {
1516 "contribs": {
1517 "url": "/wiki/Special:Contributions/SPage_(WMF)",
1518 "title": "Contributions/SPage (WMF)",
1519 "exists": true
1520 },
1521 "userpage": {
1522 "url": "/wiki/User:SPage_(WMF)",
1523 "title": "SPage (WMF)",
1524 "exists": true
1525 },
1526 "talk": {
1527 "url": "/wiki/User_talk:SPage_(WMF)",
1528 "title": "User talk:SPage (WMF)",
1529 "exists": true
1530 }
1531 },
1532 "id": 619583
1533 },
1534 "lastEditUser": {
1535 "name": null,
1536 "wiki": null,
1537 "gender": "unknown",
1538 "links": [],
1539 "id": null
1540 },
1541 "lastEditId": null,
1542 "previousRevisionId": null,
1543 "content": {
1544 "content": "<p data-parsoid='{\"dsr\":[0,16,0,0]}'>And a first post</p>",
1545 "format": "html"
1546 },
1547 "watchable": false,
1548 "replyToId": "s0f6tno1s2qnzx47",
1549 "postId": "s0f6tno6gi0n4j8n",
1550 "isMaxThreadingDepth": false,
1551 "creator": {
1552 "name": "SPage (WMF)",
1553 "wiki": "mediawikiwiki",
1554 "gender": "unknown",
1555 "links": {
1556 "contribs": {
1557 "url": "/wiki/Special:Contributions/SPage_(WMF)",
1558 "title": "Contributions/SPage (WMF)",
1559 "exists": true
1560 },
1561 "userpage": {
1562 "url": "/wiki/User:SPage_(WMF)",
1563 "title": "SPage (WMF)",
1564 "exists": true
1565 },
1566 "talk": {
1567 "url": "/wiki/User_talk:SPage_(WMF)",
1568 "title": "User talk:SPage (WMF)",
1569 "exists": true
1570 }
1571 },
1572 "id": 619583
1573 },
1574 "replies": []
1575 },
1576 "ry62pq3wca9m47h2": {
1577 "workflowId": "ry62pq3us5tys0ra",
1578 "revisionId": "ry62pq3wca9m47h2",
1579 "timestamp": "20140709103253",
1580 "changeType": "new-post",
1581 "dateFormats": [],
1582 "properties": {
1583 "topic-of-post": {
1584 "plaintext": "Siberian Tiger"
1585 }
1586 },
1587 "isOriginalContent": true,
1588 "isModerated": false,
1589 "links": {
1590 "topic-history": {
1591 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=history",
1592 "title": "History"
1593 },
1594 "topic": {
1595 "url": "/wiki/Topic:Ry62pq3us5tys0ra",
1596 "title": "topic"
1597 },
1598 "post": {
1599 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&topic_showPostId=ry62pq3us5tys0ra#flow-post-ry62pq3us5tys0ra",
1600 "title": "post"
1601 },
1602 "topic-revision": {
1603 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&topic_revId=ry62pq3wca9m47h2&action=single-view",
1604 "title": "topic revision"
1605 },
1606 "watch-topic": {
1607 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=watch",
1608 "title": "Watch"
1609 },
1610 "unwatch-topic": {
1611 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=unwatch",
1612 "title": "Unwatch"
1613 }
1614 },
1615 "actions": {
1616 "reply": {
1617 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=reply&topic_postId=ry62pq3us5tys0ra#flow-reply-ry62pq3us5tys0ra",
1618 "title": "Reply"
1619 },
1620 "edit": {
1621 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=edit-title&topic_revId=ry62pq3wca9m47h2",
1622 "title": "Edit title"
1623 },
1624 "hide": {
1625 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=moderate-topic&topic_moderationState=hide",
1626 "title": "Hide topic"
1627 },
1628 "summarize": {
1629 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=edit-topic-summary",
1630 "title": "Summarize"
1631 }
1632 },
1633 "size": {
1634 "old": 0,
1635 "new": 14
1636 },
1637 "author": {
1638 "name": "DannyH (WMF)",
1639 "wiki": "mediawikiwiki",
1640 "gender": "male",
1641 "links": {
1642 "contribs": {
1643 "url": "/wiki/Special:Contributions/DannyH_(WMF)",
1644 "title": "Contributions/DannyH (WMF)",
1645 "exists": true
1646 },
1647 "userpage": {
1648 "url": "/wiki/User:DannyH_(WMF)",
1649 "title": "DannyH (WMF)",
1650 "exists": true
1651 },
1652 "talk": {
1653 "url": "/wiki/User_talk:DannyH_(WMF)",
1654 "title": "User talk:DannyH (WMF)",
1655 "exists": true
1656 }
1657 },
1658 "id": 1480243
1659 },
1660 "lastEditUser": {
1661 "name": null,
1662 "wiki": null,
1663 "gender": "unknown",
1664 "links": [],
1665 "id": null
1666 },
1667 "lastEditId": null,
1668 "previousRevisionId": null,
1669 "content": {
1670 "content": "Siberian Tiger",
1671 "format": "plaintext"
1672 },
1673 "watchable": false,
1674 "replyToId": null,
1675 "postId": "ry62pq3us5tys0ra",
1676 "isMaxThreadingDepth": false,
1677 "creator": {
1678 "name": "DannyH (WMF)",
1679 "wiki": "mediawikiwiki",
1680 "gender": "male",
1681 "links": {
1682 "contribs": {
1683 "url": "/wiki/Special:Contributions/DannyH_(WMF)",
1684 "title": "Contributions/DannyH (WMF)",
1685 "exists": true
1686 },
1687 "userpage": {
1688 "url": "/wiki/User:DannyH_(WMF)",
1689 "title": "DannyH (WMF)",
1690 "exists": true
1691 },
1692 "talk": {
1693 "url": "/wiki/User_talk:DannyH_(WMF)",
1694 "title": "User talk:DannyH (WMF)",
1695 "exists": true
1696 }
1697 },
1698 "id": 1480243
1699 },
1700 "replies": [
1701 "ry62pq3zgj4wskwm"
1702 ],
1703 "reply_count": 1,
1704 "last_updated_readable": "10:32, 9 July 2014",
1705 "last_updated": 1404901973000
1706 },
1707 "ry62pq3zgj4wskwm": {
1708 "workflowId": "ry62pq3us5tys0ra",
1709 "revisionId": "ry62pq3zgj4wskwm",
1710 "timestamp": "20140709103253",
1711 "changeType": "reply",
1712 "dateFormats": [],
1713 "properties": [],
1714 "isOriginalContent": true,
1715 "isModerated": false,
1716 "links": {
1717 "topic-history": {
1718 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=history",
1719 "title": "History"
1720 },
1721 "topic": {
1722 "url": "/wiki/Topic:Ry62pq3us5tys0ra",
1723 "title": "topic"
1724 },
1725 "post": {
1726 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&topic_showPostId=ry62pq3zgj4wskwm#flow-post-ry62pq3zgj4wskwm",
1727 "title": "post"
1728 },
1729 "post-revision": {
1730 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&topic_postId=ry62pq3zgj4wskwm&topic_revId=ry62pq3zgj4wskwm&action=single-view",
1731 "title": "post revision"
1732 },
1733 "watch-topic": {
1734 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=watch",
1735 "title": "Watch"
1736 },
1737 "unwatch-topic": {
1738 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=unwatch",
1739 "title": "Unwatch"
1740 }
1741 },
1742 "actions": {
1743 "reply": {
1744 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=reply&topic_postId=ry62pq3zgj4wskwm#flow-post-ry62pq3zgj4wskwm",
1745 "title": "Reply"
1746 },
1747 "hide": {
1748 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=moderate-post&topic_postId=ry62pq3zgj4wskwm&topic_moderationState=hide",
1749 "title": "Hide"
1750 },
1751 "summarize": {
1752 "url": "/w/index.php?title=Topic:Ry62pq3us5tys0ra&action=edit-topic-summary",
1753 "title": "Summarize"
1754 }
1755 },
1756 "size": {
1757 "old": 0,
1758 "new": 418
1759 },
1760 "author": {
1761 "name": "DannyH (WMF)",
1762 "wiki": "mediawikiwiki",
1763 "gender": "male",
1764 "links": {
1765 "contribs": {
1766 "url": "/wiki/Special:Contributions/DannyH_(WMF)",
1767 "title": "Contributions/DannyH (WMF)",
1768 "exists": true
1769 },
1770 "userpage": {
1771 "url": "/wiki/User:DannyH_(WMF)",
1772 "title": "DannyH (WMF)",
1773 "exists": true
1774 },
1775 "talk": {
1776 "url": "/wiki/User_talk:DannyH_(WMF)",
1777 "title": "User talk:DannyH (WMF)",
1778 "exists": true
1779 }
1780 },
1781 "id": 1480243
1782 },
1783 "lastEditUser": {
1784 "name": null,
1785 "wiki": null,
1786 "gender": "unknown",
1787 "links": [],
1788 "id": null
1789 },
1790 "lastEditId": null,
1791 "previousRevisionId": null,
1792 "content": {
1793 "content": "<p data-parsoid='{\"dsr\":[0,376,0,0]}'>I appreciate your contributions on our Siberian tiger article. However, your edits removed some properly sourced original content relevant to the article and your new edits also focus more on bears with greater details while omitting the details on tigers in the original version, which is not appropriate since undue weight given to bears and this constitutes biased content.</p>",
1794 "format": "html"
1795 },
1796 "watchable": false,
1797 "replyToId": "ry62pq3us5tys0ra",
1798 "postId": "ry62pq3zgj4wskwm",
1799 "isMaxThreadingDepth": false,
1800 "creator": {
1801 "name": "DannyH (WMF)",
1802 "wiki": "mediawikiwiki",
1803 "gender": "male",
1804 "links": {
1805 "contribs": {
1806 "url": "/wiki/Special:Contributions/DannyH_(WMF)",
1807 "title": "Contributions/DannyH (WMF)",
1808 "exists": true
1809 },
1810 "userpage": {
1811 "url": "/wiki/User:DannyH_(WMF)",
1812 "title": "DannyH (WMF)",
1813 "exists": true
1814 },
1815 "talk": {
1816 "url": "/wiki/User_talk:DannyH_(WMF)",
1817 "title": "User talk:DannyH (WMF)",
1818 "exists": true
1819 }
1820 },
1821 "id": 1480243
1822 },
1823 "replies": []
1824 }
1825 },
1826 "title": "Talk:Flow QA",
1827 "actions": {
1828 "newtopic": {
1829 "url": "/w/index.php?title=Talk:Flow_QA&action=new-topic",
1830 "title": "Start a new topic"
1831 }
1832 },
1833 "type": "topiclist",
1834 "links": {
1835 "pagination": {
1836 "rev": {
1837 "url": "/w/index.php?title=Talk:Flow_QA&topiclist_offset-dir=rev&topiclist_limit=10&topiclist_offset-id=ry51fussyfpos7k9",
1838 "title": "rev"
1839 },
1840 "fwd": {
1841 "url": "/w/index.php?title=Talk:Flow_QA&topiclist_offset-dir=fwd&topiclist_limit=10&topiclist_offset-id=rqgvx99tpd5njsdj",
1842 "title": "fwd"
1843 }
1844 },
1845 "board-sort": {
1846 "updated": "/w/index.php?title=Talk:Flow_QA&topiclist_sortby=updated&topiclist_savesortby=",
1847 "newest": "/w/index.php?title=Talk:Flow_QA&topiclist_sortby=newest&topiclist_savesortby="
1848 },
1849 "newtopic": "/w/index.php?title=Talk:Flow_QA&action=new-topic"
1850 }
1851 }
1852 },
1853 "status": "ok"
1854 }
1855 }
1856}

You can see that the following topics are duplicated in the roots array (the whole segment appears twice):

"ry51fussyfpos7k9",
"ry4n6b5cpy6y9o4h",
"rs9l9vau450s2nvr",
"rqgvx99tpd5njsdj"

Related Objects

Event Timeline

Mattflaschen-WMF raised the priority of this task from to High.
Mattflaschen-WMF updated the task description. (Show Details)
Mattflaschen-WMF changed Security from none to None.
Mattflaschen-WMF added a subscriber: EBernhardson.

I have a theory about why this happens, essentially TopKIndex::replaceInIndex() is doing:

if ( $value === false ) {
    return false;
}
$idx = array_search( $row, $value );
if ( $idx === false ) {
    return false;
}
unset( $value[$idx] );
return $value;

in a memcache CAS operation. The $row that we are searching for includes the sorting data, we could be a little smarter and look for a row with just matching primary key since the sort data could in theory have changed in various race conditions.

Change 179178 had a related patch set uploaded (by EBernhardson):
Bug: Incorrectly handling reverse pagination

https://gerrit.wikimedia.org/r/179178

Patch-For-Review

Change 179178 merged by jenkins-bot:
Bug: Incorrectly handling reverse pagination

https://gerrit.wikimedia.org/r/179178