Faits:
A.
La société anonyme B._ SA avait été mandatée pour fonctionner comme entrepreneur général dans une promotion immobilière dénommée P._, qui portait sur l'édification de seize logements d'habitation à... (VD).
L'entreprise générale s'est fait remettre un devis daté du 26 septembre 2011 établi par A._ Sàrl, société active dans la fabrication et la commercialisation de cuisines. Le devis portait sur un « projet type pour une cuisine». Il comportait trois plans et énonçait la liste des éléments mobiliers et électroménagers composant la cuisine projetée. Le prix était fixé à 20'000 fr. pour une cuisine, respectivement à 304'000 fr. pour seize cuisines après déduction d'un rabais de 5%.
L'entreprise générale a conclu avec plusieurs acquéreurs de lots des « contrats d'entreprise générale» en vertu desquels elle était chargée de planifier, diriger et exécuter les travaux de construction des lots moyennant un prix forfaitaire. Les clauses suivantes étaient notamment prévues:
«3 Prestations incluses et non incluses dans le forfait d'exécution Prestations incluses
[...]
7. La gestion des choix et finitions au gré du Maître de l'ouvrage (carrelages, sanitaires, revêtements de sols et murs, agencement de cuisine) sur la base des choix préparés par l'entrepreneur général.
[...]
8 Choix des matériaux
Pour le cas ou (sic!) des choix spéciaux entraîneraient des frais supplémentaires, ces derniers seront à la charge du maître de l'ouvrage. [...]
L'entrepreneur général remettra au Maître de l'Ouvrage, l'adresse des fournisseurs et artisans pour le choix des finitions (Liste en annexe).
Le choix d'autres fournisseurs n'est pas autorisé.
A titre exceptionnel, en cas de choix différents imposé par le Maître de l'Ouvrage, l'entrepreneur général se réserve le droit d'exclure du présent contrat, le montant et la garantie des travaux concernés. Dans ce cas, l'entrepreneur générale (sic!) ristournera ou mettra à profit du Maître de l'Ouvrage, le montant défini dans le prix de l'ouvrage, en déduisant 15% de celui-ci.
[...]
10.1 Attribution des travaux
L'entrepreneur général choisit seul les entreprises sous-traitantes qui réaliseront la construction et effectue les commandes de l'ensemble des fournitures. Les contrats seront établis en son nom.
[...]
10.4 Paiement des sous-traitants et hypothèque légale
L'entrepreneur général s'engage à utiliser le compte parallèle de construction uniquement pour l'exécution du contrat et pour payer ponctuellement les entreprises sous-traitantes.
[...]»
Une liste de fournisseurs annexée aux contrats mentionnait la maison A._ Sàrl sous la rubrique «Cuisine». Etait en outre joint le devis précité du 26 septembre 2011, indiquant un prix de 20'000 fr. pour une cuisine.
Au fur et à mesure de la vente des lots, l'entreprise générale envoyait les acquéreurs chez A._ Sàrl pour effectuer leur choix de cuisine. Il était convenu que cette société (ci-après: la sous-traitante) les conseille sur d'éventuelles modifications en matière de mobilier et/ou d'électroménager, élabore avec eux un projet final puis procède à la livraison et à la pose des cuisines. La sous-traitante devait remettre à l'entreprise générale les devis individuels des acquéreurs avec le détail des plus-values, à charge pour l'entreprise générale de faire ensuite procéder à la libération du montant correspondant à la plus-value en faveur de la sous-traitante.
Certains acheteurs ont d'emblée choisi d'autres fournisseurs que ceux proposés dans la liste annexée aux contrats d'entreprise.
La sous-traitante a reçu plusieurs acquéreurs dans ses locaux. Elle a eu plusieurs échanges de courriers et a établi pour la plupart des acquéreurs une ou plusieurs propositions de cuisine. Entre mai et octobre 2012, elle a transmis à sept acquéreurs (ou couple d'acquéreurs) un devis individualisé supérieur à 20'000 fr., dans une fourchette comprise entre 22'838 fr. et 50'835 fr.
Le 8 octobre 2012, l'entreprise générale a écrit à la sous-traitante qu'elle entendait cesser toute collaboration avec elle, en raison d'un manque de confiance des clients et de l'incertitude planant sur les délais.
Le 1 er novembre 2012, la sous-traitante a fait notifier à l'entreprise générale un commandement de payer la somme de 360'000 fr. pour cause de «rupture de contrat». La poursuivie a formé opposition.
B.
B.a. Les parties ayant convenu de renoncer à la conciliation, la sous-traitante a saisi la Chambre patrimoniale du canton de Vaud le 7 octobre 2013 d'une demande tendant à faire condamner l'entreprise générale au paiement de 229'749 fr. plus intérêts et à faire prononcer la mainlevée définitive de l'opposition au commandement de payer à concurrence du même montant. En dernier lieu, elle a réduit sa prétention à 220'321 fr. 85.
L'entreprise générale a conclu au rejet de la demande et, reconventionnellement, au constat de la nullité de la poursuite en cours, subsidiairement à son annulation.
Par jugement du 26 mai 2016, la Chambre patrimoniale a rejeté la demande et constaté que la poursuite était sans fondement. En substance, elle a jugé que la société B._ SA s'était liée à A._ Sàrl par un sous-contrat d'entreprise, également dénommé contrat de sous-traitance. Cette dernière s'était engagée à livrer et poser des cuisines dans les appartements des acquéreurs, tout en convenant que certains points particuliers seraient discutés et concrétisés avec chacun d'eux. Les parties s'étaient ainsi mises d'accord sur les grandes lignes de l'ouvrage à exécuter. Même si les parties n'avaient pas précisément arrêté le prix de l'ouvrage, elles avaient convenu du principe de la rémunération de A._ Sàrl, soit du versement, par l'entreprise générale, d'une plus-value sur les cuisines posées. Ce faisant, les parties avaient convenu des éléments objectivement essentiels du contrat d'entreprise, sous la forme d'un contrat de sous-traitance.
Selon l'analyse de la Chambre patrimoniale, le contrat de sous-traitance était grevé de deux conditions suspensives: les acquéreurs de lots devaient accepter de recourir aux services de la sous-traitante et devaient valider les devis personnalisés établis par cette dernière. Ces conditions ne s'étaient toutefois réalisées pour aucun des acheteurs.
La Chambre a ensuite examiné si l'entreprise générale avait empêché l'avènement de ces conditions au mépris des règles de la bonne foi, auquel cas lesdites conditions seraient réputées accomplies (<ref-law>). Elle a répondu par la négative, après avoir constaté que la rupture de collaboration semblait résulter d'une perte de confiance de l'entreprise générale envers la sous-traitante. Le contrat conditionnel était ainsi devenu caduc, les parties se retrouvant dans la même situation que si elles n'avaient jamais conclu d'acte conditionnel. Se posait la question d'une responsabilité pour culpa in contrahendo, fondement de dommages-intérêts négatifs. La Chambre a renoncé à y répondre, au motif que les postes de dommage invoqués par la sous-traitante ne constituaient pas des dommages négatifs susceptibles d'être réparés dans ce type de responsabilité.
B.b. La sous-traitante a déféré cette décision à la Cour d'appel civile du Tribunal cantonal vaudois, qui l'a confirmée par substitution de motifs le 14 novembre 2016.
La Cour d'appel a approuvé l'analyse des premiers juges quant à l'existence d'un contrat de sous-traitance assorti d'une double condition suspensive. En revanche, elle a jugé que l'entreprise générale avait empêché l'avènement des conditions au mépris des règles de la bonne foi. Cette partie avait mis fin à la relation contractuelle sans mise en demeure, avertissement préalable ou demande de garantie supplémentaire, pour des motifs qui n'étaient pas établis; sans cette résiliation, il était hautement vraisemblable que trois propriétaires auraient commandé leur cuisine auprès de la sous-traitante. Par son comportement, l'entreprise générale avait empêché les acquéreurs de lots de commander leur cuisine auprès de la sous-traitante.
La résiliation devait être traitée sous l'angle de l'<ref-law>. En vertu de cette disposition, le maître (en l'occurrence l'entreprise générale) devait rémunérer l'entrepreneur (la sous-traitante) pour la part d'ouvrage déjà exécutée, et indemniser la sous-traitante pour l'intérêt qu'elle avait à l'exécution complète de l'ouvrage (dommages-intérêts positifs). L'autorité d'appel a rappelé la jurisprudence selon laquelle la condition suspensive grevait non seulement l'action en exécution, mais aussi l'action en paiement de l'indemnité prévue par l'<ref-law>; le maître devait indemniser l'entrepreneur uniquement s'il fallait admettre que la condition se serait réalisée en cas de maintien du contrat (arrêt 4C.281/2005 du 15 décembre 2015 consid. 3.4).
Dans sa demande, la sous-traitante avait allégué un préjudice de 211'640 fr., aux allégués 99 et suivants. A titre de preuves, elle avait produit un certain nombre de pièces, en particulier le devis de base du 26 septembre 2011, des simulations de commande auprès de fournisseurs ainsi qu'un extrait de sa caisse de compensation, dont il ressortait qu'elle avait versé à son collaborateur T._ un salaire de base AVS de 22'000 fr. pour l'année 2012. Entendu sur cette question, l'intéressé avait estimé son implication dans le projet à 40% ou 50% de son temps de travail.
Pour les juges cantonaux, ces éléments de preuve ne permettaient pas d'établir les allégués relatifs au dommage. En outre, la sous-traitante s'était contentée de soumettre les allégués 105 à 118 (hormis les nos 113 et 115) à l'appréciation des juges saisis, alors qu'elle aurait dû offrir la preuve par expertise, s'agissant d'allégués consacrés au montant des dommages-intérêts positifs. Faute d'avoir requis une telle expertise, elle devait en supporter les conséquences (<ref-law>).
C.
La sous-traitante a saisi le Tribunal fédéral d'un recours en matière civile dans lequel elle requiert que l'entreprise générale soit condamnée à lui verser 220'321 fr. 85, intérêts en sus, et que l'opposition au commandement de payer soit définitivement levée à concurrence de ce montant. Elle a également sollicité l'octroi de l'effet suspensif, qui lui a été accordé par ordonnance présidentielle du 18 mai 2017.
L'entreprise générale intimée a conclu au rejet du recours en tant qu'il est recevable.
L'autorité précédente s'est référée à son arrêt.

Considérant en droit:
1.
Les conditions de recevabilité du recours en matière civile sont réalisées sur le principe, notamment sous l'angle de la valeur litigieuse minimale de 30'000 fr. (<ref-law>) et du délai pour recourir (<ref-law> en lien avec l'<ref-law>). Il est précisé à l'adresse de l'intimée que le recours a été déposé 30 jours après la distribution du pli recommandé contenant l'arrêt motivé, qui est intervenue dans le délai de garde (<ref-law>; arrêt 5A_721/2012 du 17 janvier 2013 consid. 1.1; JEAN-MAURICE FRÉSARD, in Commentaire de la LTF, 2 e éd. 2014, n os 11 et 15 ad <ref-law>).
2.
2.1. Le Tribunal fédéral applique le droit d'office (<ref-law>). Eu égard, toutefois, à l'exigence de motivation qu'impose l'<ref-law>, sous peine d'irrecevabilité (<ref-law>), le Tribunal fédéral n'examine d'ordinaire que les griefs invoqués, sauf en cas d'erreurs juridiques manifestes (<ref-ruling> consid. 2 p. 116). Pour le grief de violation des droits constitutionnels prévaut le principe de l'invocation, qui impose une motivation plus étayée (<ref-law>; <ref-ruling> consid. 2.2)
2.2. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>). Il ne peut rectifier ou compléter les constatations de l'autorité précédente que si elles découlent d'une violation du droit au sens de l'<ref-law> ou sont «manifestement inexactes» (<ref-law>), c'est-à-dire «arbitraires» (<ref-ruling> consid. 2 p. 117; <ref-ruling> consid. 1.5). La critique de l'état de fait retenu est soumise au principe précité de l'invocation (<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).
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 important 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).
3.
3.1. La recourante ne conteste pas avoir été liée à l'intimée par un contrat de sous-traitance assorti de conditions suspensives, dont l'intimée a empêché l'avènement au mépris des règles de la bonne foi. Elle reconnaît expressément l'applicabilité de l'<ref-law> et de la méthode dite positive. Il n'y a donc pas à revenir sur ces questions (cf. consid. 2.1 supra).
La recourante objecte cependant qu'en raison de divers paramètres hypothétiques, il lui était impossible d'apporter la preuve stricte du bénéfice brut qu'elle aurait pu réaliser si les acquéreurs de lots n'avaient pas été empêchés de finaliser leur projet de cuisine avec elle. Il eût fallu faire application de l'<ref-law> et estimer équitablement le gain qu'elle aurait pu réaliser, en se fondant sur les devis individualisés et sur le projet de cuisine type. Par ailleurs, les juges cantonaux auraient violé son droit à la preuve (<ref-law> et <ref-law>) et ignoré l'égalité de rang entre les différents moyens de preuve (<ref-law>) en écartant les titres produits sans les examiner, pour le motif erroné qu'ils étaient par nature inaptes à prouver le gain manqué, que seule une expertise pouvait établir. En réalité, l'expert ne serait pas mieux armé que le juge pour porter un pronostic sur un événement hypothétique tel que le gain manqué. Qui plus est, le tribunal était à même d'appliquer la règle d'expérience (<ref-law>) selon laquelle le bénéfice brut correspond au chiffre d'affaires moins les coûts. Sur le vu de ce qui précède et des pièces produites, la Cour d'appel vaudoise aurait pu et dû retenir un gain manqué de 198'221 fr.
Subsidiairement, la recourante dénonce une appréciation arbitraire des preuves assortie d'une violation du devoir de motivation. Les juges vaudois auraient d'une part considéré arbitrairement que les moyens de preuve n'établissaient pas son bénéfice brut. D'autre part, ils auraient retenu arbitrairement que trois acquéreurs seulement s'apprêtaient à signer un projet de cuisine, alors qu'en réalité ils étaient cinq.
3.2.
3.2.1. L'<ref-law> autorise le maître d'ouvrage à se départir du contrat d'entreprise tant que l'ouvrage n'est pas terminé, moyennant qu'il paie le travail fait et indemnise complètement l'entrepreneur.
Le maître a ainsi le droit de résilier de façon prématurée le contrat, qui prend fin ex nunc (<ref-ruling> consid. 7.3 p. 748). En contrepartie, il doit payer une rémunération pour la partie de l'ouvrage et/ou les prestations déjà exécutées, et «indemniser complètement» l'entrepreneur (arrêt 4A_566/2015 du 8 février 2016 consid. 4.1.1; PETER GAUCH, Der Werkvertrag, 5e éd. 2011, n° 535; TERCIER ET ALII, Les contrats spéciaux, 5e éd. 2016, n° 4160). Cette indemnisation correspond à des dommages-intérêts positifs, couvrant l'intérêt qu'avait l'entrepreneur à exécuter complètement le contrat; elle inclut donc le gain manqué (<ref-ruling> consid. 5 p. 196; arrêt précité 4A_566/2015 consid. 4.1.1; cf. aussi <ref-ruling> consid. 4b p. 277).
Deux méthodes entrent en considération pour calculer l'indemnisation de l'entrepreneur. La méthode de la déduction ( Abzugsmethode) consiste à soustraire du prix de l'ouvrage l'économie réalisée par l'entrepreneur du fait qu'il n'a pas terminé les travaux, et le gain qu'il s'est procuré ailleurs ou qu'il a délibérément renoncé à se procurer. Quant à la méthode positive ( Additionsmethode), elle implique de déterminer la totalité des dépenses effectives engagées par l'entrepreneur pour les travaux déjà exécutés et d'y ajouter le bénéfice brut pour l'ouvrage (hypothétiquement) achevé. Ce bénéfice est à déterminer sur la base du contrat, voire de tarifs, d'indices ou des comptes de l'entrepreneur (<ref-ruling> consid. 5 p. 196 et la réf. à GEORG GAUTSCHI, Berner Kommentar, 2e éd. 1967, n° 15 ad <ref-law>).
Le Code des obligations n'impose pas au juge d'ordonner une expertise pour la preuve de la rémunération et de l'indemnisation de l'entrepreneur. Une expertise peut toutefois s'imposer lorsque le juge n'est pas à même de résoudre, à la lumière de ses propres connaissances, la question qui lui est soumise. Tel est notamment le cas lorsqu'il s'agit de déterminer la valeur des travaux exécutés par rapport au prix forfaitaire convenu pour l'ensemble de l'ouvrage; seul un homme du métier est en mesure de dire quel pourcentage du prix forfaitaire doit être attaché à chaque phase des travaux (arrêt précité 4A_566/2015 consid. 4.1.3).
3.2.2. Le lésé doit en principe prouver le dommage de façon chiffrée (<ref-law>; arrêt 4A_397/2016 du 30 novembre 2016 consid. 5.1). Cependant, l'art. 42 alinéa 2 CO prévoit une preuve facilitée lorsque le demandeur se trouve dans un état de nécessité en matière de preuve (cf. arrêt 4A_431/2015 du 19 avril 2016 consid. 5.1.2 et arrêt précité 4A_397/2016 consid. 5.1) : ainsi, «lorsque le montant exact du dommage ne peut être établi, le juge le détermine équitablement en considération du cours ordinaire des choses et des mesures prises par la partie lésée».
3.2.3. L'autorité de céans a constaté que la détermination du gain manqué nécessite souvent l'appréciation du juge et pose généralement une question hypothétique à laquelle il faut répondre selon le cours ordinaire des choses, comme c'est le cas à l'<ref-law> (<ref-ruling> consid. I.3 p. 90; <ref-ruling> consid. b p. 201; arrêt 4C.309/1993 du 5 avril 1994 consid. 5a/bb). Dans un calcul effectué selon la méthode de la déduction, elle a recouru à l'<ref-law> pour un des postes de déduction (<ref-ruling> consid. 7a p. 198). Par ailleurs, dans une affaire où il s'agissait d'établir le nombre d'heures de travail qui auraient été nécessaires à l'exécution complète de l'ouvrage, il a été jugé conforme au droit fédéral d'appliquer le degré de preuve réduit à la vraisemblance prépondérante, s'agissant d'une hypothèse (arrêt 4C.288/2001 du 16 janvier 2002 consid. 4c).
3.3. Dans le cas qui nous occupe, les aspects hypothétiques portent sur le nombre de commandes que les propriétaires de lots auraient confiées à la sous-traitante sans la rupture de contrat, respectivement sur le montant de ces commandes et leur contenu (projet de base de 20'000 fr., ou cuisine d'un montant supérieur en fonction d'exigences particulières?). La cour cantonale a abordé partiellement cette question lorsqu'elle s'est prononcée sur l'application de l'<ref-law>; réduisant le degré de preuve requis, elle a jugé hautement vraisemblable que trois clients auraient commandé leur cuisine auprès de la sous-traitante.
Cela étant, la recourante s'est attachée à établir son gain manqué en se fondant sur le devis de base du 26 septembre 2011 (cf. let. A supra), lequel comportait des plans et détaillait la liste des éléments mobiliers et électroménagers composant la cuisine type proposée pour les appartements au prix de 20'000 fr. La recourante a allégué qu'elle devait supporter un coût total de 8'441 fr. 67 pour la fourniture du mobilier (2'528 fr. 62) et des appareils électroménagers (4'693 fr. 05), ainsi que pour la livraison et la pose de la cuisine (1'220 fr.; cf. all. 102-104). Sa marge bénéficiaire sur une cuisine type était dès lors de 11'558 fr. 33, soit 57,79% de 20'000 fr. (all. 105).
Eu égard au caractère détaillé et concret du devis de base, qui figure au dossier, rien n'indique que la recourante se soit trouvée dans un état de nécessité probatoire s'agissant d'établir ses coûts de revient, et partant sa marge pour la fourniture d'une cuisine type. On ne discerne dès lors pas de motifs qui justifieraient de faciliter la preuve.
La cour cantonale a jugé que les pièces produites par la sous-traitante ne permettaient pas d'établir ses coûts de revient, et partant sa marge bénéficiaire (57,79%). Cette conclusion, qui relève de l'appréciation des preuves, doit être dénoncée par un grief d'arbitraire motivé de façon circonstanciée (cf. consid. 2.2 supra). On peut s'interroger sur la recevabilité de l'argumentation présentée par la recourante, qui renvoie pour l'essentiel aux explications données à l'appui de son grief de violation de l'<ref-law>. Quoi qu'il en soit, cette question souffre de rester indécise dans la mesure où le grief d'arbitraire doit de toute façon être rejeté pour les raisons exposées ci-dessous.
La recourante a proposé d'établir par pièces les coûts devant être retranchés du chiffre d'affaires de 20'000 fr. Pour le mobilier équipant la cuisine type, elle a produit un document établi par un fournisseur (pièce 68) comportant la référence « P._ Projet de B» et une «date de confirmation» du 4 octobre 2013, suivi d'une liste de divers éléments de cuisine avec leur prix (armoires, plinthes, etc), pour un total de EUR 2'069.93 (soit CHF 2'528.62). Quant au coût des appareils électro-ménagers, elle a fourni un courriel de la maison M._ (pièce 70) intitulé «Antwort: conditions projet P._», dans lequel il est affirmé que «le rabais pour cet objet est de 40% sur les prix 2012 hors taxe». Enfin, la recourante a produit un devis d'une entreprise spécialisée dans le montage de cuisines (pièce 71), dont il ressort qu'un montant de 1'220 fr. hors taxes doit être prévu pour la pose et la livraison d'une cuisine selon le projet de base P._ du 26 septembre 2011.
Force est de constater, avec l'intimée, qu'il n'est pas possible d'établir une correspondance entre les pièces produites (spécialement les pièces 68 et 70) et le devis de base, respectivement qu'il n'était pas insoutenable de considérer que ces pièces ne permettaient pas d'établir la totalité des coûts à retrancher du chiffre d'affaires de 20'000 fr., ni par conséquent la marge de la sous-traitante pour la fourniture d'une cuisine type. Par ailleurs, la conclusion selon laquelle la preuve par expertise aurait dû être offerte ne contrevient pas davantage au droit fédéral. Il est patent qu'un juge n'avait pas les connaissances spécialisées nécessaires pour chiffrer, sur la base du projet de cuisine type, le montant des coûts supportés par la sous-traitante, et partant sa marge bénéficiaire. Il appartenait à l'homme du métier d'établir ces éléments; l'<ref-law> n'est pas un remède permettant de suppléer aux lacunes d'une partie qui a omis de requérir une mesure probatoire disponible. L'autorité précédente n'a pas méconnu les principes du droit à la preuve, ni les différents moyens à disposition des parties (<ref-law>). Elle n'a pas négligé les titres produits mais a jugé sans aucun arbitraire qu'ils n'établissaient pas la marge devant revenir à la recourante pour la fourniture d'une cuisine type.
Quant au grief selon lequel l'autorité précédente aurait négligé son devoir de motivation en n'expliquant pas pourquoi elle s'écartait de l'analyse des premiers juges et déniait toute force probante aux pièces, il est également infondé. La Chambre patrimoniale s'était placée dans la perspective d'une culpa in contrahendoet a jugé que les postes invoqués ne constituaient pas des dommages négatifs réparables à ce titre. Quant à l'autorité d'appel, elle a motivé son appréciation des preuves d'une façon certes succincte, et qui implique de consulter aussi bien l'écriture contenant les allégations que les pièces produites, mais elle permet au justiciable qui a fourni ces éléments d'exercer son droit de recours en connaissance de cause (sur le devoir de motiver, cf. par ex. <ref-ruling> consid. 4.2).
3.4. La recourante reproche encore à l'autorité précédente d'avoir versé dans l'arbitraire en considérant que trois acquéreurs seulement auraient très vraisemblablement commandé leur cuisine auprès d'elle, alors que cette preuve aurait aussi été rapportée pour deux personnes supplémentaires; l'autorité d'appel aurait de surcroît enfreint son devoir de motivation.
Le point soulevé est sans incidence pour l'issue du litige et n'appelle dès lors aucune discussion (concernant le droit d'être entendu, cf. arrêt 4A_141/2016 du 26 mai 2016 consid. 1.2). En effet, les juges cantonaux ont fait application de l'<ref-law> mais ont rejeté à juste titre la prétention en indemnisation du gain manqué pour des motifs étrangers au comportement hypothétique des clients. Par surabondance, les résumés des déclarations des acquéreurs concernés, auxquels renvoie l'arrêt attaqué (cf. p. 11 s. et 24), permettent de comprendre pourquoi la cour a renoncé à retenir deux autres clients potentiels.
3.5. La recourante prétend également être indemnisée pour les dépenses qu'elle a engagées jusqu'à ce que l'intimée interrompe leur relation. Ce poste devrait logiquement équivaloir à 22'100 fr. 85, si l'on se réfère aux conclusions de la recourante (220'321 fr. 85) et à ses explications quant au gain manqué (198'221 fr.). La recourante n'explique pas clairement comment elle parvient à ce résultat. Elle évoque des «dépenses réelles (...) pour les travaux exécutés» tout en se référant au projet type, qu'elle ne prétend pas avoir mis à exécution.
Pour le surplus, la recourante demande le remboursement des frais salariaux qu'elle a engagés en affectant son collaborateur T._ au projet P._, frais qui s'élèveraient à 8'800 fr. (soit 40% de 22'000 fr.).
L'entrepreneur a le droit d'être rémunéré pour les frais en personnel, matériaux ou autres qu'il était nécessaire d'engager pour exécuter soigneusement l'ouvrage. En d'autres termes, il ne saurait être rémunéré pour les dépenses inutiles qu'un entrepreneur diligent n'aurait pas engagées (cf. arrêt 4A_577/2008 du 31 mars 2009 consid. 5.2 et les réf. citées; GAUCH, op. cit., n° 964 s.). Il appartient à l'entrepreneur de déterminer le montant des coûts effectifs, et donc également de démontrer la nécessité des frais engagés (arrêt 4A_183/2010 du 27 mai 2010 consid. 3.2 et les auteurs cités).
En l'occurrence, l'arrêt attaqué retient que T._ a travaillé à plein temps pour la sous-traitante du 15 janvier au 30 juin 2012 en qualité de dessinateur, vendeur, cuisiniste et secrétaire. Il a touché au total un salaire de base AVS de 22'000 fr. Entendu comme témoin, l'intéressé a déclaré avoir consacré entre 40 et 50% de son temps au projet P._, en sa qualité de cuisiniste et d'architecte d'intérieur. La cour cantonale n'a pas remis en cause la crédibilité de cette personne qui, lorsqu'elle a été entendue, n'avait plus de lien contractuel avec la sous-traitante.
La lecture des décisions cantonales ne permet cependant pas de déterminer avec une précision suffisante quels travaux ont été accomplis par la sous-traitante et par ce collaborateur en particulier, sachant que la sous-traitante a finalement admis qu'elle ne pouvait être dédommagée pour les frais de salaire inhérents au travail de son directeur, faute de preuve suffisante. L'arrêt attaqué se réfère aux allégués 99 et suivants, dont il ressort simplement que le coût relatif à l'emploi de T._, principalement dédié au suivi du projet P._, s'est élevé à 22'000 fr., charges patronales en sus (all. 99).
Dans ces circonstances, la recourante ne pouvait prétendre être rémunérée pour des frais de main-d'oeuvre alors que les données concernant les prestations fournies avec l'aide de cette main-d'oeuvre restaient vagues et ne revêtaient pas la précision suffisante. Pour ce motif déjà, la prétention en paiement de 8'800 fr. (40% de 22'000 fr.) pouvait être rejetée sans enfreindre le droit fédéral.
4.
En définitive, le recours doit être rejeté dans la mesure où il est recevable, aux frais de son auteur (<ref-law>). La recourante versera en outre une indemnité de dépens à l'intimée (art. 68 al. 1 et 2 LTF).

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