I'll start from the simplier one:

and also the use or  DISPLAYLIST &  VALUELIST does this brings any advantage vs defining a standard property (eg.fast access!), so instead of have to do Valuetist "H" and Dispay "Hot" why just a standard property as string containing "Hot"?

More effective storage. If you can replace Cold with 1, Medium with 2 and Hot with 3 you can save some space. Another reason is that VALUELIST turns a string into a enum, which changes the logic considerably.

If I'm using an objectgenerator, is there a way to check the compile flags and have it behave differently based on which flags are set?

A very exciting way to introduce some unexpected behavior down the line.

What is your use case?

And as a tangent, is there a list somewhere of what compile flags there are?

Sure:

do $system.OBJ.ShowFlags()
do $system.OBJ.ShowQualifiers()

If there's a text layer use LibreOffice to convert to txt (InterSystems IRIS wrapper), for OCR you'll need some thirdparty tool, for example Tesseract can be easily used with Embedded Python.

UPD: LibreOffice can't extract text from PDFs unfortunately. Here's Embedded Python solution:

Class User.PDF
{

/// zw ##class(User.PDF).GetText("/tmp/example.pdf", .text)
ClassMethod GetText(file, Output text) As %Status
{
  try {
    #dim sc As %Status = $$$OK
    kill text
    set dir = $system.Util.ManagerDirectory()_ "python"
    do ##class(%File).CreateDirectoryChain(dir)
    // pip3 install --target /data/db/mgr/python --ignore-requires-python typing==3.10.0.0
    try {
      set pypdf2 = $system.Python.Import("PyPDF2")
    } catch {
      set cmd = "pip3"
      set args($i(args)) = "install"
      set args($i(args)) = "--target"
      set args($i(args)) = dir
      set args($i(args)) = "PyPDF2==2.10.0"
      set args($i(args)) = "dataclasses"
      set args($i(args)) = "typing-extensions==3.10.0.1" 
      set args($i(args)) = "--upgrade"
      set sc = $ZF(-100,"", cmd, .args)
      set pypdf2 = $system.Python.Import("PyPDF2")
    }
    return:'$d(pypdf2) $$$ERROR($$$GeneralError, "Unable to load PyPDF2")
    kill pypdf2
    set text = ..GetTextPy(file)
  } catch ex {
    set sc = ex.AsStatus()
  }
  quit sc
}

ClassMethod GetTextPy(file) [ Language = python ]
{
  from PyPDF2 import PdfReader

  reader = PdfReader(file)
  text = ""
  for page in reader.pages:
    text += page.extract_text() + "\n"

  return text
}

}

Try to reload like this:

set importlib = ##class(%SYS.Python).Import("importlib")
do importlib.reload(helloWorld)

Also, it not an IRIS-specific behavior, you'll get the same results in any python interpreter:

import helloWorld
helloWorld.helloWorld()
>'Hello world'
del helloWorld

# modify helloWorld.py in text editor

import helloWorld
helloWorld.helloWorld()
>'Hello world'