Choice-role buttons with submit-like labels turn product containers into pseudo-forms
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Inizia leggendo FormControlClassifier::isPseudoFormSubmitControl() e le protezioni esistenti per la semantica di invio, compresa html-inline-button-in-paragraph-submit-semantics-fallback. Aggiungi la pagina ridotta come fixture neutra di regressione e verifica che non produca alcuna segnalazione relativa a un modulo, mentre le fixture esistenti per moduli reali e pseudo-moduli continuano a passare. Il lavoro è completo quando i controlli ARIA con ruolo di scelta non contano più come prova di invio di un pseudo-modulo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Observed failure
A real product-page import fails in Static Site Importer with static_site_importer_runtime_binding_claim_conflict ("Provider entity bindings claim overlapping canonical source-page ranges"). Blocks Engine classifies the whole product container as a pseudo-form, so its form binding covers the product's own commerce_controls (Add to Cart) binding.
Seen with Data Liberation Agent 0.32.10, Static Site Importer 1.33.42, and its bundled Blocks Engine.
Root cause
FormControlClassifier::isPseudoFormSubmitControl() falls back to hasSubmitSemantics() (text and attribute heuristics) for <button type="button">. A purchase-mode option, <button type="button" role="radio">Subscribe & Save</button>, matches subscribe and counts as a submit. Combined with a labelled checkbox elsewhere in the container, PseudoFormAnalyzer::pairsDataEntryWithSubmit() accepts the surrounding content container as the "tightest coherent" pseudo-form.
A control that declares an ARIA choice role (radio, checkbox, switch, option, tab, menuitemradio, menuitemcheckbox) selects state. It does not submit, whatever its label says.
Reduced reproduction
<main><div class="container">
<h1>Blue Widget</h1>
<p class="price">$29.00</p>
<div class="buy-modes" role="radiogroup">
<button type="button" role="radio" aria-checked="true" class="buy-mode active">One-time purchase</button>
<button type="button" role="radio" aria-checked="false" class="buy-mode">Subscribe & Save</button>
</div>
<button class="add">Add to Cart</button>
<section class="extra"><label><input type="checkbox"> Gift wrap $5.00</label></section>
</div></main>
- With "Subscribe & Save":
html_form_fallbackonmain:nth-of-type(1) > div:nth-of-type(1), so the page fails quality validation asunsupported_html_fallback. - With the same option renamed "Monthly delivery": the import is clean with no form finding.
Acceptance
- A control with an ARIA choice role is not pseudo-form submit evidence.
- The reduced page above is a neutral regression fixture. It fails before the fix and emits no form finding after it.
- Existing submit-semantics guards still hold, for example
html-inline-button-in-paragraph-submit-semantics-fallbackand the real and pseudo-form fixtures.
AI assistance
Claude (Anthropic) running in the Pi coding agent via Roadie reproduced the failure, reduced it, and identified the root cause. Chris Huber reviewed it.
- Lingua principale
- PHP
- Stelle
- 21
- Fork
- 2
- Merge medio
- 8h 50m
- PR unite (30g)
- 609
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Automattic/blocks-engine
-
Solved site promotion gate fails on runner PHP patch drift (expects 8.2.33, runner installs 8.2.34)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
Automattic/blocks-engine#2161 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Automattic/blocks-engine#2061 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
Automattic/blocks-engine#1701 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
Automattic/blocks-engine#775 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 70/100
Automattic/blocks-engine#3091 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di Automattic/blocks-engine
Issue simili
-
Monit: poll time validation rejects "/", blocking the cron step syntax recommended by Monit 6Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
I maintainer di solito rispondono entro 1 giorno
-
[2.5] Admin GraphQL attributeValues.value reads price from integer_value instead of float_valueAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 69/100
bagisto/bagisto-api#54 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
grokability/snipe-it#19869 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
regression
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
sync-en
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno