Skip to content

feat(core): expose property tools through automation and record runs#17

Merged
nmrtist merged 1 commit into
mainfrom
feat/property-tools-and-audit-records
Jul 26, 2026
Merged

feat(core): expose property tools through automation and record runs#17
nmrtist merged 1 commit into
mainfrom
feat/property-tools-and-audit-records

Conversation

@nmrtist

@nmrtist nmrtist commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Property edits become automation tools, and every run that is not a person's
leaves a record behind.

Property tools

properties.inspect, properties.set and properties.reset are registered in
the existing ToolRegistry. They reuse ToolRequest, EffectLevel, authority,
target compatibility, optimistic concurrency and the run manifest; no second
compatibility, plan or audit type was added.

The JSON adapter only decodes. It turns a wire value into the typed value the
planner accepts, checks it against that property's own schema, and names both
the value it was given and the limit that rejected it. Planning, target
resolution and committing all go to properties::service — the same planner the
object inspector calls — so the two entry points cannot drift apart on what a
value means or which targets accept it. An integration test drives both paths
with the same input and compares the resulting document state field by field.

Component targets

PlannedTarget and TargetResult now carry a TargetRef, so a property tool
expands one plot object into one target per series and each result row names the
series it belongs to. Every existing tool keeps addressing whole resources; a
test pins the planning output of all twelve unchanged.

Run records

  • A tool call that does not come from a person is recorded, single calls
    included, not only calls made from inside a workflow.
  • Appending a record marks the document dirty. It previously changed the
    document without doing so, so a project could be closed as clean and silently
    lose the record it had just been promised.
  • A single data.transform call now carries the same table revisions and plans
    that a workflow node records.
  • An export that fails part way records the files it had already written instead
    of discarding that evidence along with the error.

TargetResult changes shape, so a project saved with earlier run records will
no longer load. PlotX is pre-release and keeps no compatibility path for its own
file format.

Automation window

A tool's result value is shown below the per-series rows. Without it
properties.inspect reported success and displayed no readings at all.

Known limit

A tool returns before its background geometry job settles, so when the render
budget drops contour levels that diagnostic has no way to reach ToolResult.
This is a limit of the tool contract rather than a missing wire, and a test pins
the current behaviour so it is not mistaken for fixed.

Verification

cargo pr-check passes, including the dependency policy. Documentation for the
automation window, contour levels and the command palette is updated in English
and Simplified Chinese, and npm run build in docs/ completes.

Register properties.inspect, properties.set and properties.reset in the tool
registry so agents, workflows and the command line reach the same planner the
object inspector uses. The JSON adapter decodes each value against the
property's own schema and then delegates planning and committing to
properties::service, so the two entry points cannot drift apart on what a
value means or which targets accept it.

Planned and resulting targets now carry a TargetRef, letting a property tool
expand one plot object into one target per series while every existing tool
keeps addressing whole resources unchanged.

Record a run manifest for every tool call that does not come from a person,
single calls included, and mark the document dirty when one is appended so the
record cannot be lost on exit. A single data.transform call now carries the
same table provenance a workflow node records, and an export that fails part
way still records the files it had already written.

Show a tool's result value in the automation window; without it an inspect
call reported success and displayed no readings at all.
@nmrtist
nmrtist merged commit de40965 into main Jul 26, 2026
11 checks passed
@nmrtist
nmrtist deleted the feat/property-tools-and-audit-records branch July 26, 2026 00:18
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 26, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant