Faits :
A.
A.a. B._ est locataire depuis décembre 2001 d'un appartement de 4,5 pièces dans un immeuble appartenant à A._ (ci-après: la bailleresse) situé... à Genève. Le bail est renouvelable tacitement d'année en année, sauf résiliation signifiée trois mois avant l'échéance du 31 décembre. Le loyer annuel est de 16'800 fr., plus 1'800 fr. de charges.
Plusieurs locataires de l'immeuble, dont B._ et X._ (cf. arrêt 4A_476/2016), ont fondé une association dont le but est de défendre les intérêts des habitants de l'immeuble.
A.b. En septembre 2012, les deux prénommées et trois autres membres de l'association ont demandé l'installation de doubles vitrages dans leurs appartements, en relevant qu'ils étaient les seuls de l'immeuble à ne pas en avoir.
La bailleresse a répondu le 7 mars 2013 qu'elle pouvait légalement s'exécuter jusqu'au 31 décembre 2016, qu'en l'état elle ne disposait pas du financement nécessaire mais qu'elle essaierait d'effectuer ces travaux avant la fin de l'été 2014. Relancée au cours de l'été 2014, elle a fait valoir que les travaux avaient dû être reportés et que la situation était conforme à la loi.
A.c. En février 2013, les mêmes membres de l'association ont exigé le retrait immédiat des caméras de surveillance installées à tous les étages de l'immeuble. La bailleresse leur ayant opposé une fin de non-recevoir, ils ont déposé une requête en conciliation le 14 juin 2013 ainsi qu'une plainte pénale.
Ces procédures ont été retirées après que la bailleresse eut fait débrancher en novembre 2013 la caméra installée au cinquième étage.
A.d. Par avis officiel du 30 septembre 2014, la bailleresse a résilié le bail de la locataire pour le 31 décembre 2014, au motif de la rupture totale du lien de confiance les unissant pour des raisons qui seraient exposées en procédure.
B.
B.a. La locataire a saisi l'autorité de conciliation le 30 octobre 2014, puis porté l'action le 26 janvier 2015 devant le Tribunal des baux et loyers du canton de Genève. Elle concluait à l'annulation du congé, subsidiairement à une prolongation de bail de quatre ans échéant le 31 décembre 2018.
A l'appui de sa réponse, la bailleresse a allégué les faits suivants: un article paru le... 2012 dans... [journal] l'avait présentée... comme une spéculatrice n'hésitant pas à congédier d'anciens locataires pour obtenir de substantielles augmentations de loyer, ce qui lui avait créé beaucoup de tort. Elle avait intenté une action en protection de la personnalité contre le journaliste auteur de l'article, le rédacteur en chef du journal et l'éditeur. L'action avait été admise en première instance, puis par la Cour de justice. La locataire avait joué un rôle actif non seulement dans la publication de l'article de presse, mais aussi dans la défense des trois parties actionnées par la bailleresse. Dans la procédure d'appel, celles-ci avaient produit d'une part un courriel du 23 mars 2014, dans lequel la locataire informait le journaliste que l'association des locataires avait décidé de lui communiquer les documents demandés, d'autre part un procès-verbal relatif à la fondation de l'association des locataires, dans lequel tous les noms avaient été caviardés à l'exclusion de celui de la locataire; ceci démontrait le rôle particulier qu'elle avait joué.
A l'audience du 27 mai 2015, la bailleresse a confirmé le motif du congé, en expliquant que la rupture du lien de confiance n'avait rien à voir avec l'appartenance de la locataire à l'association. La locataire l'avait touchée à titre personnel en raison de l'intérêt qu'elle avait manifesté pour le..., ce qui l'avait conduite à lui offrir un livre sur ce sujet. La bailleresse avait été très choquée de constater que la locataire avait été la source du journaliste.
Pour sa part, la locataire a contesté l'existence de relations personnelles avec la bailleresse, affirmant que c'était par simple courtoisie qu'elle l'avait écoutée parler de... et avait accepté un livre alors que le sujet ne l'intéressait pas personnellement. Elle a ajouté que le journaliste disposait d'une personne de contact autre qu'elle au sein de l'immeuble; il pouvait s'agir d'un de ses collègues journalistes puisqu'il y en avait trois dans le bâtiment.
B.b. Statuant par jugement du 26 octobre 2015, le Tribunal des baux et loyers a considéré en substance que les motifs invoqués à l'appui du congé n'étaient pas prouvés, qu'ils n'étaient qu'un prétexte et que le congé contrevenait ainsi aux règles de la bonne foi (art. 271 al. 1 CO). Par conséquent, le Tribunal a annulé le congé et débouté les parties de toutes autres conclusions.
B.c. La bailleresse a déféré cette décision à la Cour de justice genevoise, qui l'a confirmée par arrêt du 24 juin 2016.
Selon la Cour, il n'était pas prouvé que la locataire aurait aidé le journaliste dans le cadre de la publication du... 2012; le courriel qu'elle lui avait adressé était en effet postérieur de quelque deux ans. Quant à la prétendue aide apportée dans la procédure judiciaire dirigée notamment contre le journaliste, ce n'était pas la locataire personnellement, mais l'association qui avait décidé de lui adresser le courriel du 23 mars 2014; la bailleresse elle-même ne soutenait pas qu'une des pièces annexées à ce courriel aurait aidé le journaliste dans la procédure. La locataire avait par ailleurs établi que le procès-verbal caviardé ne figurait pas parmi ces annexes. Le journaliste avait au sein de l'immeuble une personne de contact non identifiée, mais qui n'était pas la locataire; la Cour relevait toutefois que trois journalistes habitaient l'immeuble. Enfin, la bailleresse n'avait pas établi avoir noué une relation de confiance particulière avec la locataire en lien avec le prêt d'un livre sur le.... Les premiers juges étaient dès lors fondés à conclure que le motif de congé invoqué (rupture du lien de confiance) n'était qu'un prétexte et que le congé contrevenait aux règles de la bonne foi.
C.
La bailleresse saisit le Tribunal fédéral d'un recours en matière civile concluant à ce que le congé donné pour le 31 décembre 2014 soit déclaré valable, toutes autres conclusions de la locataire étant rejetées.
La locataire intimée conclut au rejet du recours, subsidiairement au renvoi de la cause à l'autorité précédente et plus subsidiairement, à l'octroi d'une prolongation de bail de quatre ans échéant le 31 décembre 2018.
L'autorité précédente se réfère à son arrêt.

Considérant en droit :
1.
Le présent recours satisfait sur le principe aux conditions de recevabilité du recours en matière civile, notamment quant à l'exigence d'une valeur litigieuse minimale de 15'000 fr. (art. 74 al. 1 let. a LTF; cf. <ref-ruling> consid. 1.1) et quant au respect du délai (art. 100 al. 1 LTF en lien avec l'art. 46 al. 1 let. b LTF).
2.
2.1. La bailleresse dénonce une violation des art. 271 CO et art. 26 Cst. Elle critique en outre l'état de fait qu'elle entend faire compléter.
2.2.
2.2.1. Chaque partie est en principe libre de résilier un bail de durée indéterminée pour la prochaine échéance contractuelle ou légale (cf. art. 266a CO). Toutefois, la résiliation des baux d'habitations ou de locaux commerciaux est annulable lorsqu'elle contrevient aux règles de la bonne foi (art. 271 al. 1 CO et art. 271a CO).
De manière générale, une résiliation contrevient aux règles de la bonne foi lorsqu'elle ne répond à aucun intérêt objectif, sérieux et digne de protection et qu'elle apparaît ainsi purement chicanière, ou qu'elle consacre une disproportion crasse entre l'intérêt du preneur au maintien du contrat et l'intérêt du bailleur à y mettre fin (<ref-ruling> consid. 3.2.1 p. 92; <ref-ruling> consid. 4.1 p. 497). L'exercice d'un droit sans ménagement ou une attitude contradictoire du bailleur peuvent aussi entraîner l'annulation du congé (<ref-ruling> consid. 3a p. 108; arrêt 4A_293/2016 du 13 décembre 2016 consid. 5.2.2). La partie qui veut faire annuler le congé doit prouver les circonstances permettant de déduire qu'il contrevient aux règles de la bonne foi (arrêt 4A_547/2015 du 14 avril 2016 consid. 2.1.1). L'auteur du congé doit toutefois collaborer à la manifestation de la vérité en indiquant le motif du congé (art. 271 al. 2 CO); en cas de contestation, il doit fournir tous les documents nécessaires pour établir ledit motif. Une motivation lacunaire ou fausse peut être l'indice que le congé ne poursuit aucun intérêt digne de protection. Aussi le caractère abusif est-il retenu lorsque le motif invoqué n'est qu'un prétexte tandis que le véritable motif n'est pas constatable (<ref-ruling> consid. 2.1 p. 62 et les arrêts cités; arrêts 4A_198/2016 du 7 octobre 2016 consid. 4.4.1 et 4A_269/2015 du 2 novembre 2015 consid. 3.1).
Déterminer les motifs du congé est une question de fait. Savoir si le congé contrevient aux règles de la bonne foi relève du droit (<ref-ruling> consid. 2 p. 192 in fine; arrêt 4A_705/2014 du 8 mai 2015 consid. 4.2).
2.2.2. Le Tribunal fédéral ne peut rectifier ou compléter les constatations de fait opérées par l'autorité précédente que si elles sont manifestement inexactes ou découlent d'une violation du droit au sens de l'art. 95 LTF (art. 105 al. 2 LTF). "Manifestement inexactes" signifie ici "arbitraires" (<ref-ruling> consid. 2 p. 117; <ref-ruling> consid. 1.5).
La critique de l'état de fait retenu est soumise au principe strict de l'invocation énoncé par l'art. 106 al. 2 LTF (<ref-ruling> consid. 2.3 p. 266 et les références). La partie qui entend attaquer les faits constatés par l'autorité précédente doit expliquer clairement et de manière circonstanciée en quoi ces conditions seraient réalisées (<ref-ruling> consid. 1.3.1 p. 18 et les références). Si elle souhaite obtenir un complètement de l'état de fait, elle doit aussi démontrer, par des renvois précis aux pièces du dossier, qu'elle a présenté aux autorités précédentes, en conformité avec les règles de la procédure, les faits juridiquement pertinents à cet égard et les moyens de preuve adéquats (<ref-ruling> consid. 2 p. 90). Si la critique ne satisfait pas à ces exigences, les allégations relatives à un état de fait qui s'écarterait de celui de la décision attaquée ne pourront pas être prises en considération (<ref-ruling> consid. 1.3.1 p. 18).
L'appréciation des preuves est arbitraire lorsque le juge s'est manifestement mépris sur le sens et la portée d'un moyen de preuve, lorsqu'il a omis, sans raison sérieuse, de tenir compte d'un moyen propre à modifier la décision attaquée, ou encore lorsqu'il a tiré des déductions insoutenables à partir des éléments recueillis. L'arbitraire ne résulte pas du seul fait qu'une autre solution serait concevable, voire même préférable (<ref-ruling> consid. 4.2).
2.3.
2.3.1. Selon l'arrêt attaqué, le motif de congé invoqué par la bailleresse est une rupture du lien de confiance l'unissant à la locataire, provoquée par le rôle actif que cette dernière a joué non seulement dans la publication d'un article de presse attentatoire à sa personnalité, mais aussi dans la défense des responsables de cette atteinte dans le cadre de la procédure judiciaire qui s'en est suivie.
La bailleresse ne formule aucun grief recevable contre cette constatation relative au motif invoqué. Il faut dès lors s'y tenir (art. 105 al. 1 LTF).
2.3.2. Selon la Cour de justice, il n'est pas établi que la locataire ait apporté de l'aide au journaliste dans la publication même de l'article de presse en... 2012; le courriel qu'elle a envoyé à l'intéressé est en effet postérieur d'environ deux ans.
La bailleresse objecte que ledit courriel révèle l'existence de contacts antérieurs entre le journaliste et l'association; l'état de fait devrait être complété quant au contenu de ce courriel.
Indépendamment du fait que la bailleresse n'indique pas quel allégué de sa procédure se rapporterait au contenu de ce courriel (<ref-ruling> consid. 2 p. 90 cité supra consid. 2.2.2), le complètement de l'état de fait ne changerait rien à l'appréciation portée par la Cour de justice. La locataire, s'exprimant au nom de l'association de défense des locataires, affirmait ce qui suit dans la missive du 23 mars 2014:
(...) 'Nous avons pris connaissance de la décision de justice dans l'affaire qui vous oppose à Mme A._. Nous avons été très surpris de cette décision et avons donc décidé, cette fois, de vous transmettre les documents que vous nous aviez demandés à l'époque.'
Vous les trouverez en pièce jointe. (...) »
Un tel document prouve tout au plus que le journaliste et l'association avaient déjà eu des contacts antérieurs avant le jugement de première instance et que l'association avait à l'époque refusé de produire des documents. Il n'établit pas pour autant une participation active de la locataire dans la publication de l'article du... 2012.
2.3.3. La Cour de justice a renoncé à retenir que la locataire aurait apporté une aide active au journaliste dans la procédure d'appel l'opposant à la bailleresse. Il s'avère simplement que la locataire, agissant pour le compte de l'association, a envoyé le courriel précité assorti d'annexes dont on ignore le contenu, et dont la bailleresse elle-même admet qu'elles n'étaient pas déterminantes. Subsiste le fait que les trois défendeurs ont produit en procédure le procès-verbal relatif à la constitution de l'association de locataires, qui était expurgé de tout nom à l'exception de celui de la locataire. A cet égard, la Cour de justice a constaté que la locataire avait démontré ne pas avoir transmis ledit procès-verbal et que l'on ignorait pour quelle raison tous les noms avaient été caviardés sauf le sien. La bailleresse ne démontre pas où résiderait l'arbitraire dans ces constatations, ce qui suffit à clore toute discussion. Quoi qu'il en soit, le simple fait de ne pas avoir caviardé le nom de la locataire dans un procès-verbal concernant la fondation de l'association n'est pas de nature à établir un rôle actif dans la publication d'un article de presse puis dans la procédure judiciaire.
La bailleresse reproche encore aux juges genevois d'avoir arbitrairement retenu que le journaliste avait une autre source dans l'immeuble, sur la base des seules déclarations de la locataire. On ne discerne pas en quoi une telle appréciation serait insoutenable, alors que la bailleresse elle-même ne conteste pas la présence de trois journalistes dans son immeuble. Au demeurant, l'existence d'une autre source dans l'immeuble ne revêt pas une importance particulière, du moment qu'on ignore le contenu des annexes transmises au journaliste et qu'aucune aide active de la locataire n'a pu être établie.
2.3.4. La Cour de justice a enfin considéré que la bailleresse n'avait pas établi avoir noué une relation de confiance particulière avec l'intimée en lien avec le prêt d'un livre sur le....
La bailleresse fait valoir qu'elle n'a jamais prétendu avoir été proche de la locataire. Il n'en demeure pas moins qu'elle a invoqué une rupture totale du lien de confiance qui l'unissait à la locataire; un tel lien va au-delà du rapport contractuel entre bailleur et locataire.
2.3.5. En bref, l'état de fait retenu par la cour cantonale échappe à la critique. Pour le surplus, il n'y a pas à tenir compte de la version des faits présentée par la bailleresse en tant qu'elle diverge de celle retenue dans l'arrêt attaqué (supra, consid. 2.2.2).
2.4. En droit, la bailleresse semble soutenir que le simple fait d'avoir transmis, en tant que membre de l'association de défense de locataires, des documents dont l'association pensait subjectivement qu'ils pourraient aider le journaliste dans la procédure d'appel justifierait de mettre un terme au bail pour la prochaine échéance. Il n'en est rien.
Dans la mesure où elle constatait sans arbitraire que les motifs invoqués à l'appui du congé n'étaient pas prouvés et n'étaient qu'un prétexte, la cour cantonale pouvait en déduire sans violer l'art. 271 al. 1 CO que le congé contrevenait aux règles de la bonne foi. A cet égard, la bailleresse méconnaît la jurisprudence (supra consid. 2.2.1) lorsqu'elle reproche aux juges cantonaux d'avoir tiré une telle conclusion sans que le motif réel de la résiliation ou des indices de celui-ci soient établis. Les éléments réunis suffisent à retenir un congé contraire à la bonne foi, sans qu'il soit nécessaire de déterminer la motivation précise de la bailleresse.
Le grief tiré de l'art. 271 al. 1 CO doit ainsi être rejeté.
2.5. Il en est de même du moyen ayant trait à la garantie de la propriété, consacrée à l'art. 26 al. 1 Cst. La cour de céans a déjà eu l'occasion d'exposer que l'art. 271 CO repose sur une base légale de même rang (art. 109 al. 1 Cst.) que cette garantie et qu'en cas de contestation du congé, il s'agit uniquement d'apprécier si l'art. 271 al. 1 CO a été ou non correctement appliqué (arrêt 4A_623/2010 du 2 février 2011 consid. 2.1).
3.
En définitive, le recours doit être rejeté. La bailleresse, qui succombe, supportera les frais de la présente procédure et versera une indemnité de dépens à la locataire (art. 66 al. 1 et art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
Les frais judiciaires, arrêtés à 2'500 fr., sont mis à la charge de la recourante.
3.
La recourante versera à l'intimée une indemnité de 3'000 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux mandataires des parties et à la Chambre des baux et loyers de la Cour de justice du canton de Genève.
Lausanne, le 20 février 2017
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente: Kiss
La Greffière: Monti