File size: 7,696 Bytes
9c9a58f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Plugin and task-service map

Source-level finding F23, 2026-10-21. Baseline is `2016-03-10-c`; member identities, includes, literal expressions, callback registrations and line anchors are in [source-map.json](../assets/analysis/source-map.json). [PLUGIN_INDEX.md](PLUGIN_INDEX.md) lists every observed `initTool` call site/name. These are static declarations and calls, not a measured runtime registration trace.

The latest distribution contains **17 top-level plugin sources**, **5 experimental sources**, **9 task-client includes**, **10 utility/misc includes**, **5 Core includes**, and **1 model generator**: 47 IXPL files in total. There are 201 `initTool` call sites in plugin/experimental sources, with conservatively resolved source names: 194 in top-level plugins and 7 in examples. They include service/internal tools; they are not 201 distinct user-facing commands or proof that all tools are active simultaneously.

## Top-level modules

| Plugin source basename | Responsibility visible in source | Main dependencies / port boundary |
| --- | --- | --- |
| `camera` | Camera controls, fly/navigation tools, camera panel and stopped notifications | Core camera/view services; Camera task clients |
| `grid` | Grid panel/settings/presets, cursor and update notifications | Core-Grid, raycast, camera and projection services |
| `projections` | Projection controls, saved memories and change notifications | Core view/projection services and task clients |
| `Mb3 main editing tools` | Main editing toolbox and modal operations | World/grid APIs, grid/camera/raycast/log helpers |
| `Mb3 render modes` | Six rendering mode selections, toolbar/view synchronization | MB3 per-view render settings and ViewEvents |
| `view layouts` | Six viewport layout presets and toolbar | View geometry/lifecycle APIs; shared-world views |
| `main menu` | New/load/save/export/world workflows, native dialogs and converter process calls | Core/WorldController/ViewEvents/Log and conversion BAT files |
| `world controller` | World registration, view clone/close policy and events | Core view lifecycle, task priorities, ViewEvents |
| `view events` | Fan-out of created/cloned/closing/closed notifications | Named task protocol; no rendered UI required |
| `raycast` | Raycast request/reply adapter returning position/normal | Core intersections and selected-brush plane access |
| `task priorities` | Ordered task-name/priority lookup | Config records and task buffers |
| `plugins menu` | Collect plugin menu entries and dispatch selected callbacks | PluginsMenu and TaskPriorities protocols |
| `Mb3 plugins` | Shortcut palette opening editing/render-mode toolbars and other panels | Named tools and plugin-menu registration |
| `GUI layout designer` | Interactive GUI construction/layout tooling | Widget APIs, config, log/help/menu utilities |
| `log` | Log registrations/messages and log UI | Core GUI, settings and typed task messages |
| `notes` | Notes window and settings/lifecycle behavior | GUI/config/log/plugin-menu helpers |
| `window controls` | Window interaction instructions/shortcuts | Core UI/window services |

The two plugin-menu/palette modules are not evidence of an implemented dynamic loader API. Actual `.plugin` discovery, load order, runtime isolation, unload behavior and error containment still belong to host investigation.

## Named task protocols

All nine client includes use a named `!interface` tool, a discriminant in `bufI`, and other typed buffers as needed. See `data/sources/include/tasks/` in the machine report.

| Endpoint | Client request / response shape | Source-level concern |
| --- | --- | --- |
| `camera.!interface` | Register client tool ID and handler index; return handler index | Fires when a continuous camera transformation stops, according to source comment |
| `grid.!interface` | Register client tool ID and handler index; return handler index | Grid cursor/look-at updates |
| `projections.!interface` | Register client tool ID and handler index; return handler index | Projection-settings changes |
| `log.!interface` | Register a log handle and post messages through task buffers | String/integer-buffer conversion and message ownership need runtime tests |
| `pluginsMenu.!interface` | Register caption plus callback target/index; toggle/toggle-at; click response | Registration collection is scheduled through task priorities |
| `raycast.!interface` | Request `[0, replyTool, pastNearClip]` + two vec3s; response `[0, hit]` + hit point/normal if hit | One client callback slot; host path can temporarily alter selection |
| `taskPriorities.!interface` | Request `[0, replyTool] + name`; response `[0, priority]` | Missing service replies synchronously with 0; configured names use first-match lookup |
| `viewEvents.!interface` | Register listener, notify created/cloned/closing/closed; fan out IDs | Closing and closed are separate phases |
| `worldController.!interface` | Register first view of a new world | Applies background color and publishes a created event |

For camera/grid/projections, source helpers store callback plus a tag and send a zero-based handler index to the provider. Negative/invalid indices, malformed payload buffers, lifetime and concurrency rules remain unspecified. In particular, do not assume these helpers validate every incoming buffer.

## Registration and lifecycle

`Akula.ixpl:988–1034` shows that `initTool` fills press/release/abort/task callbacks and integer tags; `initPackage` stores a tool list; `registerPackage` iterates it and calls `registerTool`. Static blocks register packages and runtime callbacks. Core version validation is also in a static block.

Most UI plugins register all-loaded initialization and finalization saves. Grid/projections/render modes also register view-selected handlers; editing tools register view-mouse-move and camera-tick handlers. Core comments say `selectView` itself does not trigger view-selected notification and tasks cannot be queued from static blocks. A Rust event model must represent these distinctions explicitly.

`world controller.ixpl:96–100,137–150` publishes “closing”, queues a task with the configured priority, then closes the view and publishes “closed” when that task is handled. Resource cleanup cannot assume the initial close request is the actual destruction point.

`raycast.ixpl:40–61` temporarily selects an unselected hit into the main set to read its plane, then deselects via another ray call. This is an observed source sequence, not a reproduced visible selection bug. It is a focused equivalence test for a future side-effect-free Rust picking implementation.

## Experimental modules

`extra stuff/readme.txt` labels these unfinished/experimental and describes manually copying source into the top-level plugin directory before compilation and adding a binding.

- `AAA_bevel`: ray-targeted bevel helper; geometry behavior and numerical limits remain open.
- `AAA_lego`: procedural brush construction example, registering `Lego.!interface`.
- `AAA_patchtest`: curved-patch construction experiment, registering `Patchtest.!interface`.
- `AAA_blank` and `AAA_blank (2)`: extension templates. Both declare the same `Blank.!interface` name; do not assume they can be enabled together without a name collision.

Native functionality and third-party compiled-plugin compatibility remain separate product decisions. No IXPL VM/compiler or Rust plugin system is selected by this mapping pass.

Next: P4.04/P4.05 lifecycle and protocol experiments, P4.08 module behavior specifications, and P7 complete tool state machines. The index maps registration/call dependencies without closing those parity tasks.