diff --git a/.agents/skills/webjs/references/routing-and-pages.md b/.agents/skills/webjs/references/routing-and-pages.md
index 9cbaeed7d..0512c1300 100644
--- a/.agents/skills/webjs/references/routing-and-pages.md
+++ b/.agents/skills/webjs/references/routing-and-pages.md
@@ -179,6 +179,8 @@ Three responses that are not the happy path:
The submission is Origin-verified (the same `Sec-Fetch-Site` / `Origin` check the RPC endpoint applies), so a no-JS form needs no CSRF token field.
+A submitter's own `formmethod` / `formenctype` / `formtarget` overrides the form's on PRESENCE, not on the value being non-empty, and the client router resolves them the same way (#1322). So `
- "Identical by construction" is a claim about the whole submission, encoding included, and it is enforced in two places. The router resolves the effective enctype with native precedence (a submitter's formenctype over the form's) and ENCODES the body accordingly: multipart/form-data sends FormData, and application/x-www-form-urlencoded, which is the HTML default and therefore what a plain <form method="post"> means, sends URLSearchParams. Before that the router built FormData for everything, so an ordinary POST form sent a urlencoded body without JS and a multipart body with it. A text/plain POST is the one encoding the server cannot parse, so the router declines it and lets the browser submit natively, which makes both paths do the same thing rather than one of them appear to work.
+ "Identical by construction" is a claim about the whole submission, encoding included, and it is enforced in two places. The router resolves the effective enctype with native precedence (a submitter's formenctype over the form's, decided on whether the attribute is PRESENT rather than on its value being non-empty, so formenctype="" means urlencoded and not the form's declared encoding) and ENCODES the body accordingly: multipart/form-data sends FormData, and application/x-www-form-urlencoded, which is the HTML default and therefore what a plain <form method="post"> means, sends URLSearchParams. Before that the router built FormData for everything, so an ordinary POST form sent a urlencoded body without JS and a multipart body with it. A text/plain POST is the one encoding the server cannot parse, so the router declines it and lets the browser submit natively, which makes both paths do the same thing rather than one of them appear to work.
A submitter that BINDS its own action is refused when it also declares a formmethod other than post, an unparseable formenctype, or formmethod="dialog", because those contradict the action attached to that same button. A button that binds nothing is left alone: its formmethod / formenctype is a legal native override, the author wrote it deliberately, and the form's action simply does not run, exactly as the same markup behaves anywhere else. In dev the client logs a console error at submit time when a submission is carrying an identity it cannot deliver.