Filed by the authors as an open question, not a bug report. v0.1 is published early so that questions like this get argued out in the open.
The limit as it stands
The definition states, as a known limit:
Visibility controlled by JavaScript at runtime is not evaluated
So a page that renders clean in static HTML and injects agent-directed text at runtime is, by the current text, not a finding — because we did not look.
Why it was left there
Evaluating runtime visibility means executing untrusted pages. That changes the cost, the attack surface, and the reproducibility of a verdict: two implementations running the same page through different engines, at different times, may legitimately disagree. A standard whose verdict depends on which headless browser you used is not mechanically decidable, which is the property the two-axis design exists to protect.
The open question
Three options, and we do not think the answer is obvious:
- Leave it out of scope, as now. Honest, reproducible, and blind to a real technique.
- Bring it in scope with a stated rendering profile — a named engine, a fixed viewport, a fixed timeout. Reproducible only to the extent that everyone adopts the same profile.
- A third verdict value. Report
visibility: undetermined when a page's text content depends on script execution, in the same way external CSS is already handled — never escalating to hidden, but not silently reporting clean either.
Option 3 is closest to the existing treatment of unresolvable external CSS, and to the principle that reporting "nothing found" when you did not look is the worst failure mode available here. It also raises a question of its own: nearly every modern page runs script, so undetermined could end up on almost everything and mean nothing.
What would help
- If you have implemented this: what did you do about runtime visibility, and did it produce false positives?
- Is there a formulation of option 2 that stays reproducible across implementations?
- Is there a narrower trigger for option 3 than "the page contains script"?
Filed by the authors as an open question, not a bug report. v0.1 is published early so that questions like this get argued out in the open.
The limit as it stands
The definition states, as a known limit:
So a page that renders clean in static HTML and injects agent-directed text at runtime is, by the current text, not a finding — because we did not look.
Why it was left there
Evaluating runtime visibility means executing untrusted pages. That changes the cost, the attack surface, and the reproducibility of a verdict: two implementations running the same page through different engines, at different times, may legitimately disagree. A standard whose verdict depends on which headless browser you used is not mechanically decidable, which is the property the two-axis design exists to protect.
The open question
Three options, and we do not think the answer is obvious:
visibility: undeterminedwhen a page's text content depends on script execution, in the same way external CSS is already handled — never escalating tohidden, but not silently reporting clean either.Option 3 is closest to the existing treatment of unresolvable external CSS, and to the principle that reporting "nothing found" when you did not look is the worst failure mode available here. It also raises a question of its own: nearly every modern page runs script, so
undeterminedcould end up on almost everything and mean nothing.What would help