[Fix] (Pipe, Purity): end a declared verb honestly, and gate the header MG_State now includes

- MGPipeLeaveVerb() bumps the serial and puts the current verb back to none, so a test that
  drives a backend helper directly stops declaring where it says it stops and a later
  unguarded read aborts as "<Field>@<none>" instead of naming an unrelated verb
- check_include_closure.py gains a fourth probe: F2 put MGP_NOTE_MUTATION into frontend
  mutators, so MG_State includes MG_Pipe/PipeMutation.h and that header must never reach
  back into MG_State, MG_Impl or a backend
This commit is contained in:
2026-09-06 06:15:56 -04:00
parent ef6227e19b
commit 62a7786184
4 changed files with 44 additions and 5 deletions
+19
View File
@@ -106,6 +106,25 @@ PROBES = [
"Why": "P7 ships the reflection artifacts over the wire; the archive header must not "
"depend on the compiler front end that produced them.",
},
{
"Name": "mutation-header",
"Header": "MobileGL/MG_Pipe/PipeMutation.h",
"Tu": "#include <MG_Pipe/PipeMutation.h>\n",
"Forbidden": [
"MobileGL/MG_Impl/",
"MobileGL/MG_State/GLState/Core.h",
"MobileGL/MG_Remote/",
],
"Allow": [],
"TextLimits": {},
"Why": "P1 finding F2 put MGP_NOTE_MUTATION in frontend mutators, so MG_State now "
"includes this header (TextureState.h, SamplerObject.h). It may only DECLARE "
"the notice: reaching MG_Impl would pull the fill implementation into the "
"state machine that calls it, and reaching GLState/Core.h would close the "
"cycle back onto the context. The MGPipeTypes -> BackendObject -> TextureEnum "
"reach it inherits from MGPipe.h is D1's known exception, which is why gate A "
"asserts MGPipeValueTypes.h rather than MGPipeTypes.h.",
},
{
"Name": "wire-header",
"Header": "MobileGL/MG_Remote/Transport/ITransport.h",