Faits :
A.
B._ SA en qualité de bailleresse et A._ SA (à l'époque U._ Sàrl) en qualité de locataire ont conclu un contrat de bail à loyer portant sur un local commercial à Lausanne. Dès 2012, le loyer mensuel était de 2'260 fr. 40, acompte de charges compris.
Par lettre du 26 février 2013, la bailleresse a envoyé à la locataire une proposition de convention en vue du paiement d'un arriéré de loyer de 3'842 fr. 55 et lui a demandé de retourner les exemplaires de la convention dûment signés. Aux termes de celle-ci, la locataire devait s'engager à rembourser l'arriéré par six versements mensuels dont le premier était dû le 12 mars 2013; en cas de retard dans le payement d'une tranche, l'entier du solde devenait immédiatement exigible. La locataire n'a pas retourné la convention, malgré un rappel de la bailleresse le 18 mars 2013.
Par courrier recommandé du 16 avril 2013 notifié le 19 avril 2013, la bailleresse a mis la locataire en demeure de s'acquitter dans les trente jours du montant de 6'781 fr. 20 correspondant aux loyers des mois de février, mars et avril 2013, faute de quoi le contrat de bail serait résilié moyennant un délai de trente jours pour la fin d'un mois. Par formule officielle datée du 27 mai 2013 et notifiée à la locataire le 29 mai 2013, la bailleresse a résilié le contrat de bail pour le 30 juin 2013.
B.
B.a. Le 2 juillet 2013, la bailleresse a saisi le Juge de paix du district de Lausanne d'une requête à fin d'expulsion. Cette autorité a entendu les parties le 7 novembre 2013. Par ordonnance du même jour rendue en application de la procédure pour les cas clairs (<ref-law>), elle a ordonné à la locataire de quitter et libérer l'objet loué, au motif que cette dernière n'avait pas démontré avoir payé l'entier de l'arriéré de loyer (<ref-law>).
B.b. La locataire a déféré cette décision à la Cour d'appel civile du Tribunal cantonal. Par arrêt du 4 février 2014, celle-ci a rejeté l'appel et confirmé l'ordonnance d'expulsion.
La Cour d'appel a retenu les faits suivants: La mise en demeure portait sur les loyers de février, mars et avril 2013 pour un montant total de 6'781 fr. 20; le loyer de février a été versé le 23 avril 2013 et celui de mars le 6 mai 2013, soit pendant le délai comminatoire de trente jours notifié le 19 avril 2013; en revanche, le loyer d'avril, par 2'260 fr. 40, a été versé le 8 juillet 2013, soit après l'échéance du délai comminatoire; la locataire a certes une créance de 678 fr. 25 au titre de ristourne sur les frais de chauffage perçus pour l'année 2009, mais elle n'a pas déclaré invoquer la compensation avant l'échéance du délai comminatoire; quant à des créances en remboursement des frais de chauffage perçus pour les années 2010 à 2012, la locataire n'en a rendu vraisemblable ni le principe, ni la quotité, et n'a pas invoqué la compensation.
Sur la base de ces faits, la Cour d'appel a jugé qu'il restait un solde impayé à l'échéance du délai comminatoire; que ce solde, même si l'on tenait compte de la créance en remboursement des frais de chauffage pour 2009, s'élevait à 1'582 fr. 15 (2'260.40 - 678.25) et n'était pas un montant insignifiant qui rendrait le congé abusif; qu'enfin, la locataire ne pouvait pas se prévaloir de la convention proposée le 26 février 2013 dès lors qu'elle ne l'avait pas signée; que de toute façon, même si cette convention était applicable, il faudrait constater que l'entier de l'arriéré est devenu immédiatement exigible le 12 mars 2013, le délai pour le versement de la première tranche n'ayant pas été respecté.
C.
La locataire a interjeté un recours en matière civile, concluant à ce que la procédure du cas clair soit déclarée irrecevable et à ce que l'effet suspensif soit accordé au recours. La bailleresse, pour sa part, a conclu au rejet du recours. Par ordonnance du 8 avril 2014, la présidente de la cour de céans a accordé l'effet suspensif requis.

Considérant en droit :
1.
La locataire se plaint de ce que la bailleresse n'a pas établi les décomptes de chauffage pour les années 2010 à 2012. Or, il est incontesté que la locataire n'a pas invoqué la compensation avec des créances en remboursement certes indéterminées, mais le cas échéant déterminables (cf. <ref-law>; VIKTOR AEPLI, Commentaire zurichois, 3 e éd. 1991, n os 92 et 145 ad <ref-law>; Nicolas Jeandin, in Commentaire romand, 2 e éd. 2012, n° 18 s. ad <ref-law>), avant l'échéance du délai comminatoire (cf. <ref-law>; <ref-ruling> consid. 6b). Une éventuelle omission de la bailleresse est donc sans pertinence pour la question à juger, soit celle de savoir si la locataire a éteint sa dette à temps.
2.
La locataire soutient que le montant impayé de 1'582 fr. est insignifiant, et la résiliation du bail contraire aux règles de la bonne foi; elle se prévaut en outre de la convention qu'elle n'a pas signée. Elle reprend ainsi les arguments présentés en appel, qui sont infondés. Il peut être renvoyé aux considérants pertinents de la Cour d'appel (<ref-law>).
3.
La locataire succombe. Elle supporte les frais et dépens de la présente procédure (art. 66 et 68 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
Les frais judiciaires, arrêtés à 2'000 fr., sont mis à la charge de la recourante.
3.
La recourante versera à l'intimée une indemnité de 2'500 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux parties et à la Cour d'appel civile du Tribunal cantonal du canton de Vaud.
Lausanne, le 3 juillet 2014
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : La Greffière :
Klett Monti