Module inspector stops crying wolf — static-asset predicate tightens, wizard-link note gates on real buttons, and HTML-comment ack markers let authors mute design-intent notes
Three precision fixes to the Stripo module-bindings inspector after the 0.19.8 detectors landed and immediately produced false positives in real workspaces. The static-asset pattern check now counts a variable as image-bound only when its primary mapping targets the src attribute, so text variables with secondary alt/title mappings on an image element no longer pad the count and trigger the note. The wizard top-level link-field note now requires the module to actually contain a button-shaped element AND not already have an href binding registered against it, so modules with no button (or modules whose CTA href is already covered by a registered Smart Property) stop seeing a note they can't act on. And two HTML-comment patterns the skill already recommended are now read back by the inspector — paste the static-asset marker comment to silence the static-asset note for a module whose imagery is design-by-intent, or paste an ACK comment naming a specific variable and attribute to silence selector-without-target notes for bindings that are dormant on purpose. The skill doc gains the exact paste-ready snippets in a new Acknowledging static-asset intent subsection.
What shipped
•Bug fix — static-asset pattern detector no longer counts secondary alt/title mappings as image bindings. The 0.19.8 check counted a Smart Property as image-bound whenever any of its blockMapping[] entries had attribute === src, which falsely included text variables (p_name, p_title) that carried a secondary mapping onto an image's alt or title attribute for re-use. Modules with a single hero image but multiple text variables linking alt-text into it were tripping the note. The predicate now reads only the first blockMapping entry — the primary binding — so a text variable whose first mapping is on a description class no longer qualifies as image-bound regardless of what its secondary mappings touch. Real impact on a typical workspace: false-positive notes drop on quote, two-column, and grid modules; the genuine static-asset case (comparison tables, emoji bullets, badge grids) still fires cleanly.
•Bug fix — wizard top-level link-field note gated on actual button presence and binding coverage. The note 'Button CTA may be bound via the Smart Element wizard's top-level link field…' previously fired on every module whose top_level_link_field flag was set, regardless of whether the module contained a button at all or whether the CTA href was already bound. The check now requires both: (a) the module HTML contains a button-shaped element (a tag with es-button or esd-button class, role='button', a button element, or a Stripo es-button- table wrapper), AND (b) no registered variable already has an href binding in the module. Modules with no button suppress the note entirely; modules where p_image_link or similar already owns the click suppress the note as well. The genuine case — real button, no binding — still fires.
•New feature — HTML-comment markers suppress design-intent notes. Two paste-ready patterns the inspector now reads back. (1) A static-asset intent marker — paste an HTML comment starting with 'Static asset markers' above a module whose imagery is intentionally static (tick markers, badge grids, brand-logo walls) and the inspector skips the static-asset note for that module. (2) Per-variable acknowledgement markers — paste '<!-- ACK: p_title.alt selector-without-target is intentional -->' to silence the selector-without-target note for one specific variable + attribute combo, or '<!-- ACK: p_title selector-without-target is intentional -->' to silence all attributes for that variable. The wizard leaves HTML comments alone, so the markers survive every re-open of the module in the Stripo editor.
•Skill update — stripo-module-bindings gains an Acknowledging static-asset intent subsection with the exact paste-ready snippets for both marker patterns and the ACK comment regex. Sits under the existing static-asset guidance so authors find the suppression path right next to the diagnosis path.