07 / FOLLOW-UP · 27 OCTOBER 2026
R3.1 — The Wrong Stream:
Attribution Has a Cost
One genuine denial, two concurrent requests sharing one backend process. Could the unchanged evidence interface select the affected HTTP/2 stream?
Three primary cases, each executed once — six HTTP/2 requests and two genuine AppArmor denials
| Case | HTTP/2 Stream A | HTTP/2 Stream B |
| C0 / no denial | 8,192 bytes, complete | 8,192 bytes, complete |
| C1 / A causes denial | 0 bytes, reset | 0 bytes, reset |
| C2 / B causes denial | 0 bytes, reset | 0 bytes, reset |
Both requests ran in separate threads of the same backend process. Both nginx response holds were active before the kernel operation, and genuine authenticated evidence arrived before both nominal 20 ms deadlines. The unchanged Gate B applied its service/invocation alert to both matching requests. The legitimate stream therefore suffered collateral containment.
AppArmor audit supplied the shared thread-group PID, not the actual syscall TID. Thread names were task-controlled, and no trustworthy HTTP-request-specific or stream-specific evidence binding existed. The independent client observed two separate RST_STREAM / INTERNAL_ERROR outcomes with no response headers or DATA; a connection-wide shutdown or connection-scoped security policy was not established.
Collateral containment observed. Selective containment not demonstrated. The tested service-wide correlation is insufficient for precise containment of concurrent requests. This limits the current attribution and decision interface; AppArmor enforced both operations, and R3's single-stream functional result stands. Two resets do not by themselves establish the correct production response. Independent review and cleanup passed.
R3 proved that evidence can stop delivery.
R3.1 proved that evidence needs scope.
Next open direction: the actual PHP-CGI deployment.
Can nginx reliably associate a specific HTTP/2 upstream request with the PHP-CGI process actually executing it, using independently established kernel/socket identity rather than application-supplied claims?
The near-term target is the operator's actual PHP-CGI deployment. PHP-FPM process-management behavior is not presumed equivalent; other backend languages and runtimes are deferred. The exact launch mode, CGI versus persistent FastCGI operation, process lifecycle, worker exclusivity and socket ownership are not yet established. A future read-only source/configuration study must establish those facts before an experimental implementation is considered.
Research direction, no implementation: BPF remains a preferred candidate for investigation; no technology or production Gate C has been selected. No PHP-CGI correlation solution, BPF-to-nginx integration or kernel patch is implemented. R1's +22.10% CPU-budget failure and unproven production overhead remain constraints. The next research plan will be developed separately.