Understanding hygiene

I have hobby-researched the topic of hygiene for quite some time, and it's become a no-brainer for me that hygiene is good. The reason is that macros can be viewed as "programmable inline functions", and when considering inlining, it's quite clear that renaming of the variables introduced by an inlined piece of code, as well as making sure that variables used by that piece of code still point to their original bindings when the code is inlined, is necessary.

So it seems that there are two fundamental issues, which are sometimes referred to as "hygiene" vs "referential transparency": introduction of names vs use of names.

When a macro introduces a name into its output, we want to automatically rename (or otherwise mark) that name, so that it's actually invisible at the point of the macro call. (Except when we want to introduce a visible name, which requires the use of a hygiene breaker, a function that can inject a name into a particular context.)

When a macro (expansion) uses a name, we want to make sure that that name cannot be shadowed by the surrounding context of the macro call. Somehow, a name used by a macro expansion needs to remember its original binding, namely the binding that was in effect where the macro was defined (as opposed to called).

My questions:

  • Are these the issues "necessary and sufficient" to consider when thinking about and implementing hygiene, or is there something I'm missing?
  • What about SRFI-72? If I understand it correctly, SRFI-72 proposes a different hygiene rule than standard Scheme, in particular around the issue of quasiquotation. Is this hygiene rule state of the art, or is that a point that is being debated and/or researched?