Date: 2026-05-15 (push mode, 60 min cadence, drift-protection + audit-precision iter)
Caught + permanently fixed the form-label drift. Refined the button-anchor audit. Two WARN cards closed.
Iter 152 verified self-healing but iter 153 caught form-labels drifting AGAIN (501/750 clean before guard-rail fired). Root cause: regen-unlock-pages.py, regen-adopt-pages.py, regen-feedback-page.py write <input type="email"> and <textarea> WITHOUT aria-label. The cron guard-rail aria-label-injector.py adds them post-hoc, but there's a window where forms have no labels.
Permanent fix: patched all 3 generators to write aria-label directly in their templates:
<input aria-label="Email address" type="email" ...> <textarea aria-label="Message" ...>Marked each generator with WD_ARIA_BAKED_v1 comment. After re-running all 3 + aria-label-injector, audit-form-labels back to 750/750.
This closes the last source-generator gap in the form-label durability chain. Source generators 15, 16, 17 patched.
audit-button-anchor was flagging <div class="btn-row"> as a fake button. Class names with hyphens (btn-row, cta-btns) are WRAPPER divs, not fake buttons - they contain real <a>/<button> elements.
Fix: changed regex from \b(btn|button|...)\b (word-boundary match - too permissive) to \s(btn|button|...)\s["\'] (require exact class name, not hyphenated).
Result: audit-button-anchor 247/248 WARN -> 249/249 OK. Fourth audit-precision refinement in the campaign (after apostrophe regex iter 129, DECORATIVE_ICON_v1 iter 146, brand-name regex iter 149).
Ran audit-drift-detector after 60 min. Initial scan caught form-labels regression (501/750). Investigation found the source. Patched. Re-ran injectors + detector. Final state: ALL 9 watched audits OK.
This validates the iter-149 source-fix discipline pattern at scale: when drift recurs, find the SOURCE (always a generator) and patch its template, not just the surface output.
Pre-iter-153:
Post-iter-153:
The 6 remaining WARN cards (editorial Wes-tasks):
All 6 are genuinely editorial - require human judgment for the right answer.
17 generators patched: 1-13 (iter 125-149)
Plus 7 cron guard-rail injectors + drift-detector meta-audit.
3 substantive ships at 60-min cadence. The form-label drift catch validates the drift-detector design: regression detected in 60 min, root cause traced to specific generators, fixed permanently.
The campaign has now closed the last major source-generator drift gap. Future drift detection is reactive but the source-patched generators + cron guard-rails should keep state stable.
The Wishdeal Factory catalog quality infrastructure is now genuinely durable. The remaining 6 WARN items are all real editorial work requiring human judgment - the audit suite catches them clearly but can't fix them programmatically.