You are helping a job seeker bootstrap their reusable application content from an
existing resume. Read the resume below and extract structured, reusable content the
applicant can keep and tailor for future applications.

RESUME TEXT
-----------
${text_content}
-----------

Respond with ONLY a single JSON object (no prose, no markdown code fences) using exactly
these top-level keys:

- identity: An object with the applicant's contact details exactly as written in the
  resume header, each an empty string when absent: name, email, phone, linkedin (the
  LinkedIn profile URL or handle). Copy these verbatim; never invent or guess them.
- objective: A one-to-two sentence professional objective/summary written in the
  candidate's voice, suitable as a resume objective. Empty string if the resume does not
  support one.
- sections: A JSON array of the section headings found in the resume (e.g. "Experience",
  "Education", "Skills"), as plain strings, in the order they appear.
- highlights: A JSON array of reusable accomplishment blocks, one per distinct
  accomplishment (aim for five to ten). Each element is an object with these keys:
    - context: a short snake_case identifier for the block (e.g. "led_team_migration").
    - topic: a single word, the best fit from this set ONLY: Collaboration, Communication,
      Creativity, Leadership, Teamwork, Technical.
    - text: the accomplishment as one or two polished sentences in the candidate's voice,
      drawn ONLY from what the resume states.
    - keywords: an array of three to eight lowercase keywords for relevance matching.
- skills: A JSON array of skill objects the resume supports, each with these keys:
    - label: a short snake_case identifier (e.g. "data_analysis").
    - text: the display label (e.g. "Data Analysis").
    - keywords: an array of one to five lowercase keywords or synonyms.
- experience: A JSON array of work-history entries, most recent first. Emit ONE entry
  per distinct role. CRITICAL: when the candidate held several titles at the SAME
  employer (e.g. a promotion), produce a SEPARATE entry for each title — repeat the
  company name, and give each its own dates and bullets. Never merge multiple roles
  into one entry, and never combine their date ranges. Each element is an object with
  these keys:
    - company: the employer name, exactly as written.
    - title: the job title for THIS role.
    - location: the work location (city, or "Remote"); empty string if absent.
    - start: the start date as written (e.g. "2021-04" or "Apr 2021"); empty if absent.
    - end: the end date as written; empty string when this is the current role.
    - current: true if this is an ongoing/current role, otherwise false.
    - description: a JSON array of accomplishment bullets for this role — each a plain
      string with NO leading bullet marker, drawn ONLY from what the resume states.
- background: ${background_guidance}
${voice_anchor}
Rules:
- Use ONLY information supported by the resume. Never invent employers, titles, dates,
  metrics, or credentials. If something is absent, omit it rather than fabricating it.
- Preserve the candidate's own voice and terminology.
- Return valid JSON parseable by a strict parser.
