Skip to content

properties: copy the path, and copy the call that would set it - #122

Open
zmaril wants to merge 1 commit into
commands/pollfrom
properties/context-menu
Open

properties: copy the path, and copy the call that would set it#122
zmaril wants to merge 1 commit into
commands/pollfrom
properties/context-menu

Conversation

@zmaril

@zmaril zmaril commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Stacked on #121. Second of the Blender-review sequence — with two corrections to my own review.

Blender's property right-click has Copy Data Path, and it's there because the gap it closes is real: you're looking at a thing and you need the words that address it. Blender's words are Python. Ours are a JSON pointer and the command that writes it — which is the sentence someone hands an agent.

What's new

Field menu gains Copy data path (/accent) and Copy as command:

set_setting {"pointer":"/accent","value":"#5680c2"}

Info log rows gain a menu. Blender's Info editor shows every operator as the Python that ran it — that's what makes it more than a receipt, you can copy a line out of the log into a script. A row now copies as:

workspace_add {"name":"x"}

The MCP tool spelling, because the point is to paste it where an agent reads. tool_name moved out of the parity test to do it, so the spelling rule the test checks with is the one the UI shows. There's a test that every command's copied form names a tool the server actually answers.

Both go through the clipboard action the menu shim already had, so neither costs a message and neither needed a new mechanism.

Correction 1: reset-to-default already existed

I listed it as a gap in my review. It's been there since the widget kit landed — Field.default plus a "Reset to default" row. My mistake.

What was missing: /theme was the one field with no default, so it alone had no reset row. Fixed.

Correction 2: writing the test for that found a real bug

/diff_split was offered in Preferences and absent from the settings document entirely. So it had no default to reset to, and every reader guessed one (.unwrap_or(false) in three places). Now declared.

The test holds field defaults and document defaults together:

/diff_split is not in the settings document

That's the drift that makes a reset button quietly reset to a value the daemon has never used — a control that looks like it works.

168 tests pass; fmt clean, clippy clean under -D warnings, docs/reference.md regenerated.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XjCx5QszLXroGYh1YBxybw

@github-actions

Copy link
Copy Markdown

powderman preview

https://powderman-pr-122.fly.dev

The workbench, live: split/join/swap areas, the F3 palette, the widgets, themes, tooltips, the status bar.
The fleet and run execution are inert here (a Fly machine has no herdr) — this is for driving the interface.

On branches with the MCP server, point an agent at it:

claude mcp add --transport http powderman-preview "https://powderman-pr-122.fly.dev/mcp"

Updated on every push. Destroyed when this PR closes.

Blender's property right-click has Copy Data Path, and it is there because
the gap it closes is real: you are looking at a thing and you need the
words that address it. Blender's words are Python. Ours are a JSON pointer
and the command that writes it — which is the sentence someone hands an
agent, so this is the most powderman-shaped thing on the Blender review.

A field's menu gains Copy data path and Copy as command. Both go through
the clipboard action the menu shim already has, so neither costs a message
and neither needed a new mechanism.

The Info log gets the other half. Blender's Info editor shows every
operator as the Python that ran it, which is what makes it more than a
receipt — you can copy a line out of the log into a script. A row now
copies as `workspace_add {"name":"x"}`: the MCP tool spelling, because the
point is to paste it where an agent reads. `tool_name` moved out of the
parity test to do it, so the spelling rule the test checks with is the one
the UI shows.

Two corrections to my own review. Reset to default already existed — I
listed it as missing and it has been there since the widget kit landed.
What was missing is that `/theme` was the one field without a default, so
it alone had no reset row.

Writing the test for that found a real one: `/diff_split` was offered in
Preferences and was not in the settings document at all, so it had no
default to reset to and every reader guessed one. Now the test holds the
field defaults and the document defaults together, which is the drift that
makes a reset button quietly reset to a value the daemon never used.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XjCx5QszLXroGYh1YBxybw
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