Skip to content

feat(avatar): flatter opt-in fully open speech mouth - #14

Merged
DoodleBears merged 7 commits into
mainfrom
codex/13-natural-speech-mouth
Oct 9, 2026
Merged

DoodleBears merged 7 commits into
mainfrom
codex/13-natural-speech-mouth

Conversation

@DoodleBears

@DoodleBears DoodleBears commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Issue #13 | Agent claim | Refs Window Companion #1143

Task: codex/local/01a11734-bb09-7f01-9d45-adc0f5df6269 · Refs #13

Why the change

The fully open O-shaped speech mouth looked unnatural in Human DSH qualification, so an explicit new speech artwork version gives it a flatter opening while preserving the accepted half-open mouth.

Special things to note

  • Merge risk: two-way door, omit speechMouthVersion: 2 or revert the opt-in; small blast radius, only consumers explicitly selecting version 2 with speech layers see different fully open artwork. Review focus: exact unchanged default/version-1, saved, closed and half-open output across head turns.
  • No stored recipe, rig/asset migration, golden regeneration, pacing or motion change. Version 0.10.1 is prepared after upstream 0.10.0 but has not been published. Downstream adoption is tracked separately in #1241.
  • The first comparison below is an isolated build preview. Separate real DSH recordings are now provided; the candidate typecheck/build passes on current Host main compatibility. Human shape acceptance and publication approval remain pending.

Change outline

 pixelAvatarSvg / pixelFigure
   mouthLayers: true
+  speechMouthVersion: 2
     saved / closed / half-open → unchanged
-    open → original 3×3 round opening (default/version 1)
+    open → 5×2 opening, lower edge narrows to 3 pixels (version 2)

Same face, 96px and 192px, dark

Left: accepted half-open; center: previous fully open; right: version 2. The horizontal center stays aligned.

Half-open unchanged, original O and flatter full opening

Continuous same-cadence preview · Attribution and limits

Actual DSH — Chinese/light, 1559×865

Same Profile, saved face and exact complete new Bot reply, Host e4926548 integrated with main 78aba544. Before uses formal pixel-avatar0.5.0; After uses the owning source candidate e6f2c6c packed locally before its0.5.1 metadata bump. All four mouth states and both canonical replies were verified (227/199 samples). Background history, speech frame, timing and roaming position differ; these are real speech scenes rather than a frame-matched full-opening pair.

Before After
Actual DSH original speech Actual DSH flatter speech candidate

Continuous original speech · Continuous candidate speech · Sanitized qualification. Silent official MCP recordings, remux only; no synthetic SSE, mouth forcing, interpolation, audio or performance claim. Earlier old-Host editor type errors were resolved by latest main's existing0.5 compatibility, without a mouth-specific editor patch.

The public SVG-interface regression failed before implementation and passes afterward. At implementation head ac9e25740e7ef33d1409b124d9bab23d16732ced, integrated with fetched main 6d9add8, full verification/build passes (111 tests in 14 files), and the subsequently expanded speech regression passes all three tests. It compares unchanged default/version-1, static and non-open speech layers across all five animal species × five patterns × five turns, in addition to existing presets and geometry coverage. Golden fixtures remain unchanged. Implementation CI run 37859783658 passes, and separate Standards and Spec reviews report zero implementation findings. One pre-existing morph lint warning remains. Current head709408e adds only the following current-runtime evidence and its CI run 37861518672 passes.

The earlier real DSH recordings retain their original source attribution and do not qualify new hair/animal/pattern combinations.

Current 0.10.1 candidate — real DEFAULT_RECIPE speech and dismissal

Fixed Host composition fc356883/main66d2767a uses the locally packed ac9e257 source and a QA-only Companion version-2 opt-in. No package is published or formally adopted. Host typecheck, focused renderer regression and build pass; current DEFAULT_RECIPE is saved through the existing authenticated appearance command.

Actual speaking scene Saved expression after native close
Current candidate real default-face speech Real header close restores saved expression

Continuous84.867s current speech · Separate continuous83.433s native dismissal · Exact attribution, retained QA failures and limits. All four actual mouth states and the flattened open SVG layer are observed. The second recording focuses the exact header-close button and uses native Enter; the card disappears and saved expression returns in the same document. Canonical model replies and unchanged saved recipe are verified, including read-only postflight. The first script misselected source navigation and used a nonexistent final-read endpoint; the second script's strict repetitive-text wait timed out because the actual917-character reply differed from the request. These failures remain recorded, and neither full script is claimed wholly passing. Both clips are continuous silent official MCP output, remux only, including QA waiting. Console0errors; owned browsers closed. This qualifies current-package default-face runtime behavior, not every asset combination or performance.

Current candidate — actual stale feed and return

At the same fixed Host composition and owning candidate, one new exact3219-character canonical Bot reply drives real speech. Destroying/refusing the actual shared Companion SSE produces stale synchronization; all118 stale DOM samples show saved mouth, including a six-second hold. Already committed text continues revealing locally. Restoring that feed resumes speech on the same single card/document, retaining the original prefix and saved recipe. Other Host/model routes stay live.

Live speech before cut Saved face during stale sync Live speech after return
Current candidate speech before actual feed cut Saved mouth during actual stale synchronization Same message continues after real feed return

Continuous48.767s actual cut/return · Sanitized qualification and limits. Silent official MCP output, remux only. Two intentional connection errors are recorded; owned browser/proxy closed. The initial test incorrectly required committed text to freeze; its failed report/video are retained and excluded, with no product rule or timer change. This qualifies current integrated-candidate mouth behavior, not standalone PR1180, audible cleanup, backgrounding, full-network outage, performance or formal dependency adoption. Evidence-only35e2636 CI passes; Standards and Spec review against latest fetched main6d9add8 each reports zero code/documentation findings. Human acceptance and adoption gates remain separate.

Human acceptance of the flatter shape and explicit publication approval remain open. No npm release or downstream formal dependency update has occurred.

Issue: #13

Agent-Task: codex/local/01a11734-bb09-7f01-9d45-adc0f5df6269
@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c3ce2166-b18b-461b-be5b-51c406a0bcd4
📥 Commits

Reviewing files that changed from the base of the PR and between 6d9add8 and 35e2636.

⛔ Files ignored due to path filters (14)
  • docs/assets/pr/13/current-default-dismiss.webm is excluded by !**/*.webm
  • docs/assets/pr/13/current-default-restored-dark.png is excluded by !**/*.png
  • docs/assets/pr/13/current-default-speaking-dark.png is excluded by !**/*.png
  • docs/assets/pr/13/current-default-speech.webm is excluded by !**/*.webm
  • docs/assets/pr/13/current-resumed-same-card.png is excluded by !**/*.png
  • docs/assets/pr/13/current-saved-during-stale.png is excluded by !**/*.png
  • docs/assets/pr/13/current-speaking-before-cut.png is excluded by !**/*.png
  • docs/assets/pr/13/current-stale-return.webm is excluded by !**/*.webm
  • docs/assets/pr/13/dsh-after.png is excluded by !**/*.png
  • docs/assets/pr/13/dsh-after.webm is excluded by !**/*.webm
  • docs/assets/pr/13/dsh-before.png is excluded by !**/*.png
  • docs/assets/pr/13/dsh-before.webm is excluded by !**/*.webm
  • docs/assets/pr/13/mouth-comparison.png is excluded by !**/*.png
  • docs/assets/pr/13/mouth-comparison.webm is excluded by !**/*.webm
📒 Files selected for processing (10)
  • CHANGELOG.md
  • docs/assets/pr/13/README.md
  • docs/assets/pr/13/current-dsh-qualification.json
  • docs/assets/pr/13/current-stale-qualification.json
  • docs/assets/pr/13/dsh-qualification.json
  • packages/avatar/README.md
  • packages/avatar/package.json
  • packages/avatar/src/figure.ts
  • packages/avatar/src/svg.ts
  • packages/avatar/test/speech.test.ts
 ______________________________________________________
< Weeks of programming can save you hours of planning. >
 ------------------------------------------------------
  \
   \   \
        \ /\
        ( )
      .( o ).
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Issue: #13

Agent-Task: codex/local/01a11734-bb09-7f01-9d45-adc0f5df6269
Resolve package version as 0.6.1 after upstream 0.6.0. Preserve both changelog entries and all upstream hair-part behavior.

Issue: #13

Agent-Task: codex/local/01a11734-bb09-7f01-9d45-adc0f5df6269
Preserve upstream replacement parts and keep opt-in fully open speech artwork; resolve package and ledger conflicts as 0.7.1.

Issue: #13

Agent-Task: codex/local/01a11734-bb09-7f01-9d45-adc0f5df6269
Issue: #13
Agent-Task: codex/local/01a11734-bb09-7f01-9d45-adc0f5df6269

# Conflicts:
#	CHANGELOG.md
#	packages/avatar/package.json
Issue: #13

Agent-Task: codex/local/01a11734-bb09-7f01-9d45-adc0f5df6269
Refs #13

Agent-Task: codex/local/01a11734-bb09-7f01-9d45-adc0f5df6269
@DoodleBears
DoodleBears marked this pull request as ready for review October 9, 2026 03:18
@DoodleBears
DoodleBears merged commit 71e69e8 into main Oct 9, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant