feat(server): settings pack — 22 environment tools behind TOOL_PACKS, lean grows to 55, three groups, golden set +10

Task 24 (merge sanity) on main after the five track E groups merged.

- TOOL_PACK_NAMES = ("core", "pid", "settings"); PACK_TOOL_NAMES["settings"]
  is exactly the 22 SECTION 20 tools. Styles and page setup stay in core.
- LEAN_TOOL_NAMES += page_setup_apply, batch_plot (53 -> 55).
- _GROUP_TAG_PRIORITY / _GROUP_TAG_LABELS: "style" moved up next to "pid",
  "pagesetup" -> page_setup and "environment" -> environment added; the 28
  SECTION 19/20 decorators gain their section tag, so _tool_groups() reports
  styles 10 / page_setup 6 / environment 22 (23 groups, 204 tools) and
  pack == group == section for the settings pack.
- SECTION headers, backends/base.py composition, contracts/__init__.py
  exports and the layer_states feature entry were already correct after the
  merge (read and confirmed, nothing edited).
- Pack text: config.py, .env.example, README config row; README <sub> line
  204 tools in 23 groups; release snapshot 3259 collected tests (measured).
- docs/tool-inventory.json regenerated; registry snapshot re-derived.
- tests: test_tool_packs.py replaced (11 tests), test_capability_contract.py
  +3 (composition, the agreed capability flags, layer_states honesty),
  golden set +10 tuning cases (81 = 66 tuning + 15 holdout); all ten route
  in the top 3 without alias edits.

Deviation from the plan text: TRACK_E_KEYS carries five keys, not six. The
plan's "mleaderstyle" (ezdxf True / com False) contradicts spec §8.1, which
retracted that key because the ActiveX route exists (§4.2); measured on the
tree: capability_keys() == {boundary_trace, chspace, interactive_prompt,
live_application, preferences, revcloud, wipeout}, and
ComBackend.mleaderstyle_create is a native implementation
(backends/com_backend.py:6752, is_capability_default -> False). The test now
also asserts the key is absent.

No new ActiveX call was written in this task, so no live probe was needed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FKFStjEFzpGyLq5bMpWxTd
This commit is contained in:
Umut CAN
2026-09-22 11:35:00 +03:00
co-authored by Claude Opus 5
parent 90c1194f7f
commit 70afd57831
9 changed files with 356 additions and 126 deletions
+68 -38
View File
@@ -6,7 +6,7 @@
"tools": 204,
"resources": 8,
"prompts": 5,
"groups": 21
"groups": 23
},
"groups": {
"analysis": 12,
@@ -14,22 +14,24 @@
"blocks": 9,
"corner_ops": 4,
"dimensions": 5,
"drawing": 16,
"drawing": 11,
"engineering": 10,
"entity_creation": 18,
"entity_modification": 16,
"entity_query": 9,
"layers": 18,
"layouts": 16,
"environment": 22,
"layers": 14,
"layouts": 12,
"page_setup": 6,
"pid": 9,
"premium": 12,
"solids": 5,
"styles": 10,
"system": 14,
"templates": 4,
"system": 7,
"templates": 2,
"transactions": 3,
"validation": 1,
"view": 10
"view": 4
},
"tools": [
{
@@ -178,12 +180,13 @@
},
{
"name": "batch_plot",
"group": "layouts",
"group": "page_setup",
"cost": "mutate",
"summary": "Plot every sheet (or the named ones) to PDF; each sheet size is read back from its PDF.",
"tags": [
"export",
"layout",
"pagesetup",
"plot"
],
"annotations": {
@@ -524,11 +527,12 @@
},
{
"name": "document_activate",
"group": "drawing",
"group": "environment",
"cost": "safe",
"summary": "Switch which open document every later tool call targets.",
"tags": [
"drawing"
"drawing",
"environment"
],
"annotations": {
"title": "Activate Document",
@@ -538,11 +542,12 @@
},
{
"name": "document_close",
"group": "drawing",
"group": "environment",
"cost": "destructive",
"summary": "Close one open document by name; never drops unsaved work unless told to.",
"tags": [
"drawing"
"drawing",
"environment"
],
"annotations": {
"title": "Close Document",
@@ -551,11 +556,12 @@
},
{
"name": "document_list",
"group": "drawing",
"group": "environment",
"cost": "read",
"summary": "List the open documents: which is active, which have unsaved changes.",
"tags": [
"drawing"
"drawing",
"environment"
],
"annotations": {
"title": "List Documents",
@@ -759,11 +765,12 @@
},
{
"name": "drawing_properties_get",
"group": "drawing",
"group": "environment",
"cost": "read",
"summary": "Read the drawing's title, subject, author, keywords, comments and custom properties.",
"tags": [
"drawing",
"environment",
"settings"
],
"annotations": {
@@ -773,11 +780,12 @@
},
{
"name": "drawing_properties_set",
"group": "drawing",
"group": "environment",
"cost": "safe",
"summary": "Set the drawing's summary fields and add, change or delete custom properties.",
"tags": [
"drawing",
"environment",
"settings"
],
"annotations": {
@@ -867,11 +875,12 @@
},
{
"name": "drawing_template_list",
"group": "templates",
"group": "page_setup",
"cost": "read",
"summary": "List the five bundled drawing templates: standard, sheet, layers, styles, page setup.",
"tags": [
"drawing",
"pagesetup",
"query",
"template"
],
@@ -882,11 +891,12 @@
},
{
"name": "drawing_template_save",
"group": "templates",
"group": "page_setup",
"cost": "mutate",
"summary": "Save the current drawing as a template: .dwt on live AutoCAD, .dxf headlessly.",
"tags": [
"drawing",
"pagesetup",
"template"
],
"annotations": {
@@ -1756,10 +1766,11 @@
},
{
"name": "layer_state_delete",
"group": "layers",
"group": "environment",
"cost": "destructive",
"summary": "Delete one saved layer state from the drawing.",
"tags": [
"environment",
"layer"
],
"annotations": {
@@ -1769,10 +1780,11 @@
},
{
"name": "layer_state_list",
"group": "layers",
"group": "environment",
"cost": "read",
"summary": "List the layer states saved in this drawing.",
"tags": [
"environment",
"layer"
],
"annotations": {
@@ -1782,10 +1794,11 @@
},
{
"name": "layer_state_restore",
"group": "layers",
"group": "environment",
"cost": "safe",
"summary": "Restore a saved layer state, all properties or a chosen subset.",
"tags": [
"environment",
"layer"
],
"annotations": {
@@ -1796,10 +1809,11 @@
},
{
"name": "layer_state_save",
"group": "layers",
"group": "environment",
"cost": "safe",
"summary": "Save the layer table (on/frozen/locked/colour/linetype/lineweight/plot + current) under a name, in the file.",
"tags": [
"environment",
"layer"
],
"annotations": {
@@ -1984,11 +1998,12 @@
},
{
"name": "page_setup_apply",
"group": "layouts",
"group": "page_setup",
"cost": "safe",
"summary": "Set a sheet's paper, orientation, ctb, plot scale and device (PAGESETUP).",
"tags": [
"layout",
"pagesetup",
"plot"
],
"annotations": {
@@ -1998,11 +2013,12 @@
},
{
"name": "page_setup_list",
"group": "layouts",
"group": "page_setup",
"cost": "read",
"summary": "Read each sheet's page setup: paper, orientation, ctb, scale, device.",
"tags": [
"layout",
"pagesetup",
"plot",
"query"
],
@@ -2140,11 +2156,12 @@
},
{
"name": "plot_style_list",
"group": "layouts",
"group": "page_setup",
"cost": "read",
"summary": "List the plot style tables (ctb): the AutoCAD catalogue, plus what is installed.",
"tags": [
"layout",
"pagesetup",
"plot",
"query"
],
@@ -2358,10 +2375,11 @@
},
{
"name": "system_launch",
"group": "system",
"group": "environment",
"cost": "safe",
"summary": "Attach to the running AutoCAD or start it, optionally opening a file (live only).",
"tags": [
"environment",
"system"
],
"annotations": {
@@ -2372,10 +2390,11 @@
},
{
"name": "system_preferences_get",
"group": "system",
"group": "environment",
"cost": "read",
"summary": "Read AutoCAD preferences from the whitelist (OPTIONS dialog values; live only).",
"tags": [
"environment",
"system"
],
"annotations": {
@@ -2385,10 +2404,11 @@
},
{
"name": "system_preferences_set",
"group": "system",
"group": "environment",
"cost": "safe",
"summary": "Change one whitelisted AutoCAD preference; reports old and new (live only).",
"tags": [
"environment",
"system"
],
"annotations": {
@@ -2399,10 +2419,11 @@
},
{
"name": "system_prompt_message",
"group": "system",
"group": "environment",
"cost": "safe",
"summary": "Print a message on AutoCAD's command line (live only).",
"tags": [
"environment",
"system"
],
"annotations": {
@@ -2465,10 +2486,11 @@
},
{
"name": "system_variable_describe",
"group": "system",
"group": "environment",
"cost": "read",
"summary": "Explain a system variable: type, range, default, where it is saved, which engine honours it.",
"tags": [
"environment",
"settings",
"system"
],
@@ -2633,10 +2655,11 @@
},
{
"name": "ucs_list",
"group": "view",
"group": "environment",
"cost": "read",
"summary": "List the user coordinate systems, with the implicit world one.",
"tags": [
"environment",
"view"
],
"annotations": {
@@ -2646,10 +2669,11 @@
},
{
"name": "ucs_restore",
"group": "view",
"group": "environment",
"cost": "safe",
"summary": "Make a saved UCS current, or `world` to reset to WCS.",
"tags": [
"environment",
"view"
],
"annotations": {
@@ -2660,10 +2684,11 @@
},
{
"name": "ucs_set",
"group": "view",
"group": "environment",
"cost": "safe",
"summary": "Define (or replace) a named UCS from an origin and two perpendicular axes, and make it current.",
"tags": [
"environment",
"view"
],
"annotations": {
@@ -2674,10 +2699,11 @@
},
{
"name": "user_pick_point",
"group": "system",
"group": "environment",
"cost": "read",
"summary": "Ask the operator to pick a point on screen (live only; blocks until they do).",
"tags": [
"environment",
"system"
],
"annotations": {
@@ -2687,10 +2713,11 @@
},
{
"name": "user_select",
"group": "system",
"group": "environment",
"cost": "read",
"summary": "Ask the operator to select one entity or a set on screen (live only).",
"tags": [
"environment",
"system"
],
"annotations": {
@@ -2714,10 +2741,11 @@
},
{
"name": "view_named_list",
"group": "view",
"group": "environment",
"cost": "read",
"summary": "List the named views saved in this drawing.",
"tags": [
"environment",
"view"
],
"annotations": {
@@ -2727,10 +2755,11 @@
},
{
"name": "view_named_restore",
"group": "view",
"group": "environment",
"cost": "safe",
"summary": "Restore a named view.",
"tags": [
"environment",
"view"
],
"annotations": {
@@ -2741,10 +2770,11 @@
},
{
"name": "view_named_save",
"group": "view",
"group": "environment",
"cost": "safe",
"summary": "Save a named view: a centre and height (and width) to come back to.",
"tags": [
"environment",
"view"
],
"annotations": {