Download docs/DEPENDENCIES.md from nmarshall/nanobrush: direct link, hf CLI and curl.
- Browser
- Download file 6.62 kB
-
https://huggingface.co/nmarshall/nanobrush/resolve/main/docs/DEPENDENCIES.md
- Command line
-
hf download hf://nmarshall/nanobrush/docs/DEPENDENCIES.md
-
curl -L -o DEPENDENCIES.md https://huggingface.co/nmarshall/nanobrush/resolve/main/docs/DEPENDENCIES.md
Dependency and build map
Source-level finding F22, 2026-10-21. Baseline paths are relative to assets/references/extracted/2016-03-10-c/. All five builds are indexed in source-map.json; source hashes and line anchors accompany each edge.
Compile-time include graph
tools/includePaths.txt declares five search directories relative to tools: data/sources/include/core, include/IXPL, include/IXPL/general, include/IXPL/files, and include. The index additionally considers a source-local file candidate. Actual compiler search precedence is unmeasured.
| Build | IXPL files | Include directives | Missing or ambiguous candidate sets |
|---|---|---|---|
| 2015-10-03 | 42 | 91 | 0 |
| 2015-11-15 | 42 | 91 | 0 |
| 2015-11-24 | 42 | 91 | 0 |
| 2015-12-08 | 43 | 96 | 0 |
| 2016-03-10-c | 47 | 118 | 0 |
Every directive has exactly one existing candidate in this corpus. This establishes source closure under the stated candidate policy, not successful compilation. The index retains direct/transitive include edges and plugin-qualified Core method references; virtual calls, branches and dynamic handler invocations are not a typed execution graph.
Build and execution boundaries
flowchart TD
Start[First-start BAT] --> ModelBuild[IXPL cxo model build]
Start --> PluginBuild[IXPL cso plugin build]
ModelBuild --> IXM[Generated models/ixm]
PluginBuild --> Plugin[Generated plugins/plugin]
Editor[Native editor / Akula host] --> Plugin
Editor --> IXM
Plugin --> API[Core interrupt APIs]
Plugin --> Tasks[Named task interfaces]
Menu[Main-menu plugin] --> Batch[Conversion BAT wrappers]
Batch --> Converter[Managed file-formats tool]
Converter --> DAT[MB3 DAT intermediates]
Editor --> DAT
Arrows represent source/build dependencies, not a measured temporal load order.
The first-start script compiles top-level model and plugin sources before moving the editor executable to the archive root. Model BAT wrappers use IXPL.exe cxo <source> <output.ixm>; plugin wrappers use cso <source> <output.plugin>. Top-level build all.bat enumerates only *.ixpl in its current directory; experimental sources in extra stuff/ require manual promotion. The runtime plugin enumeration and exact ordering are still host implementation questions.
GPU configuration BAT files only switch the presence of root ATI.ix-workaround-marker / NVIDIA.ix-workaround-marker; they do not themselves run a graphics probe or modify shader source. The cache-clear BAT deletes data/shaders/*.cache. Sources: the two configure scripts and clear shader cache.bat, all lines 1–3.
The three EXEs are separately inventoried native-editor/managed-tool artifacts, as recorded in F03. E01 did not identify PE imports, CLR target versions, external DLL resolution or executable resource tables. E02 now maps both converter assemblies: .NET Framework 4.0, PE bootstrap import mscoree.dll!_CorExeMain, references to mscorlib/System/System.Core 4.0.0.0, no managed resources or P/Invoke entries, and successful unmodified Mono 6.14.1 execution on ARM64 macOS. See F24 and E02. Editor and IXPL compiler executable dependencies remain open. The historical Wine/.NET recipe remains reported evidence.
File/resource edge classification
The machine index records a literal expression and same-name archive candidates for config/text/texture/process/world-file calls. It keeps dynamically computed names unresolved. Same-name matches are candidate dependencies, not proof of host path resolution.
| Resource family | Observation | Disposition |
|---|---|---|
| Plugin settings | Most literal CFG names have bundled settings files | Map consumer rules and generated saves before porting |
main menu.cfg |
Requested by main menu.ixpl:261,301, absent in the latest archive |
Optional/generated settings candidate; loader declaration says missing config is silent, not automatically a startup failure |
| Three icon atlases | Calls request names without the shipped 56 suffix |
Loader naming rule unresolved; retain both requested and shipped names |
conversion.log, load.mb3dat, save.mb3dat |
Absent as archive members but created/used by conversion workflows | Expected generated intermediates, not missing distribution downloads |
content textures/index.cfg |
Named by root MB3 config but absent | External/optional content dependency; effect unknown |
| SIL font notice | ReadMe names a file absent from every ZIP | Unresolved provenance/redistribution requirement |
| Compiled plugins/models/shader caches | No regular compiled plugin/model samples bundled | Generated build/runtime products; keep separate from immutable sources |
The source map does not classify every literal as a resource. Translation keys, tool names and help text are separate domains. It also does not treat a missing exact-name candidate as proof of an error.
Version differences
Adjacent builds change as follows (regular paths; byte hashes):
| Transition | Added | Removed | Changed same-path files |
|---|---|---|---|
| October 3 → November 15 | 0 | 1 | 8 |
| November 15 → November 24 | 1 | 0 | 8 |
| November 24 → December 8 | 1 | 0 | 24 |
| December 8 → March 10-c | 21 | 7 | 72 |
No adjacent transition has an identical-byte removed-to-added rename candidate. The latest has several identical-copy candidates for minimal main.shown=false settings, which do not imply a shared implementation or semantic equivalence. The older Mb3 tools and base-window modules change names/content and need semantic comparison. The report records hash identity separately from same-basename candidates.
Native rewrite dependency cuts
- Specify Core/world/grid semantics independently of Akula's original execution engine.
- Replace BAT/process conversion with native codecs and isolated CLI tools.
- Replace cursor/model generation with deterministic native geometry after IXModel contracts are validated.
- Port bundled plugin functionality into Rust modules/services; decide third-party IXPL compatibility separately.
- Keep preferences, view state, document data, derived meshes and task messages distinct.
- Validate missing-resource fallbacks and plugin service ordering before promoting source declarations to runtime contracts.
Next: P2.11 resource lookup semantics and semantic version diffs; P3.06 executable dependencies; P4.04/P4.05 lifecycle; P9 shader/asset integration. No target-native Rust implementation is introduced by this pass.