{
  "_comment": "Generic product registry for the AIDA Jobs Report Installer. Each product declares which documents it delivers and which upstream pipeline stages are actually needed to produce them. Adding a new product is just a new entry here -- no code changes needed in build_report.py, which reads this file and conditionally runs each generator based on the selected product's 'documents' list.",
  "_document_types": [
    "career_bio",
    "search_strategy",
    "job_report",
    "resume_docx",
    "resume_pdf",
    "resume_ats",
    "cover_letter_docx",
    "cover_letter_pdf",
    "top100_csv",
    "full_scan_csv",
    "job_fit_assessment",
    "package_summary"
  ],
  "_pipeline_flags": {
    "requires_keyword_matrix": "true if ANY selected document displays the matrix (career_bio, search_strategy, job_report) -- these need the matrix DRAFTED (step 3) even if scoring/review never happens.",
    "requires_scoring_pipeline": "true only if job_report is selected -- this is the expensive part (DB writes, Stage 2 scoring, 100-posting manual review, company stats). career_bio and search_strategy alone do NOT need this; they only display the drafted matrix, not scored/reviewed results.",
    "requires_client_db_row": "false by default; only Custom Resume Package sets this explicitly to flag that even its DB row (if any) is a post-fulfillment side effect, never a precondition for generating the documents."
  },
  "products": {
    "full_jobs_report": {
      "display_name": "Price Fixe",
      "filename_label": "",
      "documents": [
        "career_bio",
        "search_strategy",
        "job_report",
        "resume_docx",
        "resume_pdf",
        "resume_ats",
        "cover_letter_docx",
        "cover_letter_pdf",
        "top100_csv",
        "full_scan_csv"
      ],
      "requires_keyword_matrix": true,
      "requires_scoring_pipeline": true
    },
    "career_package": {
      "display_name": "Career Package",
      "filename_label": "Career_Package",
      "documents": [
        "career_bio",
        "search_strategy",
        "job_report"
      ],
      "requires_keyword_matrix": true,
      "requires_scoring_pipeline": true
    },
    "short_stack": {
      "display_name": "Short Stack",
      "filename_label": "Short_Stack",
      "documents": [
        "job_report"
      ],
      "requires_keyword_matrix": true,
      "requires_scoring_pipeline": true
    },
    "large_house_blend_pastry": {
      "display_name": "Large House Blend and Pastry",
      "filename_label": "Large_House_Blend_and_Pastry",
      "documents": [
        "resume_docx",
        "resume_pdf",
        "resume_ats",
        "cover_letter_docx",
        "cover_letter_pdf"
      ],
      "requires_keyword_matrix": false,
      "requires_scoring_pipeline": false,
      "_note": "Two modes, same document set: SIMPLE (resume + career bio only, generic cover letter) or CUSTOM (resume + career bio + a specific job listing dropped in chat -> tailored resume and tailored cover letter). See PROJECT_INSTRUCTIONS.md's Large House Blend and Pastry section for the full procedure and the job-tailored cover letter exception to the standard generic-cover-letter rule."
    },
    "custom_resume_package": {
      "display_name": "Custom Resume Package",
      "filename_label": "Custom_Resume_Package",
      "documents": [
        "career_bio",
        "search_strategy",
        "job_fit_assessment",
        "resume_docx",
        "resume_pdf",
        "resume_ats",
        "cover_letter_docx",
        "cover_letter_pdf",
        "package_summary"
      ],
      "requires_keyword_matrix": true,
      "requires_scoring_pipeline": false,
      "requires_client_db_row": false,
      "_note": "Job-listing-specific, not a broad scan. Two intake paths: (1) existing client with a prior report on file -- Career Bio/Search Strategy are pulled from the DB, not redrafted; (2) cold client with no DB presence at all -- everything is drafted fresh from resume + optional bio + pasted job listing, entirely in-session. No Stage 1 ingestion, no Stage 2 scoring, no manual review -- this is what makes it sellable to markets/clients outside the existing job_postings database (e.g. international). A client/profile DB row is created post-fulfillment regardless of path, purely for future upsell (rescans, full Job Report), never as a precondition for delivering this package. Not yet wired into build_report.py -- see AIDA_Custom_Resume_Kit's INSTRUCTIONS_CUSTOM_RESUME.md for the current per-script generation approach."
    }
  }
}