Faits : A. X._, née en 1948, a travaillé en qualité d'employée d'exploitation au CHUV jusqu'au 31 octobre 1992; à ce titre, elle était affiliée pour la prévoyance professionnelle auprès de la Caisse de pension de l'État de Vaud (CPEV). En septembre 1992, elle a demandé le remboursement en espèces de sa prestation de départ, indiquant qu'elle était mariée et cessait toute activité lucrative. La CPEV a accepté la demande et payé la prestation de départ par chèque du 1er décembre 1992; dans son courrier du 24 novembre 1992, la caisse précisait à X._ que, durant le délai de 30 jours entre la fin des rapports de travail et le versement, elle était assurée contre les risques d'invalidité définitive et de décès. Le 12 avril 1993, X._ a déposé auprès de l'office de l'assurance-invalidité pour le canton de Vaud (office AI) une demande tendant à l'octroi d'une rente d'invalidité. Du 1er septembre 1993 au 30 septembre 1995, X._ a travaillé comme employée de maison à 40% dans une institution à Lausanne. Elle a été affiliée auprès du Fonds A._. Dans sa demande d'affiliation du 27 septembre 1993, elle a notamment indiqué jouir d'une pleine capacité de travail et ne souffrir, à sa connaissance, ni d'une infirmité, ni des suites d'une maladie ou d'un accident. Par décision du 26 août 1996, l'office AI a mis X._ au bénéfice d'une rente entière de l'assurance-invalidité avec effet rétroactif au 1er octobre 1993. Selon les avis médicaux versés au dossier AI, l'incapacité de travail a débuté le 1er novembre 1992 et le besoin de traitement médical s'est manifesté le 22 avril 1993. Le 22 janvier 1997, X._ a adressé au Fonds A._ une demande de prestations d'invalidité. Celles-ci ont été refusées au motif que l'incapacité de travail à l'origine de l'invalidité était antérieure à l'affiliation au fonds. X._ a recouru contre cette décision auprès du Tribunal des assurances du canton de Vaud. Dans cette procédure, elle a été mise au bénéfice de l'assistance judiciaire et représentée successivement par trois avocats, dont Me Z._ en dernier lieu. Le 30 juin 1999, cet avocat avait informé le Tribunal des assurances de sa constitution en qualité de nouveau conseil de X._; il a été désigné en qualité de conseil d'office le 11 janvier 2000. Par jugement du 19 février 2001 notifié le 30 avril 2001 à Me Z._, le Tribunal des assurances a rejeté le recours. Ce jugement n'a pas été attaqué. Le 21 avril 2008, X._ a déposé une demande de rente d'invalidité de la prévoyance professionnelle auprès de la CPEV. La caisse a reconnu une invalidité définitive à 100% dès le 1er novembre 1992, mais s'est prévalue de la prescription. Le 23 octobre 2009, X._ a introduit une action tendant à l'octroi, par la CPEV, d'une rente d'invalidité. Par jugement du 20 septembre 2011, la Cour des assurances sociales du Tribunal cantonal du canton de Vaud a rejeté la demande, au motif que le droit de X._ de percevoir une rente de la part de la CPEV était prescrit. Le Tribunal fédéral a rejeté le recours formé contre ce jugement par arrêt du 4 juillet 2012 (cause 9C_94/2012). B. Par demande du 19 juillet 2013, X._ a ouvert action contre Z._, concluant au paiement de dommages-intérêts par 1'508'954 fr.55 plus intérêts; ce montant, porté ultérieurement à 1'585'022 fr.85, représente essentiellement les prestations d'invalidité en faveur de la demanderesse et de trois enfants. X._ reproche à l'avocat une mauvaise exécution du mandat; il ne l'aurait pas informée de ses droits à l'obtention de prestations d'invalidité de la part de la CPEV et n'aurait pas entrepris les démarches nécessaires auprès de cette caisse afin d'interrompre la prescription. Elle soutient qu'après la fin du mandat d'office, intervenue en février 2002, l'avocat était "toujours mandaté par [elle] et restait tenu de l'informer sur les démarches à entreprendre afin d'obtenir des prestations d'invalidité de la CPEV". Z._ a conclu au rejet de la demande. En particulier, il a contesté sa légitimation passive, soutenant que les actes qu'il avait accomplis pour la recourante s'étaient toujours inscrits dans le cadre de sa mission de défenseur d'office; selon lui, c'était l'État de Vaud qui devait, le cas échéant, être recherché en responsabilité. Par jugement du 25 septembre 2015, la Chambre patrimoniale cantonale du canton de Vaud a rejeté la demande. En résumé, elle a jugé que la preuve d'un mandat privé qui aurait succédé au mandat d'office n'avait pas été apportée, que l'avocat avait agi uniquement en qualité de conseil d'office, qu'il n'était, en tant que tel, pas tenu envers X._ de réparer le dommage et que, le cas échéant, c'était à l'État de Vaud d'assumer cette responsabilité; partant, elle a nié la légitimation passive de Z._. A titre subsidiaire, la Chambre patrimoniale a jugé que d'éventuelles prétentions en dommages-intérêts à l'encontre de l'avocat seraient de toute façon prescrites, le délai de prescription de cinq ans étant venu à échéance au plus tard en octobre 2008. X._ a interjeté appel. Par arrêt du 19 février 2016, la Cour d'appel civile du Tribunal cantonal vaudois a confirmé le jugement de première instance en ce qu'il rejetait la demande pour cause de défaut de légitimation passive; en revanche, elle a laissé ouverte la question de la prescription des prétentions en dommages-intérêts envers l'avocat. Selon la cour cantonale, X._ n'a pas prouvé avoir conclu un mandat avec l'avocat après que celui-ci lui a communiqué le jugement cantonal du 19 février 2001 dans la procédure ouverte contre le Fonds A._, pas plus qu'elle n'a prouvé que l'avocat aurait continué à l'assister ou la représenter après cette date. La preuve d'un mandat privé ayant pris place à la suite du mandat d'office n'étant pas apportée, la Cour d'appel civile a retenu que l'avocat avait agi uniquement en qualité de conseil d'office de X._. A l'instar des juges de première instance, elle a jugé que Z._ ne répondait pas personnellement, envers X._, d'une éventuelle négligence dans l'exécution du mandat d'office. A la suite de l'annulation de son mariage, X._ a repris son nom de jeune fille. C. X._ interjette un recours en matière civile. Elle conclut à ce que Z._ soit condamné à lui verser la somme de 1'585'022 fr.85 avec intérêt à 5% dès le 27 novembre 2014; elle demande subsidiairement le renvoi de la cause à l'autorité précédente, voire à l'autorité de première instance. La recourante fait valoir principalement que l'intimé est responsable en qualité de mandataire privé, sur la base du mandat qu'elle lui a confié lors de la première consultation en 1999; à titre subsidiaire, elle soutient que l'avocat commis d'office est personnellement responsable de la bonne et fidèle exécution du mandat d'office. La recourante a requis le bénéfice de l'assistance judiciaire, qui lui a été accordée par ordonnance du 29 août 2016 avec désignation de son mandataire comme avocat d'office. L'intimé propose le rejet du recours. Par la suite, les parties ont chacune déposé des observations.