Skip to content

office: give the cast arms, working poses, side profiles, badges and a crown - #767

Open
vanithamayojula-ux wants to merge 2 commits into
HarnessMD:mainfrom
vanithamayojula-ux:contrib/cast-arms-poses-badges
Open

vanithamayojula-ux wants to merge 2 commits into
HarnessMD:mainfrom
vanithamayojula-ux:contrib/cast-arms-poses-badges

Conversation

@vanithamayojula-ux

Copy link
Copy Markdown

What & why

The floor's avatars had no arms, replayed the walk cycle while typing or reading, and showed the front view when walking left or right. This gives the cast arms and hands that swing with the stride, real typing (hands on the keys from the front, elbows lifting from behind) and reading (a page held up) frames, a blink in the idle loop, a true side profile with legs that scissor, a lanyard ID badge in the agent's accent color so a team can be read off the floor, and a small gold crown on the orchestrator.

Each view's frame strip grows from 7 to 8 frames (the blink). getCastFrames takes the badge color and ThemeCast.getFrames gains the matching optional argument, so the Brooklyn Nine-Nine theme keeps working unchanged.

The second commit fixes a race the slower frame build made easy to hit: addCharacter awaits frames before registering a runtime, and the sync loop calls it for any agent without one on every store change. A second pass inside that wait built a duplicate avatar that was shown but never updated, leaving its nameplate stuck at the floor's top-left corner.

Type of change

  • Bug fix
  • New feature
  • Refactor / cleanup
  • Docs
  • Build / CI

Evidence

Both sheets show the same seven moments for Michael, Pam, Dwight, Kevin and Stanley, at the same scale. Columns: walking (front), typing at a desk (two frames, from behind), reading (front), walking left/right (two steps), idle blink. Before is rendered from main's portraitArt.ts, using the frames the floor actually plays in each moment.

Before

Before: typing and reading replay the walk, side walking reuses the front view

After

After: elbows lift while typing, a page while reading, a side profile while walking, an ID badge, and a blink

On the floor, with seven agents: the crowned orchestrator in his office, agents seated at their desks, and others walking in profile, with no stray nameplate.

The office floor with the change applied

How I tested it

  • OS: Windows 11
  • Steps:
    • npm run typecheck: clean.
    • npm run test:focused: 929 pass. The same 22 tests fail on main without this change (symlink tests that need Developer Mode on Windows, and a few others); none of them touch the office scene.
    • Rendered every cast member's frames (front, back and side strips) to a contact sheet and checked each one.
    • Ran the app on the office theme with seven agents and checked the walk-in, seated and side views, the crown, the badges, and that no stray nameplate appears after several reloads.

🤖 Generated with Claude Code

vanithamayojula-ux and others added 2 commits October 20, 2026 13:48
The floor's avatars stood stiff: no arms, the walk cycle replayed while
typing or reading, and walking left or right showed the front view.

- Hands at the sides that swing with the stride.
- Typing (hands on the keys, or elbows lifting when seen from behind)
  and reading (a page held up) frames, used by the type and read states.
- A blink in the idle loop.
- A real side profile for left/right: one eye, nose, ear, hair shaped
  from the side, and legs that scissor when walking.
- A lanyard ID badge in the agent's accent color, so a department can be
  read off the floor.
- A gold crown on the orchestrator.

Frames grow from 7 to 8 per row (the blink); every theme builds them
through getCastFrames, which now takes the badge color.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
addCharacter awaits the avatar's frames before it registers a runtime, and
the sync loop starts it for any agent without one on every store change. A
second pass inside that wait built a duplicate; the loser was shown but
never updated, so an invisible avatar left its nameplate stuck at the
floor's top-left corner. The wait is longer now that each avatar renders
24 frames, which made the race easy to hit. Track agents being built and
skip them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
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