diff --git a/.claude/rules/self_improvement_loop.md b/.claude/rules/self_improvement_loop.md index 0bf31e57..af1798f0 100644 --- a/.claude/rules/self_improvement_loop.md +++ b/.claude/rules/self_improvement_loop.md @@ -33,7 +33,7 @@ If the change would touch any of these, it is **human-gated** — queue it, do N - Anything you cannot verify locally before shipping. ### 4. IMPLEMENT -- Fresh branch off `origin/main` (`git checkout -b loop/ origin/main`). +- Fresh branch off `origin/main` (`git checkout -b chore/loop- origin/main`). Use a Conventional-Commits type prefix (feat/fix/chore/docs) so the repo branch-name CI check passes — never `loop/...`. - Smallest change that makes the failure mode impossible, not just hidden. - Match surrounding code style. Reduced-motion guard on any new animation. diff --git a/CHANGELOG/pages/proto-home-v5.md b/CHANGELOG/pages/proto-home-v5.md index 62ded50a..e6f63c44 100644 --- a/CHANGELOG/pages/proto-home-v5.md +++ b/CHANGELOG/pages/proto-home-v5.md @@ -11,3 +11,13 @@ Centralized lightweight motion tokens and added a visual polish pass across the Self-improvement loop cycle C002 added `type="button"` to the Memory Wall sticky-delete button and the two onboarding-tour buttons (Next/Skip) — they had onclick handlers but no explicit type (implicit-submit footgun). Validated as not inside a
; no behavior change. e2e honesty + output-contract green. **Commit**: `this commit`. **Author**: Homen Shum + Claude. + +## 2026-06-02 — a11y: anchors-as-buttons keyboard/SR accessible (loop C003) +The "Open wiki", "Take the tour", and "Publish wiki" controls were with no href/role — keyboard users could not focus/activate them and screen readers announced them as links. Added role="button" + tabindex="0" and a global Enter/Space keydown delegate for any a[role=button]. No behavior change for mouse users. e2e green. + +**Commit**: `this commit`. **Author**: Homen Shum + Claude. + +## 2026-06-02 — a11y: accessible names on 2 inputs (loop C004) +The notes-search and note-title inputs had only placeholders (not an accessible name for screen readers). Added aria-label to both. The other text inputs already had with no href/role). Found + fixed 3 real instances (openWiki, startTour, snPublishWiki) by adding role="button" tabindex="0" + a global Enter/Space keydown delegate. Mid-cycle I caught a self-introduced bug (inline onkeydown single-quotes broke a JS innerHTML string) and corrected it before shipping — the validate-before-ship discipline in action. Post-fix scan clean. + +**Commit**: `this commit`. **Author**: Homen Shum + Claude. + +## 2026-06-02 — Cycle C004: unlabeled-input a11y detector + fix +Added detectUnlabeledInputs (aware of Open wiki → + Open wiki →
@@ -1943,7 +1943,7 @@

A disposable sidecar room for live event memory.

- New to ScratchNode? This is the sidecar room: chat publicly, /ask for sourced answers, or lock the composer for private notes. Take the 20-second tour → + New to ScratchNode? This is the sidecar room: chat publicly, /ask for sourced answers, or lock the composer for private notes. Take the 20-second tour →
@@ -3410,7 +3410,7 @@

Keyboard shortcuts

'

🔒My notes

' + '' + '' + - '' + + '' + '' + '
' + renderNotesList() + '
' + '' + @@ -3427,7 +3427,7 @@

Keyboard shortcuts

return '

' + escapeHtml(EVENT_TITLE) + ' · Wiki

live Convex
' + '
' + '
' + window._sn_published_wiki_body + '
' + - '
'; + ''; } if (window._sn_live && window._sn_live.eventId) { return '

' + escapeHtml(EVENT_TITLE) + ' · Wiki

not published
' + @@ -3994,7 +3994,7 @@

Keyboard shortcuts

h.push(''); h.push(''); h.push('
'); - h.push(''); + h.push(''); if (tagsHtml) h.push('
' + tagsHtml + '
'); if (note.anchorType) { h.push('