Repository navigation
🛡️ Sentinel: [CRITICAL] Fix Path Traversal in Lua list_files - #294
Conversation
…ility in the Lua file listing logic.
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 4 |
| Duplication | 0 |
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
…sal vulnerability in the Lua file listing logic.
* 🛡️ Sentinel: [CRITICAL] Fix Path Traversal in Lua list_files (#294) * I am addressing the Sentinel alert to fix the path traversal vulnerability in the Lua file listing logic. * I have resolved the Sentinel security alert by fixing the path traversal vulnerability in the Lua file listing logic. * Perf opt gamehooks 11443369995706449354 (#295) * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * Fix compilation error: safely TryCast INetworkEndpoint to specific components * chore: merge all branches to dev (menus, shop, patches, SDKs, HotLoad, fixes) * feat: consolidate GregCore integration and release flow Integrate the reviewed security and performance changes, establish bounded runtime services, add contributor and maintainer documentation, and enforce the dev to pre-release to main promotion model. * docs: record branch consolidation and cleanup Document the chronological branch audit, retained promotion branches, and rejected changes from redundant automation proposals. * refactor(multiplayer): remove custom networking stack Keep the legacy Rust FFI v7 table layout stable while making its Steam and P2P slots inert. Document the native Unity/Data Center/Steamworks boundary from the local reference assemblies. * docs(changelog): record integration commit history Record the native multiplayer removal and the preceding branch/release integration commits in the Keep-a-Changelog ledger. * chore: remove obsolete FishNet agent instructions The native Data Center co-op boundary supersedes the former FishNet design guidance. * docs(changelog): record FishNet guidance cleanup Record the obsolete agent-instruction cleanup in the commit ledger. * feat(ui): Tasten-HUD und zentrales F1-Mod-Hub - GregHudRegistry/GregHud: Hotkey-Leiste am rechten Rand (HUD-Layer) - GregModHub (F1): Mod-/Menue-Liste mit Oeffnen-Buttons (Click-Routing) - GregMenuRegistry: RegisterOpener/TryOpen/Snapshot (+MenuInfo) - F1-Tick in GregCoreMod.OnUpdate * feat(mods): ModPackConfig-Erweiterung + ModItemSaveData-Persistenz - GregModPack: Builder und typ-sicherer Reader (Snapshot) fuer ModPackConfig/ShopItemConfig/StaticItemConfig/DllEntry - GregModSave: DTO plus Create/Fill/Read/Upsert/Remove fuer ModItemSaveData (SaveData.modItemData, Key modFolderName) * feat(mods): Custom Items via Vanilla-ModLoader laden - GregObjImport: validierter .obj-Import (Endung, Existenz, Traversal-Schutz, 64MB-Limit, Vertex-Check) - GregCustomItems: RegisterShopItem/RegisterStaticItem aus DTO + Pack-Ordner (Mesh-Vorabcheck), GetPrefab per Folder-Name * feat(net): Networking-Batch (PatchPanels, SetIP, ServiceRequests, Server) - GregPatchPanels: Save-DTO + Runtime-Brücke (Capture, InsertIntoRack, FindAll/ById, Cable-/Rack-Checks) - GregSetIP: Keypad-Fund, Subnetzmathe (Vanilla + Fallback), Show/Cancel - GregServiceRequests: Save-Snapshot, AddRequest/LoadFromSave/RebuildUI, ServiceRequestRow-Helfer - GregServers: ServerSaveData-DTO + Aktionen (SetIP, Power, Customer/App, Repair, Warning) * feat(net): Save-DTOs fuer Netzwerk-Devices (Batch A.1) Router (Routen/Subnetze), Firewall (Filterregeln), SFP, LACP (Upsert), Kabel + Endpunkte (Upsert), Link-Labels, Port-VLAN-Filter. * feat(net): Save-DTOs fuer Kunden + Wirtschaft (Batch A.2) CustomerBase (Upsert per ID, Dict-/Array-Brücken), CustomerRecord, MonthlySnapshot, BalanceSheet. Dazu Bool-Arrays in GregModPack. * feat(net): Save-DTOs fuer Jobs + Interacts (Batch A.3) Technician, RepairJob, InteractObject (Upsert per uid). Ctor-Hinweis: Technician-/InteractObjectData brauchen Vanilla-Live-Objekte (null best-effort). * docs: CHANGELOG fuer Save-Batch A * feat(net): Live-Brücke für Router + Firewall (Batch B.1) Finden per switchId, Subnetze/Routen verwalten, Regeln verwalten, Cluster-Sync, Traffic-Check. * feat(net): Live-Brücken für SFP, Rack und Templates (Batch B.2) SFP-Module/Box, RackTür/Mount, RackTemplateStore + Applier (Il2Cpp- Coroutine-Pumpe). Mount-templateId existiert runtime-seitig nicht. * feat(net): Shop-Brücke + nativer ColorPicker (Batch C) ShopItemSO/ShopItem/ShopCartItem/ModShopItem lesen und bedienen, FlexibleColorPicker öffnen/Farbe setzen/lesen/abbrechen. * feat(net): Objectives, CIDR-Helper, Device-Timer (Batch D.1) * feat(net): Customer-Brücke live (Batch D.2) Finden per customerID/baseID, Base-/Item-DTOs, IP-Lookup, Routed- Subnets, LoadData-Brücke, CustomerCard. * feat(net): Coop-Brücke (Batch E) Session, Peers/Avatare, Held-Items, Loose-Items, Trolley-Ghosts, Chat. * feat(mods): Abhängigkeits-Gating + Manifest-Diff für ModSync Declare/EnsureLoaded/CheckAll (Mindestversionen), GetLocalManifest/ DiffManifests/FormatDiff für Coop-Vergleich. 12 neue Unit-Tests. * feat(net): Rack- und Trolley-Brücke (Batch F) Rack-Positionen prüfen/markieren, RackPosition per UID, Trolley-Bays, Wandcheck, CarryModelPool. Coroutine-Pumpe assembly-intern geteilt. * feat(net): Kabel-Brücke live (Batch G) Finden (alle/switchId/Typ), LinkInfo-DTO, Speed setzen, SFP rein/raus, Second-/Label-Action, Rope-Anker. CableIDComponent ohne öffentliche Member — ausgelassen. * feat(net): Techniker-Brücke (Batch H) Finden/lesen, reparieren, Jobs zuweisen, Manager (senden, feuern, Queue-Restore), HR-Dialoge. * feat(net): Internet- und Dienst-Brücke (Batch I) Internet-Endpunkte, CommandCenter (Level, AutoRepair, Up-/Downgrade), Angriffs-Manager. * feat(net): Angriffs-Eskalation über Zeit (Stufen) Intervalle kürzer, Spawn-Rate/Speed höher pro Stufe (Vanilla-Basis wird gelesen). 4 neue Unit-Tests. * 🛡️ Sentinel: [HIGH] Fix path traversal in io.list_files() * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * feat(net): Numpad-Brücke (Batch J) Zahl lesen, Tasten drücken (Ziffern, OK, Del, Clear, Copy, Paste). * feat(net): Steam-Leaderboards-Brücke (Nische N.1) * feat(net): Spiel-Lautstärken-Brücke (Nische N.2) * feat(net): Localisation + Vanilla-Tooltips (Nische N.3a) * feat(net): PauseMenü-Callbacks + Tutorials (Nische N.3b) * feat(net): Tore/Wände + Steam-Lobby/Avatar (Nische N.3c) * chore: Claude-Lokaleinstellungen nicht versionieren * feat(ci): CI von GitHub auf Forgejo/Gitea umstellen - .github/workflows entfernt, Workflows nach .forgejo/ und .gitea/ verschoben - mirror-github.yml für den GitHub-Mirror ergänzt * feat(quality): Codacy CLI und Konfiguration ergänzen * refactor: Quellbaum in gregCore.*-Assemblies umbauen - Monolith-Layout durch projektbasierte Assemblies gregCore.* ersetzt - lib/MoonSharp und lib/references entfernt (NuGet bzw. references/) - ci-stubs, mods-Payload und unknown_hooks.json entfernt - references/ als Symlinks auf Game-Installation + README - IGregAPI.Version auf 1.2.3, Hook-Counts auf 1850 angehoben * build: Release-Basisversion 1.2.3 setzen - VERSION auf 1.2.3, Dev-Builds stempeln weiter -dev.0 - build.sh Dual-Profil Release 1.2.3 / Debug 1.2.3-dev.0 * chore(scripts): Mirror-Sync-Skript und Skript-Doku * docs: README/CHANGELOG/Architecture und Governance finalisieren - Offene-Source-Doku für den 1.2.3-Release abgeschlossen - Steam-Workshop-Profil in den README-Links ergänzt - Branch-Protection, INDEX, ARCHITECTURE, CODE_OF_CONDUCT, SECURITY * test: GameApiGenerator, Coverage-Tools und neue Tests - GameApiGenerator + regenerate Scripts unter tools/ - check-coverage.sh und coverage-baseline.txt - neue Unit-Tests (GameApiRegistry, RamAlert, DemandPlanner) und tests/README * fix: Save-Sanitize berührt Singleton im Hauptmenü nicht mehr LoadGame-Postfix nutzt das zurückgegebene Save; void-Einstiege nur in Spiel-Szenen (Menü-Vorschaudaten brauchen kein Sanitize). * feat(ui): Menü-Closer + ehrliche Hub-Buttons - RegisterCloser/TryClose, HasCloser im Snapshot - Hub: Schließen nur mit Closer, interne greg.*-Menüs ausgeblendet * feat(ui): DevConsole mit Unity-Log-Feed - Subscribed Unity-Log (Fehler/Warnungen aus Spiel + Mods), Thread-sicher queued, Anzeige im Update, Duplikat-Schutz - Menü-ID greg.console für Input-Lock * feat: save inventory with stable invisible UIDs for mods GregSaveInventory inventories everything in the save on load (servers, switches, routers, firewalls, patch panels, cables, SFP modules, LACP groups) and tags each entry with a stable UID invisible to the player. Server/switch/patch-panel reuse their gregID; cables/LACP derive deterministic UIDs from vanilla IDs; router/firewall/SFP persist via sidecar (greg_inventory.<save>.tsv) with index-shift repair via hints. Mods resolve entries directly (TryFindLive/TryGetUid/GetAll/Rebuilt). Hooked into the load path via LoadNetworkState postfix in GregSaveGuard. Tests: 18 new cases (pure helpers), full suite 135/135 green. * feat: entity inventory display split, control surface, rename - Rename GregSaveInventory -> GregEntityInventory (user vocabulary). - Display/persistence split: gameObject.name stays vanilla, ServerID/ switchId/patchPanelId keep the persistent gregID; screen-scrub postfixes replace leaked gregID tokens with the vanilla designation (Server.UpdateServerScreenUI, NetworkSwitch.UpdateScreenUI). - Control surface: MelonPreferences gregCore.EntityInventory (Enabled/VerboseLogging/DumpOnRebuild) plus Dump() and Verify(). - Tests: ScrubGregIds/CleanDisplayName cases, suite 144/135 green. * refactor: Hardware-IDs als eigenstaendiges Single-Scheme-System - Keine Fremd-Schema-Adoption mehr: genau ein stabiles Schema (gregID), alles andere wird exakt einmal ueberfuehrt (live + Save-Healing). - CleanId nur fuer numerische GetInstanceID-Suffixe, Null-Guards pro Healing-Eintrag, Log-Dedup per ID-String, [gregCore][HwId]-Logs, Idpatch-Typo korrigiert. * feat: 404-PersistentID-Mod bei Erkennung automatisch entpatchen IncompatibleModGuard (Name-/Assembly-Erkennung, UnpatchSelf) laeuft bei Mod-Init und Szenen-Laden; Log-Warnung + Toast einmal pro Sitzung. gregID bleibt damit garantiert das einzige ID-System. * refactor: Hardware-ID-System sichtbar als eigene Implementierung Greg*-Patch-Klassennamen, Startup-Kennung im Log, eigene Doku (docs/modding/hardware-ids.md) + README-Eintrag. * refactor: HwId system fully in short English Logs, comments, docs, README and changelog in English; startup line: HWID SYSTEM ACTIVE. * refactor: shorten all HwId logs, keep them informative * feat: Hub/SettingsHub-Ausbau und Mod-Autoren-Doku (modding/) * fix: codacy codeline limits for entity inventory Split GregEntityInventory into three partial files (API, collectors, codec/config) and slim RebuildFromNetworkData via FreshData + CollectAll/PublishFresh helpers. Extract PatchLoadNetworkState from GregSaveGuard.Install. No behavior change (build clean, 144/144 green). * fix: codacy empty-catch findings with documented rationale Add ignore comments to all bare catch blocks in PR scope (defensive best-effort per CONVENTIONS.md). Comment-only change, no behavior change (build clean, 144/144 green). * fix: codacy trivial findings batch (overloads, properties, comments) Overload chains instead of optional parameters (GregAPI, proxies, ModConfigSystem getters/setters); DTO public fields to auto-properties (source-compatible, no serialization impact); empty-method and switch fixes; const to static property; discard without unused local; field init. Verified hunk-by-hunk, foreign work untouched (build clean, 144/144 green). * fix: codacy empty-catch comments, batch 2 (comment-only) Same documented rationale as previous batch. Verified pure comment diffs (added == deleted == marker count); files with foreign work-in-progress excluded. * fix: codacy long ctor (GameAPIManager 256 lines split) Split delegate wiring into Bind*/FillTable* helpers (all under 30 lines), drop readonly where helpers assign (logger stays readonly). Generated mechanically from exact source lines, order preserved. Build clean, 144/144 green. * fix: codacy method/file findings batch (extractions, splits) GameAPIManager ctor, ModConfigSystem lifecycle/intercept/parse building blocks, RustFFI table binding, TechnicianHiring flow split into small helpers; ModConfigSystem and GregNetworkDeviceSaves split into partials; SliderOptions replaces 9-param overload; AGENTS.md link fixed. No behavior change (build clean, 144/144 green). * fix: codacy long InteractOnClick postfix split Pickup/drop flow extracted into small helpers (identity resolve per device family, rack-uid coalesce via shared UsableObject properties, stable-id apply). No behavior change (build clean, 144/144 green). * fix: codacy long rack/worldsync methods split MarkPositionAsUsed postfix and ProcessNewObject extracted into small helpers (identity resolve per family, rack-uid coalesce, record/fire). No behavior change (build clean). * docs: Modding-Guide auf Stand (PortSpeedMemory, RGB-Animator, Bulk-Snapshot, FAQ) * feat: entity-inventory Kompatibilitaet * feat: entity-inventory und Networking-Saves (WIP-Stand) * feat: GregMenuBinding, GregShopItems primitives, GregHost template + docs * feat: complete Greg.LUA SDK for complex mods New: greg.switch (mirror of server), greg.tech (technicians), greg.config + greg.save (JSON file-backed per-mod stores), greg.json (parse/stringify). Extended: server (power/ip/customer/find/get_list), io aliases (read_text, write_text) + read_json/write_json. Fixed io double-data-dir quirk with lossless migration. Crash-safe logging for headless/test contexts. Docs rewritten to exact implementation, fleet_doctor showcase example. Tests: 9 headless Lua SDK cases, suite 153/153 green. * docs: shop-items adoption note (standalone vs hard dep) * docs: hard-dependency playbook with per-mod verdicts * feat: LUA covers framework (patch/customer/economy/shop/net/mods/tablet/subnet/requests/items) New greg.* tables for patch panels, customers, economy (read-only), shop (catalog/unlock/buy/cart), network save data (read-only), mod registry/deps, tablets/widgets with Lua callbacks, subnet math, service requests, custom item registration. world.open_all_walls. Docs match implementation exactly. Tests: 21 headless Lua cases, suite 165/165 green. * feat: LUA tech extended + coverage gaps closed tech.list/send_to_server/send_to_switch/hire/fire via GregTechnicians (ID-based resolution); doc updated. Suite 165/165 green. * feat: LUA modsave module (per-save mod data) greg.modsave.list/upsert/remove against SaveData.modItemData with manual Vector3/Quaternion mapping. Completes the Lua persistence story (file-backed greg.save + save-bound modsave). * feat: C# SDK parity (log/toast/menu/shop/sidecar) + script HotLoad in main menu * feat: UI-focused JS/TS SDK (per-mod engines, HotLoad, greg.d.ts) + EN * docs: JS/TS UI SDK wiki (per-mod runtime, HotLoad, greg.d.ts) + stale beta claims fixed * fix: LUA splitter repairs + round-3 test coverage Restore dropped greg assignments/aliases, fix Tablet/greg shadowing, remove duplicate append_file, add tests for all round-3 ops (30 Lua cases). Suite green. * chore: remove dead GregEventJsModule (empty, unreferenced) * docs: LUA reference round 3 (server/patch/rack/cable/shop/tech/modsave/setip) * feat: LUA round 4 (internet/settings/objectives/tooltip/coop/misc) internet endpoints + command center, game audio settings, tutorials + objectives CRUD, tooltips, coop peers/session, steam/locale/numpad/pause helpers, tech.request_next_job. Docs match implementation. Build green. * feat: LUA SDK split + round 3/4 coverage (100% framework) Split all long Register methods into small helpers (Codacy limits); new tables: patch, customer, economy, shop, net, mods, tablet, subnet, requests, items, modsave, internet, settings, objectives, tooltip, coop, misc + server/patch/rack/cable/shop/tech extensions; docs exact; 36 headless Lua tests. Suite 202/202 green. * feat: LUA bridge wires round-4 modules + computer module + registry Registers internet/settings/objectives/tooltip/coop/misc/modsave tables and auto-registers Lua mods in GregModRegistry (visible in greg.mods). Includes computer-module wiring. Build green, suite 202/202. * feat: LUA objectives video flows * feat: LUA customer find_base + splitter table-var fixes * feat: GregPatches safe-patch helper + GregCables.FindByServer * feat: LUA customer find_base + smoke test + doc touch-ups * feat: LUA customer apply_save + requests.add (+ headless-finalizer guard) * integrate: menus/shop/patches/SDK/HotLoad/JS APIs + fixes (linear, no merge) * perf: EnsureAllRackPositionUIDs via NetworkMap first, FindObjects fallback * docs: top-level Hooks/Glossary/FAQ sidebar, Rust track, content updates * style: convention comments on empty catches (Codacy) * docs: sidebar order Guidebook-Core-Hooks-Glossary-FAQ like Oxide * fix: bt-merge follow-up (else-Duplikate, patchPanels-Fallback) * chore: Codacy-Skills-Pass (lokaler Scan + Regel-Tuning) Analysis-CLI (19 Tools): 378 -> 117 Findings. Echt gefixt: existsSync-Import, /* global greg */ im JS-Example, leere README-Badges, Node-Globals (eslint.config.mjs + in-source), tote game_hooks-Ladung, tote dst-Variable, Dockerfile USER+HEALTHCHECK. Getunt (codacy.config.json): Agentlinter-Completeness-Nags (17, AGENTS.md folgt eigenem Standard), Markdown-Stilpatterns (41, nur MD042/MD052 behalten), Lizard-Groessenschwellen (4, passen nicht zur Codebase), steamdesc.md exkludiert (Steam-BBCode). Geprueft-offen (Patterns aktiv): Asserts im Validator (CI ruft plain auf), token-Name (Semver-Klassifizierer), git-Subprocess (eigene Repo-Daten), Rust-unsafe (bewachte ABI-Grenze), C# Path.Combine (MelonEnvironment-Pfad), non-literal-fs (operator-kontrolliertes Build-Skript), Python-greg (host-injiziert), Go-CGo-Signaturen (ABI-fix), DOCKER_7 (gepinnt via ARG). Build 0 Fehler, 264/264 Tests gruen. * chore: Coverage-Upload nach Codacy verdrahten (Part 3) - CI (Forgejo): Tests mit XPlat-Coverage sammeln + Reporter-Upload (braucht CODACY_PROJECT_TOKEN als Actions-Secret, sonst Skip). - coverlet.collector 10.0.1 -> 6.0.4 (passt zu Test-SDK 17.8 + coverlet.msbuild 6.0.4; v10 lieferte keinen DataCollector). * refactor: Codacy complexity fixes for gregCore APIs (helpers split, ShopButtonSpec) * refactor: clear remaining Codacy warnings (Spec-only AddButton, Install/BuildUI split) * refactor: clear Codacy complexity gate (helper splits, partials, FFI excludes) * fix: clear SonarCSharp gate findings (properties, overloads, catches, discards, FFI suppressions) * fix: clear SonarCSharp layer 2 (catches, discards, props, overloads, IEquatable) * fix: clear SonarCSharp layer 3 (S1172/S2386 suppressions, overloads, tuple API, nosemgrep) * fix: clear SonarCSharp layer 4 (S1172/S2386, taint nosemgrep, props, overloads) * fix: clear SonarCSharp layer 5 (props, overloads, S1172/S2386, nosemgrep, tuple API) * fix: clear SonarCSharp layer 6 (props, overloads, S1172/S2386, IEquatable, tuple APIs) * fix: clear SonarCSharp layer 7 (props, S2386 props, IEquatable+operators, S1118, overloads) * fix: clear SonarCSharp layer 8 (overloads, tuples, S2696, IEquatable+ops, defaults) * chore: drop accidentally committed pycache artifact * fix: clear SonarCSharp layer 9 (GameAPITable split+chunked equality, overloads, props) * refactor: break semgrep taint chain (GregIoFileStore sink split) * fix: clear SonarCSharp layer 10 (getter-props, overloads, tuple APIs, dead code) * fix: bulk sweep (discards, catch comments, const props) + verify blob lines * fix: drop unneeded ref param (RouteClicks) * fix: clear SonarCSharp layer 12 (overloads, tuples, IEquatable, templates) * fix: final valid findings (props, twins, S1172, dead params) * fix: tuples, overloads, template lint headers, test helpers * fix: overloads, S1313/S1172, dead params, test helpers * fix: tool script nits (catch comment, Find braces) * chore: residual Codacy cleanup (coverage scanner clarity) * docs: refresh wiki API references (ShopButtonSpec, click-router signatures) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) (#298) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real CI URLs, Jenkins webhook done, Mantis REST nginx fix * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real public URLs, Jenkins webhook done, Mantis REST nginx fix * fix: PSScriptAnalyzer Write-Host, editor catch comment * fix: editor catch comment
* release: dev to main (gregCore consolidation + wiki refresh) * 🛡️ Sentinel: [CRITICAL] Fix Path Traversal in Lua list_files (#294) * I am addressing the Sentinel alert to fix the path traversal vulnerability in the Lua file listing logic. * I have resolved the Sentinel security alert by fixing the path traversal vulnerability in the Lua file listing logic. * Perf opt gamehooks 11443369995706449354 (#295) * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * Fix compilation error: safely TryCast INetworkEndpoint to specific components * chore: merge all branches to dev (menus, shop, patches, SDKs, HotLoad, fixes) * feat: consolidate GregCore integration and release flow Integrate the reviewed security and performance changes, establish bounded runtime services, add contributor and maintainer documentation, and enforce the dev to pre-release to main promotion model. * docs: record branch consolidation and cleanup Document the chronological branch audit, retained promotion branches, and rejected changes from redundant automation proposals. * refactor(multiplayer): remove custom networking stack Keep the legacy Rust FFI v7 table layout stable while making its Steam and P2P slots inert. Document the native Unity/Data Center/Steamworks boundary from the local reference assemblies. * docs(changelog): record integration commit history Record the native multiplayer removal and the preceding branch/release integration commits in the Keep-a-Changelog ledger. * chore: remove obsolete FishNet agent instructions The native Data Center co-op boundary supersedes the former FishNet design guidance. * docs(changelog): record FishNet guidance cleanup Record the obsolete agent-instruction cleanup in the commit ledger. * feat(ui): Tasten-HUD und zentrales F1-Mod-Hub - GregHudRegistry/GregHud: Hotkey-Leiste am rechten Rand (HUD-Layer) - GregModHub (F1): Mod-/Menue-Liste mit Oeffnen-Buttons (Click-Routing) - GregMenuRegistry: RegisterOpener/TryOpen/Snapshot (+MenuInfo) - F1-Tick in GregCoreMod.OnUpdate * feat(mods): ModPackConfig-Erweiterung + ModItemSaveData-Persistenz - GregModPack: Builder und typ-sicherer Reader (Snapshot) fuer ModPackConfig/ShopItemConfig/StaticItemConfig/DllEntry - GregModSave: DTO plus Create/Fill/Read/Upsert/Remove fuer ModItemSaveData (SaveData.modItemData, Key modFolderName) * feat(mods): Custom Items via Vanilla-ModLoader laden - GregObjImport: validierter .obj-Import (Endung, Existenz, Traversal-Schutz, 64MB-Limit, Vertex-Check) - GregCustomItems: RegisterShopItem/RegisterStaticItem aus DTO + Pack-Ordner (Mesh-Vorabcheck), GetPrefab per Folder-Name * feat(net): Networking-Batch (PatchPanels, SetIP, ServiceRequests, Server) - GregPatchPanels: Save-DTO + Runtime-Brücke (Capture, InsertIntoRack, FindAll/ById, Cable-/Rack-Checks) - GregSetIP: Keypad-Fund, Subnetzmathe (Vanilla + Fallback), Show/Cancel - GregServiceRequests: Save-Snapshot, AddRequest/LoadFromSave/RebuildUI, ServiceRequestRow-Helfer - GregServers: ServerSaveData-DTO + Aktionen (SetIP, Power, Customer/App, Repair, Warning) * feat(net): Save-DTOs fuer Netzwerk-Devices (Batch A.1) Router (Routen/Subnetze), Firewall (Filterregeln), SFP, LACP (Upsert), Kabel + Endpunkte (Upsert), Link-Labels, Port-VLAN-Filter. * feat(net): Save-DTOs fuer Kunden + Wirtschaft (Batch A.2) CustomerBase (Upsert per ID, Dict-/Array-Brücken), CustomerRecord, MonthlySnapshot, BalanceSheet. Dazu Bool-Arrays in GregModPack. * feat(net): Save-DTOs fuer Jobs + Interacts (Batch A.3) Technician, RepairJob, InteractObject (Upsert per uid). Ctor-Hinweis: Technician-/InteractObjectData brauchen Vanilla-Live-Objekte (null best-effort). * docs: CHANGELOG fuer Save-Batch A * feat(net): Live-Brücke für Router + Firewall (Batch B.1) Finden per switchId, Subnetze/Routen verwalten, Regeln verwalten, Cluster-Sync, Traffic-Check. * feat(net): Live-Brücken für SFP, Rack und Templates (Batch B.2) SFP-Module/Box, RackTür/Mount, RackTemplateStore + Applier (Il2Cpp- Coroutine-Pumpe). Mount-templateId existiert runtime-seitig nicht. * feat(net): Shop-Brücke + nativer ColorPicker (Batch C) ShopItemSO/ShopItem/ShopCartItem/ModShopItem lesen und bedienen, FlexibleColorPicker öffnen/Farbe setzen/lesen/abbrechen. * feat(net): Objectives, CIDR-Helper, Device-Timer (Batch D.1) * feat(net): Customer-Brücke live (Batch D.2) Finden per customerID/baseID, Base-/Item-DTOs, IP-Lookup, Routed- Subnets, LoadData-Brücke, CustomerCard. * feat(net): Coop-Brücke (Batch E) Session, Peers/Avatare, Held-Items, Loose-Items, Trolley-Ghosts, Chat. * feat(mods): Abhängigkeits-Gating + Manifest-Diff für ModSync Declare/EnsureLoaded/CheckAll (Mindestversionen), GetLocalManifest/ DiffManifests/FormatDiff für Coop-Vergleich. 12 neue Unit-Tests. * feat(net): Rack- und Trolley-Brücke (Batch F) Rack-Positionen prüfen/markieren, RackPosition per UID, Trolley-Bays, Wandcheck, CarryModelPool. Coroutine-Pumpe assembly-intern geteilt. * feat(net): Kabel-Brücke live (Batch G) Finden (alle/switchId/Typ), LinkInfo-DTO, Speed setzen, SFP rein/raus, Second-/Label-Action, Rope-Anker. CableIDComponent ohne öffentliche Member — ausgelassen. * feat(net): Techniker-Brücke (Batch H) Finden/lesen, reparieren, Jobs zuweisen, Manager (senden, feuern, Queue-Restore), HR-Dialoge. * feat(net): Internet- und Dienst-Brücke (Batch I) Internet-Endpunkte, CommandCenter (Level, AutoRepair, Up-/Downgrade), Angriffs-Manager. * feat(net): Angriffs-Eskalation über Zeit (Stufen) Intervalle kürzer, Spawn-Rate/Speed höher pro Stufe (Vanilla-Basis wird gelesen). 4 neue Unit-Tests. * 🛡️ Sentinel: [HIGH] Fix path traversal in io.list_files() * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * feat(net): Numpad-Brücke (Batch J) Zahl lesen, Tasten drücken (Ziffern, OK, Del, Clear, Copy, Paste). * feat(net): Steam-Leaderboards-Brücke (Nische N.1) * feat(net): Spiel-Lautstärken-Brücke (Nische N.2) * feat(net): Localisation + Vanilla-Tooltips (Nische N.3a) * feat(net): PauseMenü-Callbacks + Tutorials (Nische N.3b) * feat(net): Tore/Wände + Steam-Lobby/Avatar (Nische N.3c) * chore: Claude-Lokaleinstellungen nicht versionieren * feat(ci): CI von GitHub auf Forgejo/Gitea umstellen - .github/workflows entfernt, Workflows nach .forgejo/ und .gitea/ verschoben - mirror-github.yml für den GitHub-Mirror ergänzt * feat(quality): Codacy CLI und Konfiguration ergänzen * refactor: Quellbaum in gregCore.*-Assemblies umbauen - Monolith-Layout durch projektbasierte Assemblies gregCore.* ersetzt - lib/MoonSharp und lib/references entfernt (NuGet bzw. references/) - ci-stubs, mods-Payload und unknown_hooks.json entfernt - references/ als Symlinks auf Game-Installation + README - IGregAPI.Version auf 1.2.3, Hook-Counts auf 1850 angehoben * build: Release-Basisversion 1.2.3 setzen - VERSION auf 1.2.3, Dev-Builds stempeln weiter -dev.0 - build.sh Dual-Profil Release 1.2.3 / Debug 1.2.3-dev.0 * chore(scripts): Mirror-Sync-Skript und Skript-Doku * docs: README/CHANGELOG/Architecture und Governance finalisieren - Offene-Source-Doku für den 1.2.3-Release abgeschlossen - Steam-Workshop-Profil in den README-Links ergänzt - Branch-Protection, INDEX, ARCHITECTURE, CODE_OF_CONDUCT, SECURITY * test: GameApiGenerator, Coverage-Tools und neue Tests - GameApiGenerator + regenerate Scripts unter tools/ - check-coverage.sh und coverage-baseline.txt - neue Unit-Tests (GameApiRegistry, RamAlert, DemandPlanner) und tests/README * fix: Save-Sanitize berührt Singleton im Hauptmenü nicht mehr LoadGame-Postfix nutzt das zurückgegebene Save; void-Einstiege nur in Spiel-Szenen (Menü-Vorschaudaten brauchen kein Sanitize). * feat(ui): Menü-Closer + ehrliche Hub-Buttons - RegisterCloser/TryClose, HasCloser im Snapshot - Hub: Schließen nur mit Closer, interne greg.*-Menüs ausgeblendet * feat(ui): DevConsole mit Unity-Log-Feed - Subscribed Unity-Log (Fehler/Warnungen aus Spiel + Mods), Thread-sicher queued, Anzeige im Update, Duplikat-Schutz - Menü-ID greg.console für Input-Lock * feat: save inventory with stable invisible UIDs for mods GregSaveInventory inventories everything in the save on load (servers, switches, routers, firewalls, patch panels, cables, SFP modules, LACP groups) and tags each entry with a stable UID invisible to the player. Server/switch/patch-panel reuse their gregID; cables/LACP derive deterministic UIDs from vanilla IDs; router/firewall/SFP persist via sidecar (greg_inventory.<save>.tsv) with index-shift repair via hints. Mods resolve entries directly (TryFindLive/TryGetUid/GetAll/Rebuilt). Hooked into the load path via LoadNetworkState postfix in GregSaveGuard. Tests: 18 new cases (pure helpers), full suite 135/135 green. * feat: entity inventory display split, control surface, rename - Rename GregSaveInventory -> GregEntityInventory (user vocabulary). - Display/persistence split: gameObject.name stays vanilla, ServerID/ switchId/patchPanelId keep the persistent gregID; screen-scrub postfixes replace leaked gregID tokens with the vanilla designation (Server.UpdateServerScreenUI, NetworkSwitch.UpdateScreenUI). - Control surface: MelonPreferences gregCore.EntityInventory (Enabled/VerboseLogging/DumpOnRebuild) plus Dump() and Verify(). - Tests: ScrubGregIds/CleanDisplayName cases, suite 144/135 green. * refactor: Hardware-IDs als eigenstaendiges Single-Scheme-System - Keine Fremd-Schema-Adoption mehr: genau ein stabiles Schema (gregID), alles andere wird exakt einmal ueberfuehrt (live + Save-Healing). - CleanId nur fuer numerische GetInstanceID-Suffixe, Null-Guards pro Healing-Eintrag, Log-Dedup per ID-String, [gregCore][HwId]-Logs, Idpatch-Typo korrigiert. * feat: 404-PersistentID-Mod bei Erkennung automatisch entpatchen IncompatibleModGuard (Name-/Assembly-Erkennung, UnpatchSelf) laeuft bei Mod-Init und Szenen-Laden; Log-Warnung + Toast einmal pro Sitzung. gregID bleibt damit garantiert das einzige ID-System. * refactor: Hardware-ID-System sichtbar als eigene Implementierung Greg*-Patch-Klassennamen, Startup-Kennung im Log, eigene Doku (docs/modding/hardware-ids.md) + README-Eintrag. * refactor: HwId system fully in short English Logs, comments, docs, README and changelog in English; startup line: HWID SYSTEM ACTIVE. * refactor: shorten all HwId logs, keep them informative * feat: Hub/SettingsHub-Ausbau und Mod-Autoren-Doku (modding/) * fix: codacy codeline limits for entity inventory Split GregEntityInventory into three partial files (API, collectors, codec/config) and slim RebuildFromNetworkData via FreshData + CollectAll/PublishFresh helpers. Extract PatchLoadNetworkState from GregSaveGuard.Install. No behavior change (build clean, 144/144 green). * fix: codacy empty-catch findings with documented rationale Add ignore comments to all bare catch blocks in PR scope (defensive best-effort per CONVENTIONS.md). Comment-only change, no behavior change (build clean, 144/144 green). * fix: codacy trivial findings batch (overloads, properties, comments) Overload chains instead of optional parameters (GregAPI, proxies, ModConfigSystem getters/setters); DTO public fields to auto-properties (source-compatible, no serialization impact); empty-method and switch fixes; const to static property; discard without unused local; field init. Verified hunk-by-hunk, foreign work untouched (build clean, 144/144 green). * fix: codacy empty-catch comments, batch 2 (comment-only) Same documented rationale as previous batch. Verified pure comment diffs (added == deleted == marker count); files with foreign work-in-progress excluded. * fix: codacy long ctor (GameAPIManager 256 lines split) Split delegate wiring into Bind*/FillTable* helpers (all under 30 lines), drop readonly where helpers assign (logger stays readonly). Generated mechanically from exact source lines, order preserved. Build clean, 144/144 green. * fix: codacy method/file findings batch (extractions, splits) GameAPIManager ctor, ModConfigSystem lifecycle/intercept/parse building blocks, RustFFI table binding, TechnicianHiring flow split into small helpers; ModConfigSystem and GregNetworkDeviceSaves split into partials; SliderOptions replaces 9-param overload; AGENTS.md link fixed. No behavior change (build clean, 144/144 green). * fix: codacy long InteractOnClick postfix split Pickup/drop flow extracted into small helpers (identity resolve per device family, rack-uid coalesce via shared UsableObject properties, stable-id apply). No behavior change (build clean, 144/144 green). * fix: codacy long rack/worldsync methods split MarkPositionAsUsed postfix and ProcessNewObject extracted into small helpers (identity resolve per family, rack-uid coalesce, record/fire). No behavior change (build clean). * docs: Modding-Guide auf Stand (PortSpeedMemory, RGB-Animator, Bulk-Snapshot, FAQ) * feat: entity-inventory Kompatibilitaet * feat: entity-inventory und Networking-Saves (WIP-Stand) * feat: GregMenuBinding, GregShopItems primitives, GregHost template + docs * feat: complete Greg.LUA SDK for complex mods New: greg.switch (mirror of server), greg.tech (technicians), greg.config + greg.save (JSON file-backed per-mod stores), greg.json (parse/stringify). Extended: server (power/ip/customer/find/get_list), io aliases (read_text, write_text) + read_json/write_json. Fixed io double-data-dir quirk with lossless migration. Crash-safe logging for headless/test contexts. Docs rewritten to exact implementation, fleet_doctor showcase example. Tests: 9 headless Lua SDK cases, suite 153/153 green. * docs: shop-items adoption note (standalone vs hard dep) * docs: hard-dependency playbook with per-mod verdicts * feat: LUA covers framework (patch/customer/economy/shop/net/mods/tablet/subnet/requests/items) New greg.* tables for patch panels, customers, economy (read-only), shop (catalog/unlock/buy/cart), network save data (read-only), mod registry/deps, tablets/widgets with Lua callbacks, subnet math, service requests, custom item registration. world.open_all_walls. Docs match implementation exactly. Tests: 21 headless Lua cases, suite 165/165 green. * feat: LUA tech extended + coverage gaps closed tech.list/send_to_server/send_to_switch/hire/fire via GregTechnicians (ID-based resolution); doc updated. Suite 165/165 green. * feat: LUA modsave module (per-save mod data) greg.modsave.list/upsert/remove against SaveData.modItemData with manual Vector3/Quaternion mapping. Completes the Lua persistence story (file-backed greg.save + save-bound modsave). * feat: C# SDK parity (log/toast/menu/shop/sidecar) + script HotLoad in main menu * feat: UI-focused JS/TS SDK (per-mod engines, HotLoad, greg.d.ts) + EN * docs: JS/TS UI SDK wiki (per-mod runtime, HotLoad, greg.d.ts) + stale beta claims fixed * fix: LUA splitter repairs + round-3 test coverage Restore dropped greg assignments/aliases, fix Tablet/greg shadowing, remove duplicate append_file, add tests for all round-3 ops (30 Lua cases). Suite green. * chore: remove dead GregEventJsModule (empty, unreferenced) * docs: LUA reference round 3 (server/patch/rack/cable/shop/tech/modsave/setip) * feat: LUA round 4 (internet/settings/objectives/tooltip/coop/misc) internet endpoints + command center, game audio settings, tutorials + objectives CRUD, tooltips, coop peers/session, steam/locale/numpad/pause helpers, tech.request_next_job. Docs match implementation. Build green. * feat: LUA SDK split + round 3/4 coverage (100% framework) Split all long Register methods into small helpers (Codacy limits); new tables: patch, customer, economy, shop, net, mods, tablet, subnet, requests, items, modsave, internet, settings, objectives, tooltip, coop, misc + server/patch/rack/cable/shop/tech extensions; docs exact; 36 headless Lua tests. Suite 202/202 green. * feat: LUA bridge wires round-4 modules + computer module + registry Registers internet/settings/objectives/tooltip/coop/misc/modsave tables and auto-registers Lua mods in GregModRegistry (visible in greg.mods). Includes computer-module wiring. Build green, suite 202/202. * feat: LUA objectives video flows * feat: LUA customer find_base + splitter table-var fixes * feat: GregPatches safe-patch helper + GregCables.FindByServer * feat: LUA customer find_base + smoke test + doc touch-ups * feat: LUA customer apply_save + requests.add (+ headless-finalizer guard) * integrate: menus/shop/patches/SDK/HotLoad/JS APIs + fixes (linear, no merge) * perf: EnsureAllRackPositionUIDs via NetworkMap first, FindObjects fallback * docs: top-level Hooks/Glossary/FAQ sidebar, Rust track, content updates * style: convention comments on empty catches (Codacy) * docs: sidebar order Guidebook-Core-Hooks-Glossary-FAQ like Oxide * fix: bt-merge follow-up (else-Duplikate, patchPanels-Fallback) * chore: Codacy-Skills-Pass (lokaler Scan + Regel-Tuning) Analysis-CLI (19 Tools): 378 -> 117 Findings. Echt gefixt: existsSync-Import, /* global greg */ im JS-Example, leere README-Badges, Node-Globals (eslint.config.mjs + in-source), tote game_hooks-Ladung, tote dst-Variable, Dockerfile USER+HEALTHCHECK. Getunt (codacy.config.json): Agentlinter-Completeness-Nags (17, AGENTS.md folgt eigenem Standard), Markdown-Stilpatterns (41, nur MD042/MD052 behalten), Lizard-Groessenschwellen (4, passen nicht zur Codebase), steamdesc.md exkludiert (Steam-BBCode). Geprueft-offen (Patterns aktiv): Asserts im Validator (CI ruft plain auf), token-Name (Semver-Klassifizierer), git-Subprocess (eigene Repo-Daten), Rust-unsafe (bewachte ABI-Grenze), C# Path.Combine (MelonEnvironment-Pfad), non-literal-fs (operator-kontrolliertes Build-Skript), Python-greg (host-injiziert), Go-CGo-Signaturen (ABI-fix), DOCKER_7 (gepinnt via ARG). Build 0 Fehler, 264/264 Tests gruen. * chore: Coverage-Upload nach Codacy verdrahten (Part 3) - CI (Forgejo): Tests mit XPlat-Coverage sammeln + Reporter-Upload (braucht CODACY_PROJECT_TOKEN als Actions-Secret, sonst Skip). - coverlet.collector 10.0.1 -> 6.0.4 (passt zu Test-SDK 17.8 + coverlet.msbuild 6.0.4; v10 lieferte keinen DataCollector). * refactor: Codacy complexity fixes for gregCore APIs (helpers split, ShopButtonSpec) * refactor: clear remaining Codacy warnings (Spec-only AddButton, Install/BuildUI split) * refactor: clear Codacy complexity gate (helper splits, partials, FFI excludes) * fix: clear SonarCSharp gate findings (properties, overloads, catches, discards, FFI suppressions) * fix: clear SonarCSharp layer 2 (catches, discards, props, overloads, IEquatable) * fix: clear SonarCSharp layer 3 (S1172/S2386 suppressions, overloads, tuple API, nosemgrep) * fix: clear SonarCSharp layer 4 (S1172/S2386, taint nosemgrep, props, overloads) * fix: clear SonarCSharp layer 5 (props, overloads, S1172/S2386, nosemgrep, tuple API) * fix: clear SonarCSharp layer 6 (props, overloads, S1172/S2386, IEquatable, tuple APIs) * fix: clear SonarCSharp layer 7 (props, S2386 props, IEquatable+operators, S1118, overloads) * fix: clear SonarCSharp layer 8 (overloads, tuples, S2696, IEquatable+ops, defaults) * chore: drop accidentally committed pycache artifact * fix: clear SonarCSharp layer 9 (GameAPITable split+chunked equality, overloads, props) * refactor: break semgrep taint chain (GregIoFileStore sink split) * fix: clear SonarCSharp layer 10 (getter-props, overloads, tuple APIs, dead code) * fix: bulk sweep (discards, catch comments, const props) + verify blob lines * fix: drop unneeded ref param (RouteClicks) * fix: clear SonarCSharp layer 12 (overloads, tuples, IEquatable, templates) * fix: final valid findings (props, twins, S1172, dead params) * fix: tuples, overloads, template lint headers, test helpers * fix: overloads, S1313/S1172, dead params, test helpers * fix: tool script nits (catch comment, Find braces) * chore: residual Codacy cleanup (coverage scanner clarity) * docs: refresh wiki API references (ShopButtonSpec, click-router signatures) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) (#298) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real CI URLs, Jenkins webhook done, Mantis REST nginx fix * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real public URLs, Jenkins webhook done, Mantis REST nginx fix * fix: PSScriptAnalyzer Write-Host, editor catch comment * fix: editor catch comment * ⚡ Bolt: Optimize PatchPanel lookup in Lua API
* release: dev to main (gregCore consolidation + wiki refresh) * 🛡️ Sentinel: [CRITICAL] Fix Path Traversal in Lua list_files (#294) * I am addressing the Sentinel alert to fix the path traversal vulnerability in the Lua file listing logic. * I have resolved the Sentinel security alert by fixing the path traversal vulnerability in the Lua file listing logic. * Perf opt gamehooks 11443369995706449354 (#295) * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * Fix compilation error: safely TryCast INetworkEndpoint to specific components * chore: merge all branches to dev (menus, shop, patches, SDKs, HotLoad, fixes) * feat: consolidate GregCore integration and release flow Integrate the reviewed security and performance changes, establish bounded runtime services, add contributor and maintainer documentation, and enforce the dev to pre-release to main promotion model. * docs: record branch consolidation and cleanup Document the chronological branch audit, retained promotion branches, and rejected changes from redundant automation proposals. * refactor(multiplayer): remove custom networking stack Keep the legacy Rust FFI v7 table layout stable while making its Steam and P2P slots inert. Document the native Unity/Data Center/Steamworks boundary from the local reference assemblies. * docs(changelog): record integration commit history Record the native multiplayer removal and the preceding branch/release integration commits in the Keep-a-Changelog ledger. * chore: remove obsolete FishNet agent instructions The native Data Center co-op boundary supersedes the former FishNet design guidance. * docs(changelog): record FishNet guidance cleanup Record the obsolete agent-instruction cleanup in the commit ledger. * feat(ui): Tasten-HUD und zentrales F1-Mod-Hub - GregHudRegistry/GregHud: Hotkey-Leiste am rechten Rand (HUD-Layer) - GregModHub (F1): Mod-/Menue-Liste mit Oeffnen-Buttons (Click-Routing) - GregMenuRegistry: RegisterOpener/TryOpen/Snapshot (+MenuInfo) - F1-Tick in GregCoreMod.OnUpdate * feat(mods): ModPackConfig-Erweiterung + ModItemSaveData-Persistenz - GregModPack: Builder und typ-sicherer Reader (Snapshot) fuer ModPackConfig/ShopItemConfig/StaticItemConfig/DllEntry - GregModSave: DTO plus Create/Fill/Read/Upsert/Remove fuer ModItemSaveData (SaveData.modItemData, Key modFolderName) * feat(mods): Custom Items via Vanilla-ModLoader laden - GregObjImport: validierter .obj-Import (Endung, Existenz, Traversal-Schutz, 64MB-Limit, Vertex-Check) - GregCustomItems: RegisterShopItem/RegisterStaticItem aus DTO + Pack-Ordner (Mesh-Vorabcheck), GetPrefab per Folder-Name * feat(net): Networking-Batch (PatchPanels, SetIP, ServiceRequests, Server) - GregPatchPanels: Save-DTO + Runtime-Brücke (Capture, InsertIntoRack, FindAll/ById, Cable-/Rack-Checks) - GregSetIP: Keypad-Fund, Subnetzmathe (Vanilla + Fallback), Show/Cancel - GregServiceRequests: Save-Snapshot, AddRequest/LoadFromSave/RebuildUI, ServiceRequestRow-Helfer - GregServers: ServerSaveData-DTO + Aktionen (SetIP, Power, Customer/App, Repair, Warning) * feat(net): Save-DTOs fuer Netzwerk-Devices (Batch A.1) Router (Routen/Subnetze), Firewall (Filterregeln), SFP, LACP (Upsert), Kabel + Endpunkte (Upsert), Link-Labels, Port-VLAN-Filter. * feat(net): Save-DTOs fuer Kunden + Wirtschaft (Batch A.2) CustomerBase (Upsert per ID, Dict-/Array-Brücken), CustomerRecord, MonthlySnapshot, BalanceSheet. Dazu Bool-Arrays in GregModPack. * feat(net): Save-DTOs fuer Jobs + Interacts (Batch A.3) Technician, RepairJob, InteractObject (Upsert per uid). Ctor-Hinweis: Technician-/InteractObjectData brauchen Vanilla-Live-Objekte (null best-effort). * docs: CHANGELOG fuer Save-Batch A * feat(net): Live-Brücke für Router + Firewall (Batch B.1) Finden per switchId, Subnetze/Routen verwalten, Regeln verwalten, Cluster-Sync, Traffic-Check. * feat(net): Live-Brücken für SFP, Rack und Templates (Batch B.2) SFP-Module/Box, RackTür/Mount, RackTemplateStore + Applier (Il2Cpp- Coroutine-Pumpe). Mount-templateId existiert runtime-seitig nicht. * feat(net): Shop-Brücke + nativer ColorPicker (Batch C) ShopItemSO/ShopItem/ShopCartItem/ModShopItem lesen und bedienen, FlexibleColorPicker öffnen/Farbe setzen/lesen/abbrechen. * feat(net): Objectives, CIDR-Helper, Device-Timer (Batch D.1) * feat(net): Customer-Brücke live (Batch D.2) Finden per customerID/baseID, Base-/Item-DTOs, IP-Lookup, Routed- Subnets, LoadData-Brücke, CustomerCard. * feat(net): Coop-Brücke (Batch E) Session, Peers/Avatare, Held-Items, Loose-Items, Trolley-Ghosts, Chat. * feat(mods): Abhängigkeits-Gating + Manifest-Diff für ModSync Declare/EnsureLoaded/CheckAll (Mindestversionen), GetLocalManifest/ DiffManifests/FormatDiff für Coop-Vergleich. 12 neue Unit-Tests. * feat(net): Rack- und Trolley-Brücke (Batch F) Rack-Positionen prüfen/markieren, RackPosition per UID, Trolley-Bays, Wandcheck, CarryModelPool. Coroutine-Pumpe assembly-intern geteilt. * feat(net): Kabel-Brücke live (Batch G) Finden (alle/switchId/Typ), LinkInfo-DTO, Speed setzen, SFP rein/raus, Second-/Label-Action, Rope-Anker. CableIDComponent ohne öffentliche Member — ausgelassen. * feat(net): Techniker-Brücke (Batch H) Finden/lesen, reparieren, Jobs zuweisen, Manager (senden, feuern, Queue-Restore), HR-Dialoge. * feat(net): Internet- und Dienst-Brücke (Batch I) Internet-Endpunkte, CommandCenter (Level, AutoRepair, Up-/Downgrade), Angriffs-Manager. * feat(net): Angriffs-Eskalation über Zeit (Stufen) Intervalle kürzer, Spawn-Rate/Speed höher pro Stufe (Vanilla-Basis wird gelesen). 4 neue Unit-Tests. * 🛡️ Sentinel: [HIGH] Fix path traversal in io.list_files() * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * feat(net): Numpad-Brücke (Batch J) Zahl lesen, Tasten drücken (Ziffern, OK, Del, Clear, Copy, Paste). * feat(net): Steam-Leaderboards-Brücke (Nische N.1) * feat(net): Spiel-Lautstärken-Brücke (Nische N.2) * feat(net): Localisation + Vanilla-Tooltips (Nische N.3a) * feat(net): PauseMenü-Callbacks + Tutorials (Nische N.3b) * feat(net): Tore/Wände + Steam-Lobby/Avatar (Nische N.3c) * chore: Claude-Lokaleinstellungen nicht versionieren * feat(ci): CI von GitHub auf Forgejo/Gitea umstellen - .github/workflows entfernt, Workflows nach .forgejo/ und .gitea/ verschoben - mirror-github.yml für den GitHub-Mirror ergänzt * feat(quality): Codacy CLI und Konfiguration ergänzen * refactor: Quellbaum in gregCore.*-Assemblies umbauen - Monolith-Layout durch projektbasierte Assemblies gregCore.* ersetzt - lib/MoonSharp und lib/references entfernt (NuGet bzw. references/) - ci-stubs, mods-Payload und unknown_hooks.json entfernt - references/ als Symlinks auf Game-Installation + README - IGregAPI.Version auf 1.2.3, Hook-Counts auf 1850 angehoben * build: Release-Basisversion 1.2.3 setzen - VERSION auf 1.2.3, Dev-Builds stempeln weiter -dev.0 - build.sh Dual-Profil Release 1.2.3 / Debug 1.2.3-dev.0 * chore(scripts): Mirror-Sync-Skript und Skript-Doku * docs: README/CHANGELOG/Architecture und Governance finalisieren - Offene-Source-Doku für den 1.2.3-Release abgeschlossen - Steam-Workshop-Profil in den README-Links ergänzt - Branch-Protection, INDEX, ARCHITECTURE, CODE_OF_CONDUCT, SECURITY * test: GameApiGenerator, Coverage-Tools und neue Tests - GameApiGenerator + regenerate Scripts unter tools/ - check-coverage.sh und coverage-baseline.txt - neue Unit-Tests (GameApiRegistry, RamAlert, DemandPlanner) und tests/README * fix: Save-Sanitize berührt Singleton im Hauptmenü nicht mehr LoadGame-Postfix nutzt das zurückgegebene Save; void-Einstiege nur in Spiel-Szenen (Menü-Vorschaudaten brauchen kein Sanitize). * feat(ui): Menü-Closer + ehrliche Hub-Buttons - RegisterCloser/TryClose, HasCloser im Snapshot - Hub: Schließen nur mit Closer, interne greg.*-Menüs ausgeblendet * feat(ui): DevConsole mit Unity-Log-Feed - Subscribed Unity-Log (Fehler/Warnungen aus Spiel + Mods), Thread-sicher queued, Anzeige im Update, Duplikat-Schutz - Menü-ID greg.console für Input-Lock * feat: save inventory with stable invisible UIDs for mods GregSaveInventory inventories everything in the save on load (servers, switches, routers, firewalls, patch panels, cables, SFP modules, LACP groups) and tags each entry with a stable UID invisible to the player. Server/switch/patch-panel reuse their gregID; cables/LACP derive deterministic UIDs from vanilla IDs; router/firewall/SFP persist via sidecar (greg_inventory.<save>.tsv) with index-shift repair via hints. Mods resolve entries directly (TryFindLive/TryGetUid/GetAll/Rebuilt). Hooked into the load path via LoadNetworkState postfix in GregSaveGuard. Tests: 18 new cases (pure helpers), full suite 135/135 green. * feat: entity inventory display split, control surface, rename - Rename GregSaveInventory -> GregEntityInventory (user vocabulary). - Display/persistence split: gameObject.name stays vanilla, ServerID/ switchId/patchPanelId keep the persistent gregID; screen-scrub postfixes replace leaked gregID tokens with the vanilla designation (Server.UpdateServerScreenUI, NetworkSwitch.UpdateScreenUI). - Control surface: MelonPreferences gregCore.EntityInventory (Enabled/VerboseLogging/DumpOnRebuild) plus Dump() and Verify(). - Tests: ScrubGregIds/CleanDisplayName cases, suite 144/135 green. * refactor: Hardware-IDs als eigenstaendiges Single-Scheme-System - Keine Fremd-Schema-Adoption mehr: genau ein stabiles Schema (gregID), alles andere wird exakt einmal ueberfuehrt (live + Save-Healing). - CleanId nur fuer numerische GetInstanceID-Suffixe, Null-Guards pro Healing-Eintrag, Log-Dedup per ID-String, [gregCore][HwId]-Logs, Idpatch-Typo korrigiert. * feat: 404-PersistentID-Mod bei Erkennung automatisch entpatchen IncompatibleModGuard (Name-/Assembly-Erkennung, UnpatchSelf) laeuft bei Mod-Init und Szenen-Laden; Log-Warnung + Toast einmal pro Sitzung. gregID bleibt damit garantiert das einzige ID-System. * refactor: Hardware-ID-System sichtbar als eigene Implementierung Greg*-Patch-Klassennamen, Startup-Kennung im Log, eigene Doku (docs/modding/hardware-ids.md) + README-Eintrag. * refactor: HwId system fully in short English Logs, comments, docs, README and changelog in English; startup line: HWID SYSTEM ACTIVE. * refactor: shorten all HwId logs, keep them informative * feat: Hub/SettingsHub-Ausbau und Mod-Autoren-Doku (modding/) * fix: codacy codeline limits for entity inventory Split GregEntityInventory into three partial files (API, collectors, codec/config) and slim RebuildFromNetworkData via FreshData + CollectAll/PublishFresh helpers. Extract PatchLoadNetworkState from GregSaveGuard.Install. No behavior change (build clean, 144/144 green). * fix: codacy empty-catch findings with documented rationale Add ignore comments to all bare catch blocks in PR scope (defensive best-effort per CONVENTIONS.md). Comment-only change, no behavior change (build clean, 144/144 green). * fix: codacy trivial findings batch (overloads, properties, comments) Overload chains instead of optional parameters (GregAPI, proxies, ModConfigSystem getters/setters); DTO public fields to auto-properties (source-compatible, no serialization impact); empty-method and switch fixes; const to static property; discard without unused local; field init. Verified hunk-by-hunk, foreign work untouched (build clean, 144/144 green). * fix: codacy empty-catch comments, batch 2 (comment-only) Same documented rationale as previous batch. Verified pure comment diffs (added == deleted == marker count); files with foreign work-in-progress excluded. * fix: codacy long ctor (GameAPIManager 256 lines split) Split delegate wiring into Bind*/FillTable* helpers (all under 30 lines), drop readonly where helpers assign (logger stays readonly). Generated mechanically from exact source lines, order preserved. Build clean, 144/144 green. * fix: codacy method/file findings batch (extractions, splits) GameAPIManager ctor, ModConfigSystem lifecycle/intercept/parse building blocks, RustFFI table binding, TechnicianHiring flow split into small helpers; ModConfigSystem and GregNetworkDeviceSaves split into partials; SliderOptions replaces 9-param overload; AGENTS.md link fixed. No behavior change (build clean, 144/144 green). * fix: codacy long InteractOnClick postfix split Pickup/drop flow extracted into small helpers (identity resolve per device family, rack-uid coalesce via shared UsableObject properties, stable-id apply). No behavior change (build clean, 144/144 green). * fix: codacy long rack/worldsync methods split MarkPositionAsUsed postfix and ProcessNewObject extracted into small helpers (identity resolve per family, rack-uid coalesce, record/fire). No behavior change (build clean). * docs: Modding-Guide auf Stand (PortSpeedMemory, RGB-Animator, Bulk-Snapshot, FAQ) * feat: entity-inventory Kompatibilitaet * feat: entity-inventory und Networking-Saves (WIP-Stand) * feat: GregMenuBinding, GregShopItems primitives, GregHost template + docs * feat: complete Greg.LUA SDK for complex mods New: greg.switch (mirror of server), greg.tech (technicians), greg.config + greg.save (JSON file-backed per-mod stores), greg.json (parse/stringify). Extended: server (power/ip/customer/find/get_list), io aliases (read_text, write_text) + read_json/write_json. Fixed io double-data-dir quirk with lossless migration. Crash-safe logging for headless/test contexts. Docs rewritten to exact implementation, fleet_doctor showcase example. Tests: 9 headless Lua SDK cases, suite 153/153 green. * docs: shop-items adoption note (standalone vs hard dep) * docs: hard-dependency playbook with per-mod verdicts * feat: LUA covers framework (patch/customer/economy/shop/net/mods/tablet/subnet/requests/items) New greg.* tables for patch panels, customers, economy (read-only), shop (catalog/unlock/buy/cart), network save data (read-only), mod registry/deps, tablets/widgets with Lua callbacks, subnet math, service requests, custom item registration. world.open_all_walls. Docs match implementation exactly. Tests: 21 headless Lua cases, suite 165/165 green. * feat: LUA tech extended + coverage gaps closed tech.list/send_to_server/send_to_switch/hire/fire via GregTechnicians (ID-based resolution); doc updated. Suite 165/165 green. * feat: LUA modsave module (per-save mod data) greg.modsave.list/upsert/remove against SaveData.modItemData with manual Vector3/Quaternion mapping. Completes the Lua persistence story (file-backed greg.save + save-bound modsave). * feat: C# SDK parity (log/toast/menu/shop/sidecar) + script HotLoad in main menu * feat: UI-focused JS/TS SDK (per-mod engines, HotLoad, greg.d.ts) + EN * docs: JS/TS UI SDK wiki (per-mod runtime, HotLoad, greg.d.ts) + stale beta claims fixed * fix: LUA splitter repairs + round-3 test coverage Restore dropped greg assignments/aliases, fix Tablet/greg shadowing, remove duplicate append_file, add tests for all round-3 ops (30 Lua cases). Suite green. * chore: remove dead GregEventJsModule (empty, unreferenced) * docs: LUA reference round 3 (server/patch/rack/cable/shop/tech/modsave/setip) * feat: LUA round 4 (internet/settings/objectives/tooltip/coop/misc) internet endpoints + command center, game audio settings, tutorials + objectives CRUD, tooltips, coop peers/session, steam/locale/numpad/pause helpers, tech.request_next_job. Docs match implementation. Build green. * feat: LUA SDK split + round 3/4 coverage (100% framework) Split all long Register methods into small helpers (Codacy limits); new tables: patch, customer, economy, shop, net, mods, tablet, subnet, requests, items, modsave, internet, settings, objectives, tooltip, coop, misc + server/patch/rack/cable/shop/tech extensions; docs exact; 36 headless Lua tests. Suite 202/202 green. * feat: LUA bridge wires round-4 modules + computer module + registry Registers internet/settings/objectives/tooltip/coop/misc/modsave tables and auto-registers Lua mods in GregModRegistry (visible in greg.mods). Includes computer-module wiring. Build green, suite 202/202. * feat: LUA objectives video flows * feat: LUA customer find_base + splitter table-var fixes * feat: GregPatches safe-patch helper + GregCables.FindByServer * feat: LUA customer find_base + smoke test + doc touch-ups * feat: LUA customer apply_save + requests.add (+ headless-finalizer guard) * integrate: menus/shop/patches/SDK/HotLoad/JS APIs + fixes (linear, no merge) * perf: EnsureAllRackPositionUIDs via NetworkMap first, FindObjects fallback * docs: top-level Hooks/Glossary/FAQ sidebar, Rust track, content updates * style: convention comments on empty catches (Codacy) * docs: sidebar order Guidebook-Core-Hooks-Glossary-FAQ like Oxide * fix: bt-merge follow-up (else-Duplikate, patchPanels-Fallback) * chore: Codacy-Skills-Pass (lokaler Scan + Regel-Tuning) Analysis-CLI (19 Tools): 378 -> 117 Findings. Echt gefixt: existsSync-Import, /* global greg */ im JS-Example, leere README-Badges, Node-Globals (eslint.config.mjs + in-source), tote game_hooks-Ladung, tote dst-Variable, Dockerfile USER+HEALTHCHECK. Getunt (codacy.config.json): Agentlinter-Completeness-Nags (17, AGENTS.md folgt eigenem Standard), Markdown-Stilpatterns (41, nur MD042/MD052 behalten), Lizard-Groessenschwellen (4, passen nicht zur Codebase), steamdesc.md exkludiert (Steam-BBCode). Geprueft-offen (Patterns aktiv): Asserts im Validator (CI ruft plain auf), token-Name (Semver-Klassifizierer), git-Subprocess (eigene Repo-Daten), Rust-unsafe (bewachte ABI-Grenze), C# Path.Combine (MelonEnvironment-Pfad), non-literal-fs (operator-kontrolliertes Build-Skript), Python-greg (host-injiziert), Go-CGo-Signaturen (ABI-fix), DOCKER_7 (gepinnt via ARG). Build 0 Fehler, 264/264 Tests gruen. * chore: Coverage-Upload nach Codacy verdrahten (Part 3) - CI (Forgejo): Tests mit XPlat-Coverage sammeln + Reporter-Upload (braucht CODACY_PROJECT_TOKEN als Actions-Secret, sonst Skip). - coverlet.collector 10.0.1 -> 6.0.4 (passt zu Test-SDK 17.8 + coverlet.msbuild 6.0.4; v10 lieferte keinen DataCollector). * refactor: Codacy complexity fixes for gregCore APIs (helpers split, ShopButtonSpec) * refactor: clear remaining Codacy warnings (Spec-only AddButton, Install/BuildUI split) * refactor: clear Codacy complexity gate (helper splits, partials, FFI excludes) * fix: clear SonarCSharp gate findings (properties, overloads, catches, discards, FFI suppressions) * fix: clear SonarCSharp layer 2 (catches, discards, props, overloads, IEquatable) * fix: clear SonarCSharp layer 3 (S1172/S2386 suppressions, overloads, tuple API, nosemgrep) * fix: clear SonarCSharp layer 4 (S1172/S2386, taint nosemgrep, props, overloads) * fix: clear SonarCSharp layer 5 (props, overloads, S1172/S2386, nosemgrep, tuple API) * fix: clear SonarCSharp layer 6 (props, overloads, S1172/S2386, IEquatable, tuple APIs) * fix: clear SonarCSharp layer 7 (props, S2386 props, IEquatable+operators, S1118, overloads) * fix: clear SonarCSharp layer 8 (overloads, tuples, S2696, IEquatable+ops, defaults) * chore: drop accidentally committed pycache artifact * fix: clear SonarCSharp layer 9 (GameAPITable split+chunked equality, overloads, props) * refactor: break semgrep taint chain (GregIoFileStore sink split) * fix: clear SonarCSharp layer 10 (getter-props, overloads, tuple APIs, dead code) * fix: bulk sweep (discards, catch comments, const props) + verify blob lines * fix: drop unneeded ref param (RouteClicks) * fix: clear SonarCSharp layer 12 (overloads, tuples, IEquatable, templates) * fix: final valid findings (props, twins, S1172, dead params) * fix: tuples, overloads, template lint headers, test helpers * fix: overloads, S1313/S1172, dead params, test helpers * fix: tool script nits (catch comment, Find braces) * chore: residual Codacy cleanup (coverage scanner clarity) * docs: refresh wiki API references (ShopButtonSpec, click-router signatures) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) (#298) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real CI URLs, Jenkins webhook done, Mantis REST nginx fix * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real public URLs, Jenkins webhook done, Mantis REST nginx fix * fix: PSScriptAnalyzer Write-Host, editor catch comment * fix: editor catch comment * Optimize GregServers.FindAll() to use NetworkMap
* release: dev to main (gregCore consolidation + wiki refresh) * 🛡️ Sentinel: [CRITICAL] Fix Path Traversal in Lua list_files (#294) * I am addressing the Sentinel alert to fix the path traversal vulnerability in the Lua file listing logic. * I have resolved the Sentinel security alert by fixing the path traversal vulnerability in the Lua file listing logic. * Perf opt gamehooks 11443369995706449354 (#295) * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * Fix compilation error: safely TryCast INetworkEndpoint to specific components * chore: merge all branches to dev (menus, shop, patches, SDKs, HotLoad, fixes) * feat: consolidate GregCore integration and release flow Integrate the reviewed security and performance changes, establish bounded runtime services, add contributor and maintainer documentation, and enforce the dev to pre-release to main promotion model. * docs: record branch consolidation and cleanup Document the chronological branch audit, retained promotion branches, and rejected changes from redundant automation proposals. * refactor(multiplayer): remove custom networking stack Keep the legacy Rust FFI v7 table layout stable while making its Steam and P2P slots inert. Document the native Unity/Data Center/Steamworks boundary from the local reference assemblies. * docs(changelog): record integration commit history Record the native multiplayer removal and the preceding branch/release integration commits in the Keep-a-Changelog ledger. * chore: remove obsolete FishNet agent instructions The native Data Center co-op boundary supersedes the former FishNet design guidance. * docs(changelog): record FishNet guidance cleanup Record the obsolete agent-instruction cleanup in the commit ledger. * feat(ui): Tasten-HUD und zentrales F1-Mod-Hub - GregHudRegistry/GregHud: Hotkey-Leiste am rechten Rand (HUD-Layer) - GregModHub (F1): Mod-/Menue-Liste mit Oeffnen-Buttons (Click-Routing) - GregMenuRegistry: RegisterOpener/TryOpen/Snapshot (+MenuInfo) - F1-Tick in GregCoreMod.OnUpdate * feat(mods): ModPackConfig-Erweiterung + ModItemSaveData-Persistenz - GregModPack: Builder und typ-sicherer Reader (Snapshot) fuer ModPackConfig/ShopItemConfig/StaticItemConfig/DllEntry - GregModSave: DTO plus Create/Fill/Read/Upsert/Remove fuer ModItemSaveData (SaveData.modItemData, Key modFolderName) * feat(mods): Custom Items via Vanilla-ModLoader laden - GregObjImport: validierter .obj-Import (Endung, Existenz, Traversal-Schutz, 64MB-Limit, Vertex-Check) - GregCustomItems: RegisterShopItem/RegisterStaticItem aus DTO + Pack-Ordner (Mesh-Vorabcheck), GetPrefab per Folder-Name * feat(net): Networking-Batch (PatchPanels, SetIP, ServiceRequests, Server) - GregPatchPanels: Save-DTO + Runtime-Brücke (Capture, InsertIntoRack, FindAll/ById, Cable-/Rack-Checks) - GregSetIP: Keypad-Fund, Subnetzmathe (Vanilla + Fallback), Show/Cancel - GregServiceRequests: Save-Snapshot, AddRequest/LoadFromSave/RebuildUI, ServiceRequestRow-Helfer - GregServers: ServerSaveData-DTO + Aktionen (SetIP, Power, Customer/App, Repair, Warning) * feat(net): Save-DTOs fuer Netzwerk-Devices (Batch A.1) Router (Routen/Subnetze), Firewall (Filterregeln), SFP, LACP (Upsert), Kabel + Endpunkte (Upsert), Link-Labels, Port-VLAN-Filter. * feat(net): Save-DTOs fuer Kunden + Wirtschaft (Batch A.2) CustomerBase (Upsert per ID, Dict-/Array-Brücken), CustomerRecord, MonthlySnapshot, BalanceSheet. Dazu Bool-Arrays in GregModPack. * feat(net): Save-DTOs fuer Jobs + Interacts (Batch A.3) Technician, RepairJob, InteractObject (Upsert per uid). Ctor-Hinweis: Technician-/InteractObjectData brauchen Vanilla-Live-Objekte (null best-effort). * docs: CHANGELOG fuer Save-Batch A * feat(net): Live-Brücke für Router + Firewall (Batch B.1) Finden per switchId, Subnetze/Routen verwalten, Regeln verwalten, Cluster-Sync, Traffic-Check. * feat(net): Live-Brücken für SFP, Rack und Templates (Batch B.2) SFP-Module/Box, RackTür/Mount, RackTemplateStore + Applier (Il2Cpp- Coroutine-Pumpe). Mount-templateId existiert runtime-seitig nicht. * feat(net): Shop-Brücke + nativer ColorPicker (Batch C) ShopItemSO/ShopItem/ShopCartItem/ModShopItem lesen und bedienen, FlexibleColorPicker öffnen/Farbe setzen/lesen/abbrechen. * feat(net): Objectives, CIDR-Helper, Device-Timer (Batch D.1) * feat(net): Customer-Brücke live (Batch D.2) Finden per customerID/baseID, Base-/Item-DTOs, IP-Lookup, Routed- Subnets, LoadData-Brücke, CustomerCard. * feat(net): Coop-Brücke (Batch E) Session, Peers/Avatare, Held-Items, Loose-Items, Trolley-Ghosts, Chat. * feat(mods): Abhängigkeits-Gating + Manifest-Diff für ModSync Declare/EnsureLoaded/CheckAll (Mindestversionen), GetLocalManifest/ DiffManifests/FormatDiff für Coop-Vergleich. 12 neue Unit-Tests. * feat(net): Rack- und Trolley-Brücke (Batch F) Rack-Positionen prüfen/markieren, RackPosition per UID, Trolley-Bays, Wandcheck, CarryModelPool. Coroutine-Pumpe assembly-intern geteilt. * feat(net): Kabel-Brücke live (Batch G) Finden (alle/switchId/Typ), LinkInfo-DTO, Speed setzen, SFP rein/raus, Second-/Label-Action, Rope-Anker. CableIDComponent ohne öffentliche Member — ausgelassen. * feat(net): Techniker-Brücke (Batch H) Finden/lesen, reparieren, Jobs zuweisen, Manager (senden, feuern, Queue-Restore), HR-Dialoge. * feat(net): Internet- und Dienst-Brücke (Batch I) Internet-Endpunkte, CommandCenter (Level, AutoRepair, Up-/Downgrade), Angriffs-Manager. * feat(net): Angriffs-Eskalation über Zeit (Stufen) Intervalle kürzer, Spawn-Rate/Speed höher pro Stufe (Vanilla-Basis wird gelesen). 4 neue Unit-Tests. * 🛡️ Sentinel: [HIGH] Fix path traversal in io.list_files() * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * feat(net): Numpad-Brücke (Batch J) Zahl lesen, Tasten drücken (Ziffern, OK, Del, Clear, Copy, Paste). * feat(net): Steam-Leaderboards-Brücke (Nische N.1) * feat(net): Spiel-Lautstärken-Brücke (Nische N.2) * feat(net): Localisation + Vanilla-Tooltips (Nische N.3a) * feat(net): PauseMenü-Callbacks + Tutorials (Nische N.3b) * feat(net): Tore/Wände + Steam-Lobby/Avatar (Nische N.3c) * chore: Claude-Lokaleinstellungen nicht versionieren * feat(ci): CI von GitHub auf Forgejo/Gitea umstellen - .github/workflows entfernt, Workflows nach .forgejo/ und .gitea/ verschoben - mirror-github.yml für den GitHub-Mirror ergänzt * feat(quality): Codacy CLI und Konfiguration ergänzen * refactor: Quellbaum in gregCore.*-Assemblies umbauen - Monolith-Layout durch projektbasierte Assemblies gregCore.* ersetzt - lib/MoonSharp und lib/references entfernt (NuGet bzw. references/) - ci-stubs, mods-Payload und unknown_hooks.json entfernt - references/ als Symlinks auf Game-Installation + README - IGregAPI.Version auf 1.2.3, Hook-Counts auf 1850 angehoben * build: Release-Basisversion 1.2.3 setzen - VERSION auf 1.2.3, Dev-Builds stempeln weiter -dev.0 - build.sh Dual-Profil Release 1.2.3 / Debug 1.2.3-dev.0 * chore(scripts): Mirror-Sync-Skript und Skript-Doku * docs: README/CHANGELOG/Architecture und Governance finalisieren - Offene-Source-Doku für den 1.2.3-Release abgeschlossen - Steam-Workshop-Profil in den README-Links ergänzt - Branch-Protection, INDEX, ARCHITECTURE, CODE_OF_CONDUCT, SECURITY * test: GameApiGenerator, Coverage-Tools und neue Tests - GameApiGenerator + regenerate Scripts unter tools/ - check-coverage.sh und coverage-baseline.txt - neue Unit-Tests (GameApiRegistry, RamAlert, DemandPlanner) und tests/README * fix: Save-Sanitize berührt Singleton im Hauptmenü nicht mehr LoadGame-Postfix nutzt das zurückgegebene Save; void-Einstiege nur in Spiel-Szenen (Menü-Vorschaudaten brauchen kein Sanitize). * feat(ui): Menü-Closer + ehrliche Hub-Buttons - RegisterCloser/TryClose, HasCloser im Snapshot - Hub: Schließen nur mit Closer, interne greg.*-Menüs ausgeblendet * feat(ui): DevConsole mit Unity-Log-Feed - Subscribed Unity-Log (Fehler/Warnungen aus Spiel + Mods), Thread-sicher queued, Anzeige im Update, Duplikat-Schutz - Menü-ID greg.console für Input-Lock * feat: save inventory with stable invisible UIDs for mods GregSaveInventory inventories everything in the save on load (servers, switches, routers, firewalls, patch panels, cables, SFP modules, LACP groups) and tags each entry with a stable UID invisible to the player. Server/switch/patch-panel reuse their gregID; cables/LACP derive deterministic UIDs from vanilla IDs; router/firewall/SFP persist via sidecar (greg_inventory.<save>.tsv) with index-shift repair via hints. Mods resolve entries directly (TryFindLive/TryGetUid/GetAll/Rebuilt). Hooked into the load path via LoadNetworkState postfix in GregSaveGuard. Tests: 18 new cases (pure helpers), full suite 135/135 green. * feat: entity inventory display split, control surface, rename - Rename GregSaveInventory -> GregEntityInventory (user vocabulary). - Display/persistence split: gameObject.name stays vanilla, ServerID/ switchId/patchPanelId keep the persistent gregID; screen-scrub postfixes replace leaked gregID tokens with the vanilla designation (Server.UpdateServerScreenUI, NetworkSwitch.UpdateScreenUI). - Control surface: MelonPreferences gregCore.EntityInventory (Enabled/VerboseLogging/DumpOnRebuild) plus Dump() and Verify(). - Tests: ScrubGregIds/CleanDisplayName cases, suite 144/135 green. * refactor: Hardware-IDs als eigenstaendiges Single-Scheme-System - Keine Fremd-Schema-Adoption mehr: genau ein stabiles Schema (gregID), alles andere wird exakt einmal ueberfuehrt (live + Save-Healing). - CleanId nur fuer numerische GetInstanceID-Suffixe, Null-Guards pro Healing-Eintrag, Log-Dedup per ID-String, [gregCore][HwId]-Logs, Idpatch-Typo korrigiert. * feat: 404-PersistentID-Mod bei Erkennung automatisch entpatchen IncompatibleModGuard (Name-/Assembly-Erkennung, UnpatchSelf) laeuft bei Mod-Init und Szenen-Laden; Log-Warnung + Toast einmal pro Sitzung. gregID bleibt damit garantiert das einzige ID-System. * refactor: Hardware-ID-System sichtbar als eigene Implementierung Greg*-Patch-Klassennamen, Startup-Kennung im Log, eigene Doku (docs/modding/hardware-ids.md) + README-Eintrag. * refactor: HwId system fully in short English Logs, comments, docs, README and changelog in English; startup line: HWID SYSTEM ACTIVE. * refactor: shorten all HwId logs, keep them informative * feat: Hub/SettingsHub-Ausbau und Mod-Autoren-Doku (modding/) * fix: codacy codeline limits for entity inventory Split GregEntityInventory into three partial files (API, collectors, codec/config) and slim RebuildFromNetworkData via FreshData + CollectAll/PublishFresh helpers. Extract PatchLoadNetworkState from GregSaveGuard.Install. No behavior change (build clean, 144/144 green). * fix: codacy empty-catch findings with documented rationale Add ignore comments to all bare catch blocks in PR scope (defensive best-effort per CONVENTIONS.md). Comment-only change, no behavior change (build clean, 144/144 green). * fix: codacy trivial findings batch (overloads, properties, comments) Overload chains instead of optional parameters (GregAPI, proxies, ModConfigSystem getters/setters); DTO public fields to auto-properties (source-compatible, no serialization impact); empty-method and switch fixes; const to static property; discard without unused local; field init. Verified hunk-by-hunk, foreign work untouched (build clean, 144/144 green). * fix: codacy empty-catch comments, batch 2 (comment-only) Same documented rationale as previous batch. Verified pure comment diffs (added == deleted == marker count); files with foreign work-in-progress excluded. * fix: codacy long ctor (GameAPIManager 256 lines split) Split delegate wiring into Bind*/FillTable* helpers (all under 30 lines), drop readonly where helpers assign (logger stays readonly). Generated mechanically from exact source lines, order preserved. Build clean, 144/144 green. * fix: codacy method/file findings batch (extractions, splits) GameAPIManager ctor, ModConfigSystem lifecycle/intercept/parse building blocks, RustFFI table binding, TechnicianHiring flow split into small helpers; ModConfigSystem and GregNetworkDeviceSaves split into partials; SliderOptions replaces 9-param overload; AGENTS.md link fixed. No behavior change (build clean, 144/144 green). * fix: codacy long InteractOnClick postfix split Pickup/drop flow extracted into small helpers (identity resolve per device family, rack-uid coalesce via shared UsableObject properties, stable-id apply). No behavior change (build clean, 144/144 green). * fix: codacy long rack/worldsync methods split MarkPositionAsUsed postfix and ProcessNewObject extracted into small helpers (identity resolve per family, rack-uid coalesce, record/fire). No behavior change (build clean). * docs: Modding-Guide auf Stand (PortSpeedMemory, RGB-Animator, Bulk-Snapshot, FAQ) * feat: entity-inventory Kompatibilitaet * feat: entity-inventory und Networking-Saves (WIP-Stand) * feat: GregMenuBinding, GregShopItems primitives, GregHost template + docs * feat: complete Greg.LUA SDK for complex mods New: greg.switch (mirror of server), greg.tech (technicians), greg.config + greg.save (JSON file-backed per-mod stores), greg.json (parse/stringify). Extended: server (power/ip/customer/find/get_list), io aliases (read_text, write_text) + read_json/write_json. Fixed io double-data-dir quirk with lossless migration. Crash-safe logging for headless/test contexts. Docs rewritten to exact implementation, fleet_doctor showcase example. Tests: 9 headless Lua SDK cases, suite 153/153 green. * docs: shop-items adoption note (standalone vs hard dep) * docs: hard-dependency playbook with per-mod verdicts * feat: LUA covers framework (patch/customer/economy/shop/net/mods/tablet/subnet/requests/items) New greg.* tables for patch panels, customers, economy (read-only), shop (catalog/unlock/buy/cart), network save data (read-only), mod registry/deps, tablets/widgets with Lua callbacks, subnet math, service requests, custom item registration. world.open_all_walls. Docs match implementation exactly. Tests: 21 headless Lua cases, suite 165/165 green. * feat: LUA tech extended + coverage gaps closed tech.list/send_to_server/send_to_switch/hire/fire via GregTechnicians (ID-based resolution); doc updated. Suite 165/165 green. * feat: LUA modsave module (per-save mod data) greg.modsave.list/upsert/remove against SaveData.modItemData with manual Vector3/Quaternion mapping. Completes the Lua persistence story (file-backed greg.save + save-bound modsave). * feat: C# SDK parity (log/toast/menu/shop/sidecar) + script HotLoad in main menu * feat: UI-focused JS/TS SDK (per-mod engines, HotLoad, greg.d.ts) + EN * docs: JS/TS UI SDK wiki (per-mod runtime, HotLoad, greg.d.ts) + stale beta claims fixed * fix: LUA splitter repairs + round-3 test coverage Restore dropped greg assignments/aliases, fix Tablet/greg shadowing, remove duplicate append_file, add tests for all round-3 ops (30 Lua cases). Suite green. * chore: remove dead GregEventJsModule (empty, unreferenced) * docs: LUA reference round 3 (server/patch/rack/cable/shop/tech/modsave/setip) * feat: LUA round 4 (internet/settings/objectives/tooltip/coop/misc) internet endpoints + command center, game audio settings, tutorials + objectives CRUD, tooltips, coop peers/session, steam/locale/numpad/pause helpers, tech.request_next_job. Docs match implementation. Build green. * feat: LUA SDK split + round 3/4 coverage (100% framework) Split all long Register methods into small helpers (Codacy limits); new tables: patch, customer, economy, shop, net, mods, tablet, subnet, requests, items, modsave, internet, settings, objectives, tooltip, coop, misc + server/patch/rack/cable/shop/tech extensions; docs exact; 36 headless Lua tests. Suite 202/202 green. * feat: LUA bridge wires round-4 modules + computer module + registry Registers internet/settings/objectives/tooltip/coop/misc/modsave tables and auto-registers Lua mods in GregModRegistry (visible in greg.mods). Includes computer-module wiring. Build green, suite 202/202. * feat: LUA objectives video flows * feat: LUA customer find_base + splitter table-var fixes * feat: GregPatches safe-patch helper + GregCables.FindByServer * feat: LUA customer find_base + smoke test + doc touch-ups * feat: LUA customer apply_save + requests.add (+ headless-finalizer guard) * integrate: menus/shop/patches/SDK/HotLoad/JS APIs + fixes (linear, no merge) * perf: EnsureAllRackPositionUIDs via NetworkMap first, FindObjects fallback * docs: top-level Hooks/Glossary/FAQ sidebar, Rust track, content updates * style: convention comments on empty catches (Codacy) * docs: sidebar order Guidebook-Core-Hooks-Glossary-FAQ like Oxide * fix: bt-merge follow-up (else-Duplikate, patchPanels-Fallback) * chore: Codacy-Skills-Pass (lokaler Scan + Regel-Tuning) Analysis-CLI (19 Tools): 378 -> 117 Findings. Echt gefixt: existsSync-Import, /* global greg */ im JS-Example, leere README-Badges, Node-Globals (eslint.config.mjs + in-source), tote game_hooks-Ladung, tote dst-Variable, Dockerfile USER+HEALTHCHECK. Getunt (codacy.config.json): Agentlinter-Completeness-Nags (17, AGENTS.md folgt eigenem Standard), Markdown-Stilpatterns (41, nur MD042/MD052 behalten), Lizard-Groessenschwellen (4, passen nicht zur Codebase), steamdesc.md exkludiert (Steam-BBCode). Geprueft-offen (Patterns aktiv): Asserts im Validator (CI ruft plain auf), token-Name (Semver-Klassifizierer), git-Subprocess (eigene Repo-Daten), Rust-unsafe (bewachte ABI-Grenze), C# Path.Combine (MelonEnvironment-Pfad), non-literal-fs (operator-kontrolliertes Build-Skript), Python-greg (host-injiziert), Go-CGo-Signaturen (ABI-fix), DOCKER_7 (gepinnt via ARG). Build 0 Fehler, 264/264 Tests gruen. * chore: Coverage-Upload nach Codacy verdrahten (Part 3) - CI (Forgejo): Tests mit XPlat-Coverage sammeln + Reporter-Upload (braucht CODACY_PROJECT_TOKEN als Actions-Secret, sonst Skip). - coverlet.collector 10.0.1 -> 6.0.4 (passt zu Test-SDK 17.8 + coverlet.msbuild 6.0.4; v10 lieferte keinen DataCollector). * refactor: Codacy complexity fixes for gregCore APIs (helpers split, ShopButtonSpec) * refactor: clear remaining Codacy warnings (Spec-only AddButton, Install/BuildUI split) * refactor: clear Codacy complexity gate (helper splits, partials, FFI excludes) * fix: clear SonarCSharp gate findings (properties, overloads, catches, discards, FFI suppressions) * fix: clear SonarCSharp layer 2 (catches, discards, props, overloads, IEquatable) * fix: clear SonarCSharp layer 3 (S1172/S2386 suppressions, overloads, tuple API, nosemgrep) * fix: clear SonarCSharp layer 4 (S1172/S2386, taint nosemgrep, props, overloads) * fix: clear SonarCSharp layer 5 (props, overloads, S1172/S2386, nosemgrep, tuple API) * fix: clear SonarCSharp layer 6 (props, overloads, S1172/S2386, IEquatable, tuple APIs) * fix: clear SonarCSharp layer 7 (props, S2386 props, IEquatable+operators, S1118, overloads) * fix: clear SonarCSharp layer 8 (overloads, tuples, S2696, IEquatable+ops, defaults) * chore: drop accidentally committed pycache artifact * fix: clear SonarCSharp layer 9 (GameAPITable split+chunked equality, overloads, props) * refactor: break semgrep taint chain (GregIoFileStore sink split) * fix: clear SonarCSharp layer 10 (getter-props, overloads, tuple APIs, dead code) * fix: bulk sweep (discards, catch comments, const props) + verify blob lines * fix: drop unneeded ref param (RouteClicks) * fix: clear SonarCSharp layer 12 (overloads, tuples, IEquatable, templates) * fix: final valid findings (props, twins, S1172, dead params) * fix: tuples, overloads, template lint headers, test helpers * fix: overloads, S1313/S1172, dead params, test helpers * fix: tool script nits (catch comment, Find braces) * chore: residual Codacy cleanup (coverage scanner clarity) * docs: refresh wiki API references (ShopButtonSpec, click-router signatures) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) (#298) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real CI URLs, Jenkins webhook done, Mantis REST nginx fix * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real public URLs, Jenkins webhook done, Mantis REST nginx fix * fix: PSScriptAnalyzer Write-Host, editor catch comment * fix: editor catch comment * 🛡️ Sentinel: Fix path traversal bypass via backslash in Lua sandbox
* release: dev to main (gregCore consolidation + wiki refresh) * 🛡️ Sentinel: [CRITICAL] Fix Path Traversal in Lua list_files (#294) * I am addressing the Sentinel alert to fix the path traversal vulnerability in the Lua file listing logic. * I have resolved the Sentinel security alert by fixing the path traversal vulnerability in the Lua file listing logic. * Perf opt gamehooks 11443369995706449354 (#295) * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * Fix compilation error: safely TryCast INetworkEndpoint to specific components * chore: merge all branches to dev (menus, shop, patches, SDKs, HotLoad, fixes) * feat: consolidate GregCore integration and release flow Integrate the reviewed security and performance changes, establish bounded runtime services, add contributor and maintainer documentation, and enforce the dev to pre-release to main promotion model. * docs: record branch consolidation and cleanup Document the chronological branch audit, retained promotion branches, and rejected changes from redundant automation proposals. * refactor(multiplayer): remove custom networking stack Keep the legacy Rust FFI v7 table layout stable while making its Steam and P2P slots inert. Document the native Unity/Data Center/Steamworks boundary from the local reference assemblies. * docs(changelog): record integration commit history Record the native multiplayer removal and the preceding branch/release integration commits in the Keep-a-Changelog ledger. * chore: remove obsolete FishNet agent instructions The native Data Center co-op boundary supersedes the former FishNet design guidance. * docs(changelog): record FishNet guidance cleanup Record the obsolete agent-instruction cleanup in the commit ledger. * feat(ui): Tasten-HUD und zentrales F1-Mod-Hub - GregHudRegistry/GregHud: Hotkey-Leiste am rechten Rand (HUD-Layer) - GregModHub (F1): Mod-/Menue-Liste mit Oeffnen-Buttons (Click-Routing) - GregMenuRegistry: RegisterOpener/TryOpen/Snapshot (+MenuInfo) - F1-Tick in GregCoreMod.OnUpdate * feat(mods): ModPackConfig-Erweiterung + ModItemSaveData-Persistenz - GregModPack: Builder und typ-sicherer Reader (Snapshot) fuer ModPackConfig/ShopItemConfig/StaticItemConfig/DllEntry - GregModSave: DTO plus Create/Fill/Read/Upsert/Remove fuer ModItemSaveData (SaveData.modItemData, Key modFolderName) * feat(mods): Custom Items via Vanilla-ModLoader laden - GregObjImport: validierter .obj-Import (Endung, Existenz, Traversal-Schutz, 64MB-Limit, Vertex-Check) - GregCustomItems: RegisterShopItem/RegisterStaticItem aus DTO + Pack-Ordner (Mesh-Vorabcheck), GetPrefab per Folder-Name * feat(net): Networking-Batch (PatchPanels, SetIP, ServiceRequests, Server) - GregPatchPanels: Save-DTO + Runtime-Brücke (Capture, InsertIntoRack, FindAll/ById, Cable-/Rack-Checks) - GregSetIP: Keypad-Fund, Subnetzmathe (Vanilla + Fallback), Show/Cancel - GregServiceRequests: Save-Snapshot, AddRequest/LoadFromSave/RebuildUI, ServiceRequestRow-Helfer - GregServers: ServerSaveData-DTO + Aktionen (SetIP, Power, Customer/App, Repair, Warning) * feat(net): Save-DTOs fuer Netzwerk-Devices (Batch A.1) Router (Routen/Subnetze), Firewall (Filterregeln), SFP, LACP (Upsert), Kabel + Endpunkte (Upsert), Link-Labels, Port-VLAN-Filter. * feat(net): Save-DTOs fuer Kunden + Wirtschaft (Batch A.2) CustomerBase (Upsert per ID, Dict-/Array-Brücken), CustomerRecord, MonthlySnapshot, BalanceSheet. Dazu Bool-Arrays in GregModPack. * feat(net): Save-DTOs fuer Jobs + Interacts (Batch A.3) Technician, RepairJob, InteractObject (Upsert per uid). Ctor-Hinweis: Technician-/InteractObjectData brauchen Vanilla-Live-Objekte (null best-effort). * docs: CHANGELOG fuer Save-Batch A * feat(net): Live-Brücke für Router + Firewall (Batch B.1) Finden per switchId, Subnetze/Routen verwalten, Regeln verwalten, Cluster-Sync, Traffic-Check. * feat(net): Live-Brücken für SFP, Rack und Templates (Batch B.2) SFP-Module/Box, RackTür/Mount, RackTemplateStore + Applier (Il2Cpp- Coroutine-Pumpe). Mount-templateId existiert runtime-seitig nicht. * feat(net): Shop-Brücke + nativer ColorPicker (Batch C) ShopItemSO/ShopItem/ShopCartItem/ModShopItem lesen und bedienen, FlexibleColorPicker öffnen/Farbe setzen/lesen/abbrechen. * feat(net): Objectives, CIDR-Helper, Device-Timer (Batch D.1) * feat(net): Customer-Brücke live (Batch D.2) Finden per customerID/baseID, Base-/Item-DTOs, IP-Lookup, Routed- Subnets, LoadData-Brücke, CustomerCard. * feat(net): Coop-Brücke (Batch E) Session, Peers/Avatare, Held-Items, Loose-Items, Trolley-Ghosts, Chat. * feat(mods): Abhängigkeits-Gating + Manifest-Diff für ModSync Declare/EnsureLoaded/CheckAll (Mindestversionen), GetLocalManifest/ DiffManifests/FormatDiff für Coop-Vergleich. 12 neue Unit-Tests. * feat(net): Rack- und Trolley-Brücke (Batch F) Rack-Positionen prüfen/markieren, RackPosition per UID, Trolley-Bays, Wandcheck, CarryModelPool. Coroutine-Pumpe assembly-intern geteilt. * feat(net): Kabel-Brücke live (Batch G) Finden (alle/switchId/Typ), LinkInfo-DTO, Speed setzen, SFP rein/raus, Second-/Label-Action, Rope-Anker. CableIDComponent ohne öffentliche Member — ausgelassen. * feat(net): Techniker-Brücke (Batch H) Finden/lesen, reparieren, Jobs zuweisen, Manager (senden, feuern, Queue-Restore), HR-Dialoge. * feat(net): Internet- und Dienst-Brücke (Batch I) Internet-Endpunkte, CommandCenter (Level, AutoRepair, Up-/Downgrade), Angriffs-Manager. * feat(net): Angriffs-Eskalation über Zeit (Stufen) Intervalle kürzer, Spawn-Rate/Speed höher pro Stufe (Vanilla-Basis wird gelesen). 4 neue Unit-Tests. * 🛡️ Sentinel: [HIGH] Fix path traversal in io.list_files() * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * feat(net): Numpad-Brücke (Batch J) Zahl lesen, Tasten drücken (Ziffern, OK, Del, Clear, Copy, Paste). * feat(net): Steam-Leaderboards-Brücke (Nische N.1) * feat(net): Spiel-Lautstärken-Brücke (Nische N.2) * feat(net): Localisation + Vanilla-Tooltips (Nische N.3a) * feat(net): PauseMenü-Callbacks + Tutorials (Nische N.3b) * feat(net): Tore/Wände + Steam-Lobby/Avatar (Nische N.3c) * chore: Claude-Lokaleinstellungen nicht versionieren * feat(ci): CI von GitHub auf Forgejo/Gitea umstellen - .github/workflows entfernt, Workflows nach .forgejo/ und .gitea/ verschoben - mirror-github.yml für den GitHub-Mirror ergänzt * feat(quality): Codacy CLI und Konfiguration ergänzen * refactor: Quellbaum in gregCore.*-Assemblies umbauen - Monolith-Layout durch projektbasierte Assemblies gregCore.* ersetzt - lib/MoonSharp und lib/references entfernt (NuGet bzw. references/) - ci-stubs, mods-Payload und unknown_hooks.json entfernt - references/ als Symlinks auf Game-Installation + README - IGregAPI.Version auf 1.2.3, Hook-Counts auf 1850 angehoben * build: Release-Basisversion 1.2.3 setzen - VERSION auf 1.2.3, Dev-Builds stempeln weiter -dev.0 - build.sh Dual-Profil Release 1.2.3 / Debug 1.2.3-dev.0 * chore(scripts): Mirror-Sync-Skript und Skript-Doku * docs: README/CHANGELOG/Architecture und Governance finalisieren - Offene-Source-Doku für den 1.2.3-Release abgeschlossen - Steam-Workshop-Profil in den README-Links ergänzt - Branch-Protection, INDEX, ARCHITECTURE, CODE_OF_CONDUCT, SECURITY * test: GameApiGenerator, Coverage-Tools und neue Tests - GameApiGenerator + regenerate Scripts unter tools/ - check-coverage.sh und coverage-baseline.txt - neue Unit-Tests (GameApiRegistry, RamAlert, DemandPlanner) und tests/README * fix: Save-Sanitize berührt Singleton im Hauptmenü nicht mehr LoadGame-Postfix nutzt das zurückgegebene Save; void-Einstiege nur in Spiel-Szenen (Menü-Vorschaudaten brauchen kein Sanitize). * feat(ui): Menü-Closer + ehrliche Hub-Buttons - RegisterCloser/TryClose, HasCloser im Snapshot - Hub: Schließen nur mit Closer, interne greg.*-Menüs ausgeblendet * feat(ui): DevConsole mit Unity-Log-Feed - Subscribed Unity-Log (Fehler/Warnungen aus Spiel + Mods), Thread-sicher queued, Anzeige im Update, Duplikat-Schutz - Menü-ID greg.console für Input-Lock * feat: save inventory with stable invisible UIDs for mods GregSaveInventory inventories everything in the save on load (servers, switches, routers, firewalls, patch panels, cables, SFP modules, LACP groups) and tags each entry with a stable UID invisible to the player. Server/switch/patch-panel reuse their gregID; cables/LACP derive deterministic UIDs from vanilla IDs; router/firewall/SFP persist via sidecar (greg_inventory.<save>.tsv) with index-shift repair via hints. Mods resolve entries directly (TryFindLive/TryGetUid/GetAll/Rebuilt). Hooked into the load path via LoadNetworkState postfix in GregSaveGuard. Tests: 18 new cases (pure helpers), full suite 135/135 green. * feat: entity inventory display split, control surface, rename - Rename GregSaveInventory -> GregEntityInventory (user vocabulary). - Display/persistence split: gameObject.name stays vanilla, ServerID/ switchId/patchPanelId keep the persistent gregID; screen-scrub postfixes replace leaked gregID tokens with the vanilla designation (Server.UpdateServerScreenUI, NetworkSwitch.UpdateScreenUI). - Control surface: MelonPreferences gregCore.EntityInventory (Enabled/VerboseLogging/DumpOnRebuild) plus Dump() and Verify(). - Tests: ScrubGregIds/CleanDisplayName cases, suite 144/135 green. * refactor: Hardware-IDs als eigenstaendiges Single-Scheme-System - Keine Fremd-Schema-Adoption mehr: genau ein stabiles Schema (gregID), alles andere wird exakt einmal ueberfuehrt (live + Save-Healing). - CleanId nur fuer numerische GetInstanceID-Suffixe, Null-Guards pro Healing-Eintrag, Log-Dedup per ID-String, [gregCore][HwId]-Logs, Idpatch-Typo korrigiert. * feat: 404-PersistentID-Mod bei Erkennung automatisch entpatchen IncompatibleModGuard (Name-/Assembly-Erkennung, UnpatchSelf) laeuft bei Mod-Init und Szenen-Laden; Log-Warnung + Toast einmal pro Sitzung. gregID bleibt damit garantiert das einzige ID-System. * refactor: Hardware-ID-System sichtbar als eigene Implementierung Greg*-Patch-Klassennamen, Startup-Kennung im Log, eigene Doku (docs/modding/hardware-ids.md) + README-Eintrag. * refactor: HwId system fully in short English Logs, comments, docs, README and changelog in English; startup line: HWID SYSTEM ACTIVE. * refactor: shorten all HwId logs, keep them informative * feat: Hub/SettingsHub-Ausbau und Mod-Autoren-Doku (modding/) * fix: codacy codeline limits for entity inventory Split GregEntityInventory into three partial files (API, collectors, codec/config) and slim RebuildFromNetworkData via FreshData + CollectAll/PublishFresh helpers. Extract PatchLoadNetworkState from GregSaveGuard.Install. No behavior change (build clean, 144/144 green). * fix: codacy empty-catch findings with documented rationale Add ignore comments to all bare catch blocks in PR scope (defensive best-effort per CONVENTIONS.md). Comment-only change, no behavior change (build clean, 144/144 green). * fix: codacy trivial findings batch (overloads, properties, comments) Overload chains instead of optional parameters (GregAPI, proxies, ModConfigSystem getters/setters); DTO public fields to auto-properties (source-compatible, no serialization impact); empty-method and switch fixes; const to static property; discard without unused local; field init. Verified hunk-by-hunk, foreign work untouched (build clean, 144/144 green). * fix: codacy empty-catch comments, batch 2 (comment-only) Same documented rationale as previous batch. Verified pure comment diffs (added == deleted == marker count); files with foreign work-in-progress excluded. * fix: codacy long ctor (GameAPIManager 256 lines split) Split delegate wiring into Bind*/FillTable* helpers (all under 30 lines), drop readonly where helpers assign (logger stays readonly). Generated mechanically from exact source lines, order preserved. Build clean, 144/144 green. * fix: codacy method/file findings batch (extractions, splits) GameAPIManager ctor, ModConfigSystem lifecycle/intercept/parse building blocks, RustFFI table binding, TechnicianHiring flow split into small helpers; ModConfigSystem and GregNetworkDeviceSaves split into partials; SliderOptions replaces 9-param overload; AGENTS.md link fixed. No behavior change (build clean, 144/144 green). * fix: codacy long InteractOnClick postfix split Pickup/drop flow extracted into small helpers (identity resolve per device family, rack-uid coalesce via shared UsableObject properties, stable-id apply). No behavior change (build clean, 144/144 green). * fix: codacy long rack/worldsync methods split MarkPositionAsUsed postfix and ProcessNewObject extracted into small helpers (identity resolve per family, rack-uid coalesce, record/fire). No behavior change (build clean). * docs: Modding-Guide auf Stand (PortSpeedMemory, RGB-Animator, Bulk-Snapshot, FAQ) * feat: entity-inventory Kompatibilitaet * feat: entity-inventory und Networking-Saves (WIP-Stand) * feat: GregMenuBinding, GregShopItems primitives, GregHost template + docs * feat: complete Greg.LUA SDK for complex mods New: greg.switch (mirror of server), greg.tech (technicians), greg.config + greg.save (JSON file-backed per-mod stores), greg.json (parse/stringify). Extended: server (power/ip/customer/find/get_list), io aliases (read_text, write_text) + read_json/write_json. Fixed io double-data-dir quirk with lossless migration. Crash-safe logging for headless/test contexts. Docs rewritten to exact implementation, fleet_doctor showcase example. Tests: 9 headless Lua SDK cases, suite 153/153 green. * docs: shop-items adoption note (standalone vs hard dep) * docs: hard-dependency playbook with per-mod verdicts * feat: LUA covers framework (patch/customer/economy/shop/net/mods/tablet/subnet/requests/items) New greg.* tables for patch panels, customers, economy (read-only), shop (catalog/unlock/buy/cart), network save data (read-only), mod registry/deps, tablets/widgets with Lua callbacks, subnet math, service requests, custom item registration. world.open_all_walls. Docs match implementation exactly. Tests: 21 headless Lua cases, suite 165/165 green. * feat: LUA tech extended + coverage gaps closed tech.list/send_to_server/send_to_switch/hire/fire via GregTechnicians (ID-based resolution); doc updated. Suite 165/165 green. * feat: LUA modsave module (per-save mod data) greg.modsave.list/upsert/remove against SaveData.modItemData with manual Vector3/Quaternion mapping. Completes the Lua persistence story (file-backed greg.save + save-bound modsave). * feat: C# SDK parity (log/toast/menu/shop/sidecar) + script HotLoad in main menu * feat: UI-focused JS/TS SDK (per-mod engines, HotLoad, greg.d.ts) + EN * docs: JS/TS UI SDK wiki (per-mod runtime, HotLoad, greg.d.ts) + stale beta claims fixed * fix: LUA splitter repairs + round-3 test coverage Restore dropped greg assignments/aliases, fix Tablet/greg shadowing, remove duplicate append_file, add tests for all round-3 ops (30 Lua cases). Suite green. * chore: remove dead GregEventJsModule (empty, unreferenced) * docs: LUA reference round 3 (server/patch/rack/cable/shop/tech/modsave/setip) * feat: LUA round 4 (internet/settings/objectives/tooltip/coop/misc) internet endpoints + command center, game audio settings, tutorials + objectives CRUD, tooltips, coop peers/session, steam/locale/numpad/pause helpers, tech.request_next_job. Docs match implementation. Build green. * feat: LUA SDK split + round 3/4 coverage (100% framework) Split all long Register methods into small helpers (Codacy limits); new tables: patch, customer, economy, shop, net, mods, tablet, subnet, requests, items, modsave, internet, settings, objectives, tooltip, coop, misc + server/patch/rack/cable/shop/tech extensions; docs exact; 36 headless Lua tests. Suite 202/202 green. * feat: LUA bridge wires round-4 modules + computer module + registry Registers internet/settings/objectives/tooltip/coop/misc/modsave tables and auto-registers Lua mods in GregModRegistry (visible in greg.mods). Includes computer-module wiring. Build green, suite 202/202. * feat: LUA objectives video flows * feat: LUA customer find_base + splitter table-var fixes * feat: GregPatches safe-patch helper + GregCables.FindByServer * feat: LUA customer find_base + smoke test + doc touch-ups * feat: LUA customer apply_save + requests.add (+ headless-finalizer guard) * integrate: menus/shop/patches/SDK/HotLoad/JS APIs + fixes (linear, no merge) * perf: EnsureAllRackPositionUIDs via NetworkMap first, FindObjects fallback * docs: top-level Hooks/Glossary/FAQ sidebar, Rust track, content updates * style: convention comments on empty catches (Codacy) * docs: sidebar order Guidebook-Core-Hooks-Glossary-FAQ like Oxide * fix: bt-merge follow-up (else-Duplikate, patchPanels-Fallback) * chore: Codacy-Skills-Pass (lokaler Scan + Regel-Tuning) Analysis-CLI (19 Tools): 378 -> 117 Findings. Echt gefixt: existsSync-Import, /* global greg */ im JS-Example, leere README-Badges, Node-Globals (eslint.config.mjs + in-source), tote game_hooks-Ladung, tote dst-Variable, Dockerfile USER+HEALTHCHECK. Getunt (codacy.config.json): Agentlinter-Completeness-Nags (17, AGENTS.md folgt eigenem Standard), Markdown-Stilpatterns (41, nur MD042/MD052 behalten), Lizard-Groessenschwellen (4, passen nicht zur Codebase), steamdesc.md exkludiert (Steam-BBCode). Geprueft-offen (Patterns aktiv): Asserts im Validator (CI ruft plain auf), token-Name (Semver-Klassifizierer), git-Subprocess (eigene Repo-Daten), Rust-unsafe (bewachte ABI-Grenze), C# Path.Combine (MelonEnvironment-Pfad), non-literal-fs (operator-kontrolliertes Build-Skript), Python-greg (host-injiziert), Go-CGo-Signaturen (ABI-fix), DOCKER_7 (gepinnt via ARG). Build 0 Fehler, 264/264 Tests gruen. * chore: Coverage-Upload nach Codacy verdrahten (Part 3) - CI (Forgejo): Tests mit XPlat-Coverage sammeln + Reporter-Upload (braucht CODACY_PROJECT_TOKEN als Actions-Secret, sonst Skip). - coverlet.collector 10.0.1 -> 6.0.4 (passt zu Test-SDK 17.8 + coverlet.msbuild 6.0.4; v10 lieferte keinen DataCollector). * refactor: Codacy complexity fixes for gregCore APIs (helpers split, ShopButtonSpec) * refactor: clear remaining Codacy warnings (Spec-only AddButton, Install/BuildUI split) * refactor: clear Codacy complexity gate (helper splits, partials, FFI excludes) * fix: clear SonarCSharp gate findings (properties, overloads, catches, discards, FFI suppressions) * fix: clear SonarCSharp layer 2 (catches, discards, props, overloads, IEquatable) * fix: clear SonarCSharp layer 3 (S1172/S2386 suppressions, overloads, tuple API, nosemgrep) * fix: clear SonarCSharp layer 4 (S1172/S2386, taint nosemgrep, props, overloads) * fix: clear SonarCSharp layer 5 (props, overloads, S1172/S2386, nosemgrep, tuple API) * fix: clear SonarCSharp layer 6 (props, overloads, S1172/S2386, IEquatable, tuple APIs) * fix: clear SonarCSharp layer 7 (props, S2386 props, IEquatable+operators, S1118, overloads) * fix: clear SonarCSharp layer 8 (overloads, tuples, S2696, IEquatable+ops, defaults) * chore: drop accidentally committed pycache artifact * fix: clear SonarCSharp layer 9 (GameAPITable split+chunked equality, overloads, props) * refactor: break semgrep taint chain (GregIoFileStore sink split) * fix: clear SonarCSharp layer 10 (getter-props, overloads, tuple APIs, dead code) * fix: bulk sweep (discards, catch comments, const props) + verify blob lines * fix: drop unneeded ref param (RouteClicks) * fix: clear SonarCSharp layer 12 (overloads, tuples, IEquatable, templates) * fix: final valid findings (props, twins, S1172, dead params) * fix: tuples, overloads, template lint headers, test helpers * fix: overloads, S1313/S1172, dead params, test helpers * fix: tool script nits (catch comment, Find braces) * chore: residual Codacy cleanup (coverage scanner clarity) * docs: refresh wiki API references (ShopButtonSpec, click-router signatures) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) (#298) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real CI URLs, Jenkins webhook done, Mantis REST nginx fix * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real public URLs, Jenkins webhook done, Mantis REST nginx fix * fix: PSScriptAnalyzer Write-Host, editor catch comment * fix: editor catch comment * ⚡ Bolt: Optimize FindAllBases to use NetworkMap
…311) * release: dev to main (gregCore consolidation + wiki refresh) * 🛡️ Sentinel: [CRITICAL] Fix Path Traversal in Lua list_files (#294) * I am addressing the Sentinel alert to fix the path traversal vulnerability in the Lua file listing logic. * I have resolved the Sentinel security alert by fixing the path traversal vulnerability in the Lua file listing logic. * Perf opt gamehooks 11443369995706449354 (#295) * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * Fix compilation error: safely TryCast INetworkEndpoint to specific components * chore: merge all branches to dev (menus, shop, patches, SDKs, HotLoad, fixes) * feat: consolidate GregCore integration and release flow Integrate the reviewed security and performance changes, establish bounded runtime services, add contributor and maintainer documentation, and enforce the dev to pre-release to main promotion model. * docs: record branch consolidation and cleanup Document the chronological branch audit, retained promotion branches, and rejected changes from redundant automation proposals. * refactor(multiplayer): remove custom networking stack Keep the legacy Rust FFI v7 table layout stable while making its Steam and P2P slots inert. Document the native Unity/Data Center/Steamworks boundary from the local reference assemblies. * docs(changelog): record integration commit history Record the native multiplayer removal and the preceding branch/release integration commits in the Keep-a-Changelog ledger. * chore: remove obsolete FishNet agent instructions The native Data Center co-op boundary supersedes the former FishNet design guidance. * docs(changelog): record FishNet guidance cleanup Record the obsolete agent-instruction cleanup in the commit ledger. * feat(ui): Tasten-HUD und zentrales F1-Mod-Hub - GregHudRegistry/GregHud: Hotkey-Leiste am rechten Rand (HUD-Layer) - GregModHub (F1): Mod-/Menue-Liste mit Oeffnen-Buttons (Click-Routing) - GregMenuRegistry: RegisterOpener/TryOpen/Snapshot (+MenuInfo) - F1-Tick in GregCoreMod.OnUpdate * feat(mods): ModPackConfig-Erweiterung + ModItemSaveData-Persistenz - GregModPack: Builder und typ-sicherer Reader (Snapshot) fuer ModPackConfig/ShopItemConfig/StaticItemConfig/DllEntry - GregModSave: DTO plus Create/Fill/Read/Upsert/Remove fuer ModItemSaveData (SaveData.modItemData, Key modFolderName) * feat(mods): Custom Items via Vanilla-ModLoader laden - GregObjImport: validierter .obj-Import (Endung, Existenz, Traversal-Schutz, 64MB-Limit, Vertex-Check) - GregCustomItems: RegisterShopItem/RegisterStaticItem aus DTO + Pack-Ordner (Mesh-Vorabcheck), GetPrefab per Folder-Name * feat(net): Networking-Batch (PatchPanels, SetIP, ServiceRequests, Server) - GregPatchPanels: Save-DTO + Runtime-Brücke (Capture, InsertIntoRack, FindAll/ById, Cable-/Rack-Checks) - GregSetIP: Keypad-Fund, Subnetzmathe (Vanilla + Fallback), Show/Cancel - GregServiceRequests: Save-Snapshot, AddRequest/LoadFromSave/RebuildUI, ServiceRequestRow-Helfer - GregServers: ServerSaveData-DTO + Aktionen (SetIP, Power, Customer/App, Repair, Warning) * feat(net): Save-DTOs fuer Netzwerk-Devices (Batch A.1) Router (Routen/Subnetze), Firewall (Filterregeln), SFP, LACP (Upsert), Kabel + Endpunkte (Upsert), Link-Labels, Port-VLAN-Filter. * feat(net): Save-DTOs fuer Kunden + Wirtschaft (Batch A.2) CustomerBase (Upsert per ID, Dict-/Array-Brücken), CustomerRecord, MonthlySnapshot, BalanceSheet. Dazu Bool-Arrays in GregModPack. * feat(net): Save-DTOs fuer Jobs + Interacts (Batch A.3) Technician, RepairJob, InteractObject (Upsert per uid). Ctor-Hinweis: Technician-/InteractObjectData brauchen Vanilla-Live-Objekte (null best-effort). * docs: CHANGELOG fuer Save-Batch A * feat(net): Live-Brücke für Router + Firewall (Batch B.1) Finden per switchId, Subnetze/Routen verwalten, Regeln verwalten, Cluster-Sync, Traffic-Check. * feat(net): Live-Brücken für SFP, Rack und Templates (Batch B.2) SFP-Module/Box, RackTür/Mount, RackTemplateStore + Applier (Il2Cpp- Coroutine-Pumpe). Mount-templateId existiert runtime-seitig nicht. * feat(net): Shop-Brücke + nativer ColorPicker (Batch C) ShopItemSO/ShopItem/ShopCartItem/ModShopItem lesen und bedienen, FlexibleColorPicker öffnen/Farbe setzen/lesen/abbrechen. * feat(net): Objectives, CIDR-Helper, Device-Timer (Batch D.1) * feat(net): Customer-Brücke live (Batch D.2) Finden per customerID/baseID, Base-/Item-DTOs, IP-Lookup, Routed- Subnets, LoadData-Brücke, CustomerCard. * feat(net): Coop-Brücke (Batch E) Session, Peers/Avatare, Held-Items, Loose-Items, Trolley-Ghosts, Chat. * feat(mods): Abhängigkeits-Gating + Manifest-Diff für ModSync Declare/EnsureLoaded/CheckAll (Mindestversionen), GetLocalManifest/ DiffManifests/FormatDiff für Coop-Vergleich. 12 neue Unit-Tests. * feat(net): Rack- und Trolley-Brücke (Batch F) Rack-Positionen prüfen/markieren, RackPosition per UID, Trolley-Bays, Wandcheck, CarryModelPool. Coroutine-Pumpe assembly-intern geteilt. * feat(net): Kabel-Brücke live (Batch G) Finden (alle/switchId/Typ), LinkInfo-DTO, Speed setzen, SFP rein/raus, Second-/Label-Action, Rope-Anker. CableIDComponent ohne öffentliche Member — ausgelassen. * feat(net): Techniker-Brücke (Batch H) Finden/lesen, reparieren, Jobs zuweisen, Manager (senden, feuern, Queue-Restore), HR-Dialoge. * feat(net): Internet- und Dienst-Brücke (Batch I) Internet-Endpunkte, CommandCenter (Level, AutoRepair, Up-/Downgrade), Angriffs-Manager. * feat(net): Angriffs-Eskalation über Zeit (Stufen) Intervalle kürzer, Spawn-Rate/Speed höher pro Stufe (Vanilla-Basis wird gelesen). 4 neue Unit-Tests. * 🛡️ Sentinel: [HIGH] Fix path traversal in io.list_files() * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * feat(net): Numpad-Brücke (Batch J) Zahl lesen, Tasten drücken (Ziffern, OK, Del, Clear, Copy, Paste). * feat(net): Steam-Leaderboards-Brücke (Nische N.1) * feat(net): Spiel-Lautstärken-Brücke (Nische N.2) * feat(net): Localisation + Vanilla-Tooltips (Nische N.3a) * feat(net): PauseMenü-Callbacks + Tutorials (Nische N.3b) * feat(net): Tore/Wände + Steam-Lobby/Avatar (Nische N.3c) * chore: Claude-Lokaleinstellungen nicht versionieren * feat(ci): CI von GitHub auf Forgejo/Gitea umstellen - .github/workflows entfernt, Workflows nach .forgejo/ und .gitea/ verschoben - mirror-github.yml für den GitHub-Mirror ergänzt * feat(quality): Codacy CLI und Konfiguration ergänzen * refactor: Quellbaum in gregCore.*-Assemblies umbauen - Monolith-Layout durch projektbasierte Assemblies gregCore.* ersetzt - lib/MoonSharp und lib/references entfernt (NuGet bzw. references/) - ci-stubs, mods-Payload und unknown_hooks.json entfernt - references/ als Symlinks auf Game-Installation + README - IGregAPI.Version auf 1.2.3, Hook-Counts auf 1850 angehoben * build: Release-Basisversion 1.2.3 setzen - VERSION auf 1.2.3, Dev-Builds stempeln weiter -dev.0 - build.sh Dual-Profil Release 1.2.3 / Debug 1.2.3-dev.0 * chore(scripts): Mirror-Sync-Skript und Skript-Doku * docs: README/CHANGELOG/Architecture und Governance finalisieren - Offene-Source-Doku für den 1.2.3-Release abgeschlossen - Steam-Workshop-Profil in den README-Links ergänzt - Branch-Protection, INDEX, ARCHITECTURE, CODE_OF_CONDUCT, SECURITY * test: GameApiGenerator, Coverage-Tools und neue Tests - GameApiGenerator + regenerate Scripts unter tools/ - check-coverage.sh und coverage-baseline.txt - neue Unit-Tests (GameApiRegistry, RamAlert, DemandPlanner) und tests/README * fix: Save-Sanitize berührt Singleton im Hauptmenü nicht mehr LoadGame-Postfix nutzt das zurückgegebene Save; void-Einstiege nur in Spiel-Szenen (Menü-Vorschaudaten brauchen kein Sanitize). * feat(ui): Menü-Closer + ehrliche Hub-Buttons - RegisterCloser/TryClose, HasCloser im Snapshot - Hub: Schließen nur mit Closer, interne greg.*-Menüs ausgeblendet * feat(ui): DevConsole mit Unity-Log-Feed - Subscribed Unity-Log (Fehler/Warnungen aus Spiel + Mods), Thread-sicher queued, Anzeige im Update, Duplikat-Schutz - Menü-ID greg.console für Input-Lock * feat: save inventory with stable invisible UIDs for mods GregSaveInventory inventories everything in the save on load (servers, switches, routers, firewalls, patch panels, cables, SFP modules, LACP groups) and tags each entry with a stable UID invisible to the player. Server/switch/patch-panel reuse their gregID; cables/LACP derive deterministic UIDs from vanilla IDs; router/firewall/SFP persist via sidecar (greg_inventory.<save>.tsv) with index-shift repair via hints. Mods resolve entries directly (TryFindLive/TryGetUid/GetAll/Rebuilt). Hooked into the load path via LoadNetworkState postfix in GregSaveGuard. Tests: 18 new cases (pure helpers), full suite 135/135 green. * feat: entity inventory display split, control surface, rename - Rename GregSaveInventory -> GregEntityInventory (user vocabulary). - Display/persistence split: gameObject.name stays vanilla, ServerID/ switchId/patchPanelId keep the persistent gregID; screen-scrub postfixes replace leaked gregID tokens with the vanilla designation (Server.UpdateServerScreenUI, NetworkSwitch.UpdateScreenUI). - Control surface: MelonPreferences gregCore.EntityInventory (Enabled/VerboseLogging/DumpOnRebuild) plus Dump() and Verify(). - Tests: ScrubGregIds/CleanDisplayName cases, suite 144/135 green. * refactor: Hardware-IDs als eigenstaendiges Single-Scheme-System - Keine Fremd-Schema-Adoption mehr: genau ein stabiles Schema (gregID), alles andere wird exakt einmal ueberfuehrt (live + Save-Healing). - CleanId nur fuer numerische GetInstanceID-Suffixe, Null-Guards pro Healing-Eintrag, Log-Dedup per ID-String, [gregCore][HwId]-Logs, Idpatch-Typo korrigiert. * feat: 404-PersistentID-Mod bei Erkennung automatisch entpatchen IncompatibleModGuard (Name-/Assembly-Erkennung, UnpatchSelf) laeuft bei Mod-Init und Szenen-Laden; Log-Warnung + Toast einmal pro Sitzung. gregID bleibt damit garantiert das einzige ID-System. * refactor: Hardware-ID-System sichtbar als eigene Implementierung Greg*-Patch-Klassennamen, Startup-Kennung im Log, eigene Doku (docs/modding/hardware-ids.md) + README-Eintrag. * refactor: HwId system fully in short English Logs, comments, docs, README and changelog in English; startup line: HWID SYSTEM ACTIVE. * refactor: shorten all HwId logs, keep them informative * feat: Hub/SettingsHub-Ausbau und Mod-Autoren-Doku (modding/) * fix: codacy codeline limits for entity inventory Split GregEntityInventory into three partial files (API, collectors, codec/config) and slim RebuildFromNetworkData via FreshData + CollectAll/PublishFresh helpers. Extract PatchLoadNetworkState from GregSaveGuard.Install. No behavior change (build clean, 144/144 green). * fix: codacy empty-catch findings with documented rationale Add ignore comments to all bare catch blocks in PR scope (defensive best-effort per CONVENTIONS.md). Comment-only change, no behavior change (build clean, 144/144 green). * fix: codacy trivial findings batch (overloads, properties, comments) Overload chains instead of optional parameters (GregAPI, proxies, ModConfigSystem getters/setters); DTO public fields to auto-properties (source-compatible, no serialization impact); empty-method and switch fixes; const to static property; discard without unused local; field init. Verified hunk-by-hunk, foreign work untouched (build clean, 144/144 green). * fix: codacy empty-catch comments, batch 2 (comment-only) Same documented rationale as previous batch. Verified pure comment diffs (added == deleted == marker count); files with foreign work-in-progress excluded. * fix: codacy long ctor (GameAPIManager 256 lines split) Split delegate wiring into Bind*/FillTable* helpers (all under 30 lines), drop readonly where helpers assign (logger stays readonly). Generated mechanically from exact source lines, order preserved. Build clean, 144/144 green. * fix: codacy method/file findings batch (extractions, splits) GameAPIManager ctor, ModConfigSystem lifecycle/intercept/parse building blocks, RustFFI table binding, TechnicianHiring flow split into small helpers; ModConfigSystem and GregNetworkDeviceSaves split into partials; SliderOptions replaces 9-param overload; AGENTS.md link fixed. No behavior change (build clean, 144/144 green). * fix: codacy long InteractOnClick postfix split Pickup/drop flow extracted into small helpers (identity resolve per device family, rack-uid coalesce via shared UsableObject properties, stable-id apply). No behavior change (build clean, 144/144 green). * fix: codacy long rack/worldsync methods split MarkPositionAsUsed postfix and ProcessNewObject extracted into small helpers (identity resolve per family, rack-uid coalesce, record/fire). No behavior change (build clean). * docs: Modding-Guide auf Stand (PortSpeedMemory, RGB-Animator, Bulk-Snapshot, FAQ) * feat: entity-inventory Kompatibilitaet * feat: entity-inventory und Networking-Saves (WIP-Stand) * feat: GregMenuBinding, GregShopItems primitives, GregHost template + docs * feat: complete Greg.LUA SDK for complex mods New: greg.switch (mirror of server), greg.tech (technicians), greg.config + greg.save (JSON file-backed per-mod stores), greg.json (parse/stringify). Extended: server (power/ip/customer/find/get_list), io aliases (read_text, write_text) + read_json/write_json. Fixed io double-data-dir quirk with lossless migration. Crash-safe logging for headless/test contexts. Docs rewritten to exact implementation, fleet_doctor showcase example. Tests: 9 headless Lua SDK cases, suite 153/153 green. * docs: shop-items adoption note (standalone vs hard dep) * docs: hard-dependency playbook with per-mod verdicts * feat: LUA covers framework (patch/customer/economy/shop/net/mods/tablet/subnet/requests/items) New greg.* tables for patch panels, customers, economy (read-only), shop (catalog/unlock/buy/cart), network save data (read-only), mod registry/deps, tablets/widgets with Lua callbacks, subnet math, service requests, custom item registration. world.open_all_walls. Docs match implementation exactly. Tests: 21 headless Lua cases, suite 165/165 green. * feat: LUA tech extended + coverage gaps closed tech.list/send_to_server/send_to_switch/hire/fire via GregTechnicians (ID-based resolution); doc updated. Suite 165/165 green. * feat: LUA modsave module (per-save mod data) greg.modsave.list/upsert/remove against SaveData.modItemData with manual Vector3/Quaternion mapping. Completes the Lua persistence story (file-backed greg.save + save-bound modsave). * feat: C# SDK parity (log/toast/menu/shop/sidecar) + script HotLoad in main menu * feat: UI-focused JS/TS SDK (per-mod engines, HotLoad, greg.d.ts) + EN * docs: JS/TS UI SDK wiki (per-mod runtime, HotLoad, greg.d.ts) + stale beta claims fixed * fix: LUA splitter repairs + round-3 test coverage Restore dropped greg assignments/aliases, fix Tablet/greg shadowing, remove duplicate append_file, add tests for all round-3 ops (30 Lua cases). Suite green. * chore: remove dead GregEventJsModule (empty, unreferenced) * docs: LUA reference round 3 (server/patch/rack/cable/shop/tech/modsave/setip) * feat: LUA round 4 (internet/settings/objectives/tooltip/coop/misc) internet endpoints + command center, game audio settings, tutorials + objectives CRUD, tooltips, coop peers/session, steam/locale/numpad/pause helpers, tech.request_next_job. Docs match implementation. Build green. * feat: LUA SDK split + round 3/4 coverage (100% framework) Split all long Register methods into small helpers (Codacy limits); new tables: patch, customer, economy, shop, net, mods, tablet, subnet, requests, items, modsave, internet, settings, objectives, tooltip, coop, misc + server/patch/rack/cable/shop/tech extensions; docs exact; 36 headless Lua tests. Suite 202/202 green. * feat: LUA bridge wires round-4 modules + computer module + registry Registers internet/settings/objectives/tooltip/coop/misc/modsave tables and auto-registers Lua mods in GregModRegistry (visible in greg.mods). Includes computer-module wiring. Build green, suite 202/202. * feat: LUA objectives video flows * feat: LUA customer find_base + splitter table-var fixes * feat: GregPatches safe-patch helper + GregCables.FindByServer * feat: LUA customer find_base + smoke test + doc touch-ups * feat: LUA customer apply_save + requests.add (+ headless-finalizer guard) * integrate: menus/shop/patches/SDK/HotLoad/JS APIs + fixes (linear, no merge) * perf: EnsureAllRackPositionUIDs via NetworkMap first, FindObjects fallback * docs: top-level Hooks/Glossary/FAQ sidebar, Rust track, content updates * style: convention comments on empty catches (Codacy) * docs: sidebar order Guidebook-Core-Hooks-Glossary-FAQ like Oxide * fix: bt-merge follow-up (else-Duplikate, patchPanels-Fallback) * chore: Codacy-Skills-Pass (lokaler Scan + Regel-Tuning) Analysis-CLI (19 Tools): 378 -> 117 Findings. Echt gefixt: existsSync-Import, /* global greg */ im JS-Example, leere README-Badges, Node-Globals (eslint.config.mjs + in-source), tote game_hooks-Ladung, tote dst-Variable, Dockerfile USER+HEALTHCHECK. Getunt (codacy.config.json): Agentlinter-Completeness-Nags (17, AGENTS.md folgt eigenem Standard), Markdown-Stilpatterns (41, nur MD042/MD052 behalten), Lizard-Groessenschwellen (4, passen nicht zur Codebase), steamdesc.md exkludiert (Steam-BBCode). Geprueft-offen (Patterns aktiv): Asserts im Validator (CI ruft plain auf), token-Name (Semver-Klassifizierer), git-Subprocess (eigene Repo-Daten), Rust-unsafe (bewachte ABI-Grenze), C# Path.Combine (MelonEnvironment-Pfad), non-literal-fs (operator-kontrolliertes Build-Skript), Python-greg (host-injiziert), Go-CGo-Signaturen (ABI-fix), DOCKER_7 (gepinnt via ARG). Build 0 Fehler, 264/264 Tests gruen. * chore: Coverage-Upload nach Codacy verdrahten (Part 3) - CI (Forgejo): Tests mit XPlat-Coverage sammeln + Reporter-Upload (braucht CODACY_PROJECT_TOKEN als Actions-Secret, sonst Skip). - coverlet.collector 10.0.1 -> 6.0.4 (passt zu Test-SDK 17.8 + coverlet.msbuild 6.0.4; v10 lieferte keinen DataCollector). * refactor: Codacy complexity fixes for gregCore APIs (helpers split, ShopButtonSpec) * refactor: clear remaining Codacy warnings (Spec-only AddButton, Install/BuildUI split) * refactor: clear Codacy complexity gate (helper splits, partials, FFI excludes) * fix: clear SonarCSharp gate findings (properties, overloads, catches, discards, FFI suppressions) * fix: clear SonarCSharp layer 2 (catches, discards, props, overloads, IEquatable) * fix: clear SonarCSharp layer 3 (S1172/S2386 suppressions, overloads, tuple API, nosemgrep) * fix: clear SonarCSharp layer 4 (S1172/S2386, taint nosemgrep, props, overloads) * fix: clear SonarCSharp layer 5 (props, overloads, S1172/S2386, nosemgrep, tuple API) * fix: clear SonarCSharp layer 6 (props, overloads, S1172/S2386, IEquatable, tuple APIs) * fix: clear SonarCSharp layer 7 (props, S2386 props, IEquatable+operators, S1118, overloads) * fix: clear SonarCSharp layer 8 (overloads, tuples, S2696, IEquatable+ops, defaults) * chore: drop accidentally committed pycache artifact * fix: clear SonarCSharp layer 9 (GameAPITable split+chunked equality, overloads, props) * refactor: break semgrep taint chain (GregIoFileStore sink split) * fix: clear SonarCSharp layer 10 (getter-props, overloads, tuple APIs, dead code) * fix: bulk sweep (discards, catch comments, const props) + verify blob lines * fix: drop unneeded ref param (RouteClicks) * fix: clear SonarCSharp layer 12 (overloads, tuples, IEquatable, templates) * fix: final valid findings (props, twins, S1172, dead params) * fix: tuples, overloads, template lint headers, test helpers * fix: overloads, S1313/S1172, dead params, test helpers * fix: tool script nits (catch comment, Find braces) * chore: residual Codacy cleanup (coverage scanner clarity) * docs: refresh wiki API references (ShopButtonSpec, click-router signatures) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) (#298) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real CI URLs, Jenkins webhook done, Mantis REST nginx fix * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real public URLs, Jenkins webhook done, Mantis REST nginx fix * fix: PSScriptAnalyzer Write-Host, editor catch comment * fix: editor catch comment * ⚡ Bolt: Optimized FindObjectsOfType in Patch_Rack_MarkPositionAsUsed Replaced O(N) `FindObjectsOfType<T>` calls with O(1) lookups using `Il2Cpp.NetworkMap.instance` dictionaries for servers, switches, and patch panels, falling back to `FindObjectsOfType<T>` when necessary.
…hes (#314) * release: dev to main (gregCore consolidation + wiki refresh) * 🛡️ Sentinel: [CRITICAL] Fix Path Traversal in Lua list_files (#294) * I am addressing the Sentinel alert to fix the path traversal vulnerability in the Lua file listing logic. * I have resolved the Sentinel security alert by fixing the path traversal vulnerability in the Lua file listing logic. * Perf opt gamehooks 11443369995706449354 (#295) * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * Fix compilation error: safely TryCast INetworkEndpoint to specific components * chore: merge all branches to dev (menus, shop, patches, SDKs, HotLoad, fixes) * feat: consolidate GregCore integration and release flow Integrate the reviewed security and performance changes, establish bounded runtime services, add contributor and maintainer documentation, and enforce the dev to pre-release to main promotion model. * docs: record branch consolidation and cleanup Document the chronological branch audit, retained promotion branches, and rejected changes from redundant automation proposals. * refactor(multiplayer): remove custom networking stack Keep the legacy Rust FFI v7 table layout stable while making its Steam and P2P slots inert. Document the native Unity/Data Center/Steamworks boundary from the local reference assemblies. * docs(changelog): record integration commit history Record the native multiplayer removal and the preceding branch/release integration commits in the Keep-a-Changelog ledger. * chore: remove obsolete FishNet agent instructions The native Data Center co-op boundary supersedes the former FishNet design guidance. * docs(changelog): record FishNet guidance cleanup Record the obsolete agent-instruction cleanup in the commit ledger. * feat(ui): Tasten-HUD und zentrales F1-Mod-Hub - GregHudRegistry/GregHud: Hotkey-Leiste am rechten Rand (HUD-Layer) - GregModHub (F1): Mod-/Menue-Liste mit Oeffnen-Buttons (Click-Routing) - GregMenuRegistry: RegisterOpener/TryOpen/Snapshot (+MenuInfo) - F1-Tick in GregCoreMod.OnUpdate * feat(mods): ModPackConfig-Erweiterung + ModItemSaveData-Persistenz - GregModPack: Builder und typ-sicherer Reader (Snapshot) fuer ModPackConfig/ShopItemConfig/StaticItemConfig/DllEntry - GregModSave: DTO plus Create/Fill/Read/Upsert/Remove fuer ModItemSaveData (SaveData.modItemData, Key modFolderName) * feat(mods): Custom Items via Vanilla-ModLoader laden - GregObjImport: validierter .obj-Import (Endung, Existenz, Traversal-Schutz, 64MB-Limit, Vertex-Check) - GregCustomItems: RegisterShopItem/RegisterStaticItem aus DTO + Pack-Ordner (Mesh-Vorabcheck), GetPrefab per Folder-Name * feat(net): Networking-Batch (PatchPanels, SetIP, ServiceRequests, Server) - GregPatchPanels: Save-DTO + Runtime-Brücke (Capture, InsertIntoRack, FindAll/ById, Cable-/Rack-Checks) - GregSetIP: Keypad-Fund, Subnetzmathe (Vanilla + Fallback), Show/Cancel - GregServiceRequests: Save-Snapshot, AddRequest/LoadFromSave/RebuildUI, ServiceRequestRow-Helfer - GregServers: ServerSaveData-DTO + Aktionen (SetIP, Power, Customer/App, Repair, Warning) * feat(net): Save-DTOs fuer Netzwerk-Devices (Batch A.1) Router (Routen/Subnetze), Firewall (Filterregeln), SFP, LACP (Upsert), Kabel + Endpunkte (Upsert), Link-Labels, Port-VLAN-Filter. * feat(net): Save-DTOs fuer Kunden + Wirtschaft (Batch A.2) CustomerBase (Upsert per ID, Dict-/Array-Brücken), CustomerRecord, MonthlySnapshot, BalanceSheet. Dazu Bool-Arrays in GregModPack. * feat(net): Save-DTOs fuer Jobs + Interacts (Batch A.3) Technician, RepairJob, InteractObject (Upsert per uid). Ctor-Hinweis: Technician-/InteractObjectData brauchen Vanilla-Live-Objekte (null best-effort). * docs: CHANGELOG fuer Save-Batch A * feat(net): Live-Brücke für Router + Firewall (Batch B.1) Finden per switchId, Subnetze/Routen verwalten, Regeln verwalten, Cluster-Sync, Traffic-Check. * feat(net): Live-Brücken für SFP, Rack und Templates (Batch B.2) SFP-Module/Box, RackTür/Mount, RackTemplateStore + Applier (Il2Cpp- Coroutine-Pumpe). Mount-templateId existiert runtime-seitig nicht. * feat(net): Shop-Brücke + nativer ColorPicker (Batch C) ShopItemSO/ShopItem/ShopCartItem/ModShopItem lesen und bedienen, FlexibleColorPicker öffnen/Farbe setzen/lesen/abbrechen. * feat(net): Objectives, CIDR-Helper, Device-Timer (Batch D.1) * feat(net): Customer-Brücke live (Batch D.2) Finden per customerID/baseID, Base-/Item-DTOs, IP-Lookup, Routed- Subnets, LoadData-Brücke, CustomerCard. * feat(net): Coop-Brücke (Batch E) Session, Peers/Avatare, Held-Items, Loose-Items, Trolley-Ghosts, Chat. * feat(mods): Abhängigkeits-Gating + Manifest-Diff für ModSync Declare/EnsureLoaded/CheckAll (Mindestversionen), GetLocalManifest/ DiffManifests/FormatDiff für Coop-Vergleich. 12 neue Unit-Tests. * feat(net): Rack- und Trolley-Brücke (Batch F) Rack-Positionen prüfen/markieren, RackPosition per UID, Trolley-Bays, Wandcheck, CarryModelPool. Coroutine-Pumpe assembly-intern geteilt. * feat(net): Kabel-Brücke live (Batch G) Finden (alle/switchId/Typ), LinkInfo-DTO, Speed setzen, SFP rein/raus, Second-/Label-Action, Rope-Anker. CableIDComponent ohne öffentliche Member — ausgelassen. * feat(net): Techniker-Brücke (Batch H) Finden/lesen, reparieren, Jobs zuweisen, Manager (senden, feuern, Queue-Restore), HR-Dialoge. * feat(net): Internet- und Dienst-Brücke (Batch I) Internet-Endpunkte, CommandCenter (Level, AutoRepair, Up-/Downgrade), Angriffs-Manager. * feat(net): Angriffs-Eskalation über Zeit (Stufen) Intervalle kürzer, Spawn-Rate/Speed höher pro Stufe (Vanilla-Basis wird gelesen). 4 neue Unit-Tests. * 🛡️ Sentinel: [HIGH] Fix path traversal in io.list_files() * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * feat(net): Numpad-Brücke (Batch J) Zahl lesen, Tasten drücken (Ziffern, OK, Del, Clear, Copy, Paste). * feat(net): Steam-Leaderboards-Brücke (Nische N.1) * feat(net): Spiel-Lautstärken-Brücke (Nische N.2) * feat(net): Localisation + Vanilla-Tooltips (Nische N.3a) * feat(net): PauseMenü-Callbacks + Tutorials (Nische N.3b) * feat(net): Tore/Wände + Steam-Lobby/Avatar (Nische N.3c) * chore: Claude-Lokaleinstellungen nicht versionieren * feat(ci): CI von GitHub auf Forgejo/Gitea umstellen - .github/workflows entfernt, Workflows nach .forgejo/ und .gitea/ verschoben - mirror-github.yml für den GitHub-Mirror ergänzt * feat(quality): Codacy CLI und Konfiguration ergänzen * refactor: Quellbaum in gregCore.*-Assemblies umbauen - Monolith-Layout durch projektbasierte Assemblies gregCore.* ersetzt - lib/MoonSharp und lib/references entfernt (NuGet bzw. references/) - ci-stubs, mods-Payload und unknown_hooks.json entfernt - references/ als Symlinks auf Game-Installation + README - IGregAPI.Version auf 1.2.3, Hook-Counts auf 1850 angehoben * build: Release-Basisversion 1.2.3 setzen - VERSION auf 1.2.3, Dev-Builds stempeln weiter -dev.0 - build.sh Dual-Profil Release 1.2.3 / Debug 1.2.3-dev.0 * chore(scripts): Mirror-Sync-Skript und Skript-Doku * docs: README/CHANGELOG/Architecture und Governance finalisieren - Offene-Source-Doku für den 1.2.3-Release abgeschlossen - Steam-Workshop-Profil in den README-Links ergänzt - Branch-Protection, INDEX, ARCHITECTURE, CODE_OF_CONDUCT, SECURITY * test: GameApiGenerator, Coverage-Tools und neue Tests - GameApiGenerator + regenerate Scripts unter tools/ - check-coverage.sh und coverage-baseline.txt - neue Unit-Tests (GameApiRegistry, RamAlert, DemandPlanner) und tests/README * fix: Save-Sanitize berührt Singleton im Hauptmenü nicht mehr LoadGame-Postfix nutzt das zurückgegebene Save; void-Einstiege nur in Spiel-Szenen (Menü-Vorschaudaten brauchen kein Sanitize). * feat(ui): Menü-Closer + ehrliche Hub-Buttons - RegisterCloser/TryClose, HasCloser im Snapshot - Hub: Schließen nur mit Closer, interne greg.*-Menüs ausgeblendet * feat(ui): DevConsole mit Unity-Log-Feed - Subscribed Unity-Log (Fehler/Warnungen aus Spiel + Mods), Thread-sicher queued, Anzeige im Update, Duplikat-Schutz - Menü-ID greg.console für Input-Lock * feat: save inventory with stable invisible UIDs for mods GregSaveInventory inventories everything in the save on load (servers, switches, routers, firewalls, patch panels, cables, SFP modules, LACP groups) and tags each entry with a stable UID invisible to the player. Server/switch/patch-panel reuse their gregID; cables/LACP derive deterministic UIDs from vanilla IDs; router/firewall/SFP persist via sidecar (greg_inventory.<save>.tsv) with index-shift repair via hints. Mods resolve entries directly (TryFindLive/TryGetUid/GetAll/Rebuilt). Hooked into the load path via LoadNetworkState postfix in GregSaveGuard. Tests: 18 new cases (pure helpers), full suite 135/135 green. * feat: entity inventory display split, control surface, rename - Rename GregSaveInventory -> GregEntityInventory (user vocabulary). - Display/persistence split: gameObject.name stays vanilla, ServerID/ switchId/patchPanelId keep the persistent gregID; screen-scrub postfixes replace leaked gregID tokens with the vanilla designation (Server.UpdateServerScreenUI, NetworkSwitch.UpdateScreenUI). - Control surface: MelonPreferences gregCore.EntityInventory (Enabled/VerboseLogging/DumpOnRebuild) plus Dump() and Verify(). - Tests: ScrubGregIds/CleanDisplayName cases, suite 144/135 green. * refactor: Hardware-IDs als eigenstaendiges Single-Scheme-System - Keine Fremd-Schema-Adoption mehr: genau ein stabiles Schema (gregID), alles andere wird exakt einmal ueberfuehrt (live + Save-Healing). - CleanId nur fuer numerische GetInstanceID-Suffixe, Null-Guards pro Healing-Eintrag, Log-Dedup per ID-String, [gregCore][HwId]-Logs, Idpatch-Typo korrigiert. * feat: 404-PersistentID-Mod bei Erkennung automatisch entpatchen IncompatibleModGuard (Name-/Assembly-Erkennung, UnpatchSelf) laeuft bei Mod-Init und Szenen-Laden; Log-Warnung + Toast einmal pro Sitzung. gregID bleibt damit garantiert das einzige ID-System. * refactor: Hardware-ID-System sichtbar als eigene Implementierung Greg*-Patch-Klassennamen, Startup-Kennung im Log, eigene Doku (docs/modding/hardware-ids.md) + README-Eintrag. * refactor: HwId system fully in short English Logs, comments, docs, README and changelog in English; startup line: HWID SYSTEM ACTIVE. * refactor: shorten all HwId logs, keep them informative * feat: Hub/SettingsHub-Ausbau und Mod-Autoren-Doku (modding/) * fix: codacy codeline limits for entity inventory Split GregEntityInventory into three partial files (API, collectors, codec/config) and slim RebuildFromNetworkData via FreshData + CollectAll/PublishFresh helpers. Extract PatchLoadNetworkState from GregSaveGuard.Install. No behavior change (build clean, 144/144 green). * fix: codacy empty-catch findings with documented rationale Add ignore comments to all bare catch blocks in PR scope (defensive best-effort per CONVENTIONS.md). Comment-only change, no behavior change (build clean, 144/144 green). * fix: codacy trivial findings batch (overloads, properties, comments) Overload chains instead of optional parameters (GregAPI, proxies, ModConfigSystem getters/setters); DTO public fields to auto-properties (source-compatible, no serialization impact); empty-method and switch fixes; const to static property; discard without unused local; field init. Verified hunk-by-hunk, foreign work untouched (build clean, 144/144 green). * fix: codacy empty-catch comments, batch 2 (comment-only) Same documented rationale as previous batch. Verified pure comment diffs (added == deleted == marker count); files with foreign work-in-progress excluded. * fix: codacy long ctor (GameAPIManager 256 lines split) Split delegate wiring into Bind*/FillTable* helpers (all under 30 lines), drop readonly where helpers assign (logger stays readonly). Generated mechanically from exact source lines, order preserved. Build clean, 144/144 green. * fix: codacy method/file findings batch (extractions, splits) GameAPIManager ctor, ModConfigSystem lifecycle/intercept/parse building blocks, RustFFI table binding, TechnicianHiring flow split into small helpers; ModConfigSystem and GregNetworkDeviceSaves split into partials; SliderOptions replaces 9-param overload; AGENTS.md link fixed. No behavior change (build clean, 144/144 green). * fix: codacy long InteractOnClick postfix split Pickup/drop flow extracted into small helpers (identity resolve per device family, rack-uid coalesce via shared UsableObject properties, stable-id apply). No behavior change (build clean, 144/144 green). * fix: codacy long rack/worldsync methods split MarkPositionAsUsed postfix and ProcessNewObject extracted into small helpers (identity resolve per family, rack-uid coalesce, record/fire). No behavior change (build clean). * docs: Modding-Guide auf Stand (PortSpeedMemory, RGB-Animator, Bulk-Snapshot, FAQ) * feat: entity-inventory Kompatibilitaet * feat: entity-inventory und Networking-Saves (WIP-Stand) * feat: GregMenuBinding, GregShopItems primitives, GregHost template + docs * feat: complete Greg.LUA SDK for complex mods New: greg.switch (mirror of server), greg.tech (technicians), greg.config + greg.save (JSON file-backed per-mod stores), greg.json (parse/stringify). Extended: server (power/ip/customer/find/get_list), io aliases (read_text, write_text) + read_json/write_json. Fixed io double-data-dir quirk with lossless migration. Crash-safe logging for headless/test contexts. Docs rewritten to exact implementation, fleet_doctor showcase example. Tests: 9 headless Lua SDK cases, suite 153/153 green. * docs: shop-items adoption note (standalone vs hard dep) * docs: hard-dependency playbook with per-mod verdicts * feat: LUA covers framework (patch/customer/economy/shop/net/mods/tablet/subnet/requests/items) New greg.* tables for patch panels, customers, economy (read-only), shop (catalog/unlock/buy/cart), network save data (read-only), mod registry/deps, tablets/widgets with Lua callbacks, subnet math, service requests, custom item registration. world.open_all_walls. Docs match implementation exactly. Tests: 21 headless Lua cases, suite 165/165 green. * feat: LUA tech extended + coverage gaps closed tech.list/send_to_server/send_to_switch/hire/fire via GregTechnicians (ID-based resolution); doc updated. Suite 165/165 green. * feat: LUA modsave module (per-save mod data) greg.modsave.list/upsert/remove against SaveData.modItemData with manual Vector3/Quaternion mapping. Completes the Lua persistence story (file-backed greg.save + save-bound modsave). * feat: C# SDK parity (log/toast/menu/shop/sidecar) + script HotLoad in main menu * feat: UI-focused JS/TS SDK (per-mod engines, HotLoad, greg.d.ts) + EN * docs: JS/TS UI SDK wiki (per-mod runtime, HotLoad, greg.d.ts) + stale beta claims fixed * fix: LUA splitter repairs + round-3 test coverage Restore dropped greg assignments/aliases, fix Tablet/greg shadowing, remove duplicate append_file, add tests for all round-3 ops (30 Lua cases). Suite green. * chore: remove dead GregEventJsModule (empty, unreferenced) * docs: LUA reference round 3 (server/patch/rack/cable/shop/tech/modsave/setip) * feat: LUA round 4 (internet/settings/objectives/tooltip/coop/misc) internet endpoints + command center, game audio settings, tutorials + objectives CRUD, tooltips, coop peers/session, steam/locale/numpad/pause helpers, tech.request_next_job. Docs match implementation. Build green. * feat: LUA SDK split + round 3/4 coverage (100% framework) Split all long Register methods into small helpers (Codacy limits); new tables: patch, customer, economy, shop, net, mods, tablet, subnet, requests, items, modsave, internet, settings, objectives, tooltip, coop, misc + server/patch/rack/cable/shop/tech extensions; docs exact; 36 headless Lua tests. Suite 202/202 green. * feat: LUA bridge wires round-4 modules + computer module + registry Registers internet/settings/objectives/tooltip/coop/misc/modsave tables and auto-registers Lua mods in GregModRegistry (visible in greg.mods). Includes computer-module wiring. Build green, suite 202/202. * feat: LUA objectives video flows * feat: LUA customer find_base + splitter table-var fixes * feat: GregPatches safe-patch helper + GregCables.FindByServer * feat: LUA customer find_base + smoke test + doc touch-ups * feat: LUA customer apply_save + requests.add (+ headless-finalizer guard) * integrate: menus/shop/patches/SDK/HotLoad/JS APIs + fixes (linear, no merge) * perf: EnsureAllRackPositionUIDs via NetworkMap first, FindObjects fallback * docs: top-level Hooks/Glossary/FAQ sidebar, Rust track, content updates * style: convention comments on empty catches (Codacy) * docs: sidebar order Guidebook-Core-Hooks-Glossary-FAQ like Oxide * fix: bt-merge follow-up (else-Duplikate, patchPanels-Fallback) * chore: Codacy-Skills-Pass (lokaler Scan + Regel-Tuning) Analysis-CLI (19 Tools): 378 -> 117 Findings. Echt gefixt: existsSync-Import, /* global greg */ im JS-Example, leere README-Badges, Node-Globals (eslint.config.mjs + in-source), tote game_hooks-Ladung, tote dst-Variable, Dockerfile USER+HEALTHCHECK. Getunt (codacy.config.json): Agentlinter-Completeness-Nags (17, AGENTS.md folgt eigenem Standard), Markdown-Stilpatterns (41, nur MD042/MD052 behalten), Lizard-Groessenschwellen (4, passen nicht zur Codebase), steamdesc.md exkludiert (Steam-BBCode). Geprueft-offen (Patterns aktiv): Asserts im Validator (CI ruft plain auf), token-Name (Semver-Klassifizierer), git-Subprocess (eigene Repo-Daten), Rust-unsafe (bewachte ABI-Grenze), C# Path.Combine (MelonEnvironment-Pfad), non-literal-fs (operator-kontrolliertes Build-Skript), Python-greg (host-injiziert), Go-CGo-Signaturen (ABI-fix), DOCKER_7 (gepinnt via ARG). Build 0 Fehler, 264/264 Tests gruen. * chore: Coverage-Upload nach Codacy verdrahten (Part 3) - CI (Forgejo): Tests mit XPlat-Coverage sammeln + Reporter-Upload (braucht CODACY_PROJECT_TOKEN als Actions-Secret, sonst Skip). - coverlet.collector 10.0.1 -> 6.0.4 (passt zu Test-SDK 17.8 + coverlet.msbuild 6.0.4; v10 lieferte keinen DataCollector). * refactor: Codacy complexity fixes for gregCore APIs (helpers split, ShopButtonSpec) * refactor: clear remaining Codacy warnings (Spec-only AddButton, Install/BuildUI split) * refactor: clear Codacy complexity gate (helper splits, partials, FFI excludes) * fix: clear SonarCSharp gate findings (properties, overloads, catches, discards, FFI suppressions) * fix: clear SonarCSharp layer 2 (catches, discards, props, overloads, IEquatable) * fix: clear SonarCSharp layer 3 (S1172/S2386 suppressions, overloads, tuple API, nosemgrep) * fix: clear SonarCSharp layer 4 (S1172/S2386, taint nosemgrep, props, overloads) * fix: clear SonarCSharp layer 5 (props, overloads, S1172/S2386, nosemgrep, tuple API) * fix: clear SonarCSharp layer 6 (props, overloads, S1172/S2386, IEquatable, tuple APIs) * fix: clear SonarCSharp layer 7 (props, S2386 props, IEquatable+operators, S1118, overloads) * fix: clear SonarCSharp layer 8 (overloads, tuples, S2696, IEquatable+ops, defaults) * chore: drop accidentally committed pycache artifact * fix: clear SonarCSharp layer 9 (GameAPITable split+chunked equality, overloads, props) * refactor: break semgrep taint chain (GregIoFileStore sink split) * fix: clear SonarCSharp layer 10 (getter-props, overloads, tuple APIs, dead code) * fix: bulk sweep (discards, catch comments, const props) + verify blob lines * fix: drop unneeded ref param (RouteClicks) * fix: clear SonarCSharp layer 12 (overloads, tuples, IEquatable, templates) * fix: final valid findings (props, twins, S1172, dead params) * fix: tuples, overloads, template lint headers, test helpers * fix: overloads, S1313/S1172, dead params, test helpers * fix: tool script nits (catch comment, Find braces) * chore: residual Codacy cleanup (coverage scanner clarity) * docs: refresh wiki API references (ShopButtonSpec, click-router signatures) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) (#298) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real CI URLs, Jenkins webhook done, Mantis REST nginx fix * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real public URLs, Jenkins webhook done, Mantis REST nginx fix * fix: PSScriptAnalyzer Write-Host, editor catch comment * fix: editor catch comment * 🛡️ Sentinel: [CRITICAL] Fix Path Traversal via Un-normalized Backslashes in Lua IO Sandbox This commit addresses a critical path traversal vulnerability in the Lua IO sandbox (`GregIoLuaModule.cs`). The `ResolveSafe` function previously normalized only forward slashes (`/`) to the OS directory separator. This allowed an attacker to bypass the directory traversal check by using backslashes (`\`) on systems where the underlying `Path.Combine` and `Path.GetFullPath` interpret alternate separators as valid boundaries. The fix explicitly normalizes both forward slashes and backslashes to `Path.DirectorySeparatorChar` before resolving the path, ensuring robust sandbox containment.
* release: dev to main (gregCore consolidation + wiki refresh) * 🛡️ Sentinel: [CRITICAL] Fix Path Traversal in Lua list_files (#294) * I am addressing the Sentinel alert to fix the path traversal vulnerability in the Lua file listing logic. * I have resolved the Sentinel security alert by fixing the path traversal vulnerability in the Lua file listing logic. * Perf opt gamehooks 11443369995706449354 (#295) * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * Fix compilation error: safely TryCast INetworkEndpoint to specific components * chore: merge all branches to dev (menus, shop, patches, SDKs, HotLoad, fixes) * feat: consolidate GregCore integration and release flow Integrate the reviewed security and performance changes, establish bounded runtime services, add contributor and maintainer documentation, and enforce the dev to pre-release to main promotion model. * docs: record branch consolidation and cleanup Document the chronological branch audit, retained promotion branches, and rejected changes from redundant automation proposals. * refactor(multiplayer): remove custom networking stack Keep the legacy Rust FFI v7 table layout stable while making its Steam and P2P slots inert. Document the native Unity/Data Center/Steamworks boundary from the local reference assemblies. * docs(changelog): record integration commit history Record the native multiplayer removal and the preceding branch/release integration commits in the Keep-a-Changelog ledger. * chore: remove obsolete FishNet agent instructions The native Data Center co-op boundary supersedes the former FishNet design guidance. * docs(changelog): record FishNet guidance cleanup Record the obsolete agent-instruction cleanup in the commit ledger. * feat(ui): Tasten-HUD und zentrales F1-Mod-Hub - GregHudRegistry/GregHud: Hotkey-Leiste am rechten Rand (HUD-Layer) - GregModHub (F1): Mod-/Menue-Liste mit Oeffnen-Buttons (Click-Routing) - GregMenuRegistry: RegisterOpener/TryOpen/Snapshot (+MenuInfo) - F1-Tick in GregCoreMod.OnUpdate * feat(mods): ModPackConfig-Erweiterung + ModItemSaveData-Persistenz - GregModPack: Builder und typ-sicherer Reader (Snapshot) fuer ModPackConfig/ShopItemConfig/StaticItemConfig/DllEntry - GregModSave: DTO plus Create/Fill/Read/Upsert/Remove fuer ModItemSaveData (SaveData.modItemData, Key modFolderName) * feat(mods): Custom Items via Vanilla-ModLoader laden - GregObjImport: validierter .obj-Import (Endung, Existenz, Traversal-Schutz, 64MB-Limit, Vertex-Check) - GregCustomItems: RegisterShopItem/RegisterStaticItem aus DTO + Pack-Ordner (Mesh-Vorabcheck), GetPrefab per Folder-Name * feat(net): Networking-Batch (PatchPanels, SetIP, ServiceRequests, Server) - GregPatchPanels: Save-DTO + Runtime-Brücke (Capture, InsertIntoRack, FindAll/ById, Cable-/Rack-Checks) - GregSetIP: Keypad-Fund, Subnetzmathe (Vanilla + Fallback), Show/Cancel - GregServiceRequests: Save-Snapshot, AddRequest/LoadFromSave/RebuildUI, ServiceRequestRow-Helfer - GregServers: ServerSaveData-DTO + Aktionen (SetIP, Power, Customer/App, Repair, Warning) * feat(net): Save-DTOs fuer Netzwerk-Devices (Batch A.1) Router (Routen/Subnetze), Firewall (Filterregeln), SFP, LACP (Upsert), Kabel + Endpunkte (Upsert), Link-Labels, Port-VLAN-Filter. * feat(net): Save-DTOs fuer Kunden + Wirtschaft (Batch A.2) CustomerBase (Upsert per ID, Dict-/Array-Brücken), CustomerRecord, MonthlySnapshot, BalanceSheet. Dazu Bool-Arrays in GregModPack. * feat(net): Save-DTOs fuer Jobs + Interacts (Batch A.3) Technician, RepairJob, InteractObject (Upsert per uid). Ctor-Hinweis: Technician-/InteractObjectData brauchen Vanilla-Live-Objekte (null best-effort). * docs: CHANGELOG fuer Save-Batch A * feat(net): Live-Brücke für Router + Firewall (Batch B.1) Finden per switchId, Subnetze/Routen verwalten, Regeln verwalten, Cluster-Sync, Traffic-Check. * feat(net): Live-Brücken für SFP, Rack und Templates (Batch B.2) SFP-Module/Box, RackTür/Mount, RackTemplateStore + Applier (Il2Cpp- Coroutine-Pumpe). Mount-templateId existiert runtime-seitig nicht. * feat(net): Shop-Brücke + nativer ColorPicker (Batch C) ShopItemSO/ShopItem/ShopCartItem/ModShopItem lesen und bedienen, FlexibleColorPicker öffnen/Farbe setzen/lesen/abbrechen. * feat(net): Objectives, CIDR-Helper, Device-Timer (Batch D.1) * feat(net): Customer-Brücke live (Batch D.2) Finden per customerID/baseID, Base-/Item-DTOs, IP-Lookup, Routed- Subnets, LoadData-Brücke, CustomerCard. * feat(net): Coop-Brücke (Batch E) Session, Peers/Avatare, Held-Items, Loose-Items, Trolley-Ghosts, Chat. * feat(mods): Abhängigkeits-Gating + Manifest-Diff für ModSync Declare/EnsureLoaded/CheckAll (Mindestversionen), GetLocalManifest/ DiffManifests/FormatDiff für Coop-Vergleich. 12 neue Unit-Tests. * feat(net): Rack- und Trolley-Brücke (Batch F) Rack-Positionen prüfen/markieren, RackPosition per UID, Trolley-Bays, Wandcheck, CarryModelPool. Coroutine-Pumpe assembly-intern geteilt. * feat(net): Kabel-Brücke live (Batch G) Finden (alle/switchId/Typ), LinkInfo-DTO, Speed setzen, SFP rein/raus, Second-/Label-Action, Rope-Anker. CableIDComponent ohne öffentliche Member — ausgelassen. * feat(net): Techniker-Brücke (Batch H) Finden/lesen, reparieren, Jobs zuweisen, Manager (senden, feuern, Queue-Restore), HR-Dialoge. * feat(net): Internet- und Dienst-Brücke (Batch I) Internet-Endpunkte, CommandCenter (Level, AutoRepair, Up-/Downgrade), Angriffs-Manager. * feat(net): Angriffs-Eskalation über Zeit (Stufen) Intervalle kürzer, Spawn-Rate/Speed höher pro Stufe (Vanilla-Basis wird gelesen). 4 neue Unit-Tests. * 🛡️ Sentinel: [HIGH] Fix path traversal in io.list_files() * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * feat(net): Numpad-Brücke (Batch J) Zahl lesen, Tasten drücken (Ziffern, OK, Del, Clear, Copy, Paste). * feat(net): Steam-Leaderboards-Brücke (Nische N.1) * feat(net): Spiel-Lautstärken-Brücke (Nische N.2) * feat(net): Localisation + Vanilla-Tooltips (Nische N.3a) * feat(net): PauseMenü-Callbacks + Tutorials (Nische N.3b) * feat(net): Tore/Wände + Steam-Lobby/Avatar (Nische N.3c) * chore: Claude-Lokaleinstellungen nicht versionieren * feat(ci): CI von GitHub auf Forgejo/Gitea umstellen - .github/workflows entfernt, Workflows nach .forgejo/ und .gitea/ verschoben - mirror-github.yml für den GitHub-Mirror ergänzt * feat(quality): Codacy CLI und Konfiguration ergänzen * refactor: Quellbaum in gregCore.*-Assemblies umbauen - Monolith-Layout durch projektbasierte Assemblies gregCore.* ersetzt - lib/MoonSharp und lib/references entfernt (NuGet bzw. references/) - ci-stubs, mods-Payload und unknown_hooks.json entfernt - references/ als Symlinks auf Game-Installation + README - IGregAPI.Version auf 1.2.3, Hook-Counts auf 1850 angehoben * build: Release-Basisversion 1.2.3 setzen - VERSION auf 1.2.3, Dev-Builds stempeln weiter -dev.0 - build.sh Dual-Profil Release 1.2.3 / Debug 1.2.3-dev.0 * chore(scripts): Mirror-Sync-Skript und Skript-Doku * docs: README/CHANGELOG/Architecture und Governance finalisieren - Offene-Source-Doku für den 1.2.3-Release abgeschlossen - Steam-Workshop-Profil in den README-Links ergänzt - Branch-Protection, INDEX, ARCHITECTURE, CODE_OF_CONDUCT, SECURITY * test: GameApiGenerator, Coverage-Tools und neue Tests - GameApiGenerator + regenerate Scripts unter tools/ - check-coverage.sh und coverage-baseline.txt - neue Unit-Tests (GameApiRegistry, RamAlert, DemandPlanner) und tests/README * fix: Save-Sanitize berührt Singleton im Hauptmenü nicht mehr LoadGame-Postfix nutzt das zurückgegebene Save; void-Einstiege nur in Spiel-Szenen (Menü-Vorschaudaten brauchen kein Sanitize). * feat(ui): Menü-Closer + ehrliche Hub-Buttons - RegisterCloser/TryClose, HasCloser im Snapshot - Hub: Schließen nur mit Closer, interne greg.*-Menüs ausgeblendet * feat(ui): DevConsole mit Unity-Log-Feed - Subscribed Unity-Log (Fehler/Warnungen aus Spiel + Mods), Thread-sicher queued, Anzeige im Update, Duplikat-Schutz - Menü-ID greg.console für Input-Lock * feat: save inventory with stable invisible UIDs for mods GregSaveInventory inventories everything in the save on load (servers, switches, routers, firewalls, patch panels, cables, SFP modules, LACP groups) and tags each entry with a stable UID invisible to the player. Server/switch/patch-panel reuse their gregID; cables/LACP derive deterministic UIDs from vanilla IDs; router/firewall/SFP persist via sidecar (greg_inventory.<save>.tsv) with index-shift repair via hints. Mods resolve entries directly (TryFindLive/TryGetUid/GetAll/Rebuilt). Hooked into the load path via LoadNetworkState postfix in GregSaveGuard. Tests: 18 new cases (pure helpers), full suite 135/135 green. * feat: entity inventory display split, control surface, rename - Rename GregSaveInventory -> GregEntityInventory (user vocabulary). - Display/persistence split: gameObject.name stays vanilla, ServerID/ switchId/patchPanelId keep the persistent gregID; screen-scrub postfixes replace leaked gregID tokens with the vanilla designation (Server.UpdateServerScreenUI, NetworkSwitch.UpdateScreenUI). - Control surface: MelonPreferences gregCore.EntityInventory (Enabled/VerboseLogging/DumpOnRebuild) plus Dump() and Verify(). - Tests: ScrubGregIds/CleanDisplayName cases, suite 144/135 green. * refactor: Hardware-IDs als eigenstaendiges Single-Scheme-System - Keine Fremd-Schema-Adoption mehr: genau ein stabiles Schema (gregID), alles andere wird exakt einmal ueberfuehrt (live + Save-Healing). - CleanId nur fuer numerische GetInstanceID-Suffixe, Null-Guards pro Healing-Eintrag, Log-Dedup per ID-String, [gregCore][HwId]-Logs, Idpatch-Typo korrigiert. * feat: 404-PersistentID-Mod bei Erkennung automatisch entpatchen IncompatibleModGuard (Name-/Assembly-Erkennung, UnpatchSelf) laeuft bei Mod-Init und Szenen-Laden; Log-Warnung + Toast einmal pro Sitzung. gregID bleibt damit garantiert das einzige ID-System. * refactor: Hardware-ID-System sichtbar als eigene Implementierung Greg*-Patch-Klassennamen, Startup-Kennung im Log, eigene Doku (docs/modding/hardware-ids.md) + README-Eintrag. * refactor: HwId system fully in short English Logs, comments, docs, README and changelog in English; startup line: HWID SYSTEM ACTIVE. * refactor: shorten all HwId logs, keep them informative * feat: Hub/SettingsHub-Ausbau und Mod-Autoren-Doku (modding/) * fix: codacy codeline limits for entity inventory Split GregEntityInventory into three partial files (API, collectors, codec/config) and slim RebuildFromNetworkData via FreshData + CollectAll/PublishFresh helpers. Extract PatchLoadNetworkState from GregSaveGuard.Install. No behavior change (build clean, 144/144 green). * fix: codacy empty-catch findings with documented rationale Add ignore comments to all bare catch blocks in PR scope (defensive best-effort per CONVENTIONS.md). Comment-only change, no behavior change (build clean, 144/144 green). * fix: codacy trivial findings batch (overloads, properties, comments) Overload chains instead of optional parameters (GregAPI, proxies, ModConfigSystem getters/setters); DTO public fields to auto-properties (source-compatible, no serialization impact); empty-method and switch fixes; const to static property; discard without unused local; field init. Verified hunk-by-hunk, foreign work untouched (build clean, 144/144 green). * fix: codacy empty-catch comments, batch 2 (comment-only) Same documented rationale as previous batch. Verified pure comment diffs (added == deleted == marker count); files with foreign work-in-progress excluded. * fix: codacy long ctor (GameAPIManager 256 lines split) Split delegate wiring into Bind*/FillTable* helpers (all under 30 lines), drop readonly where helpers assign (logger stays readonly). Generated mechanically from exact source lines, order preserved. Build clean, 144/144 green. * fix: codacy method/file findings batch (extractions, splits) GameAPIManager ctor, ModConfigSystem lifecycle/intercept/parse building blocks, RustFFI table binding, TechnicianHiring flow split into small helpers; ModConfigSystem and GregNetworkDeviceSaves split into partials; SliderOptions replaces 9-param overload; AGENTS.md link fixed. No behavior change (build clean, 144/144 green). * fix: codacy long InteractOnClick postfix split Pickup/drop flow extracted into small helpers (identity resolve per device family, rack-uid coalesce via shared UsableObject properties, stable-id apply). No behavior change (build clean, 144/144 green). * fix: codacy long rack/worldsync methods split MarkPositionAsUsed postfix and ProcessNewObject extracted into small helpers (identity resolve per family, rack-uid coalesce, record/fire). No behavior change (build clean). * docs: Modding-Guide auf Stand (PortSpeedMemory, RGB-Animator, Bulk-Snapshot, FAQ) * feat: entity-inventory Kompatibilitaet * feat: entity-inventory und Networking-Saves (WIP-Stand) * feat: GregMenuBinding, GregShopItems primitives, GregHost template + docs * feat: complete Greg.LUA SDK for complex mods New: greg.switch (mirror of server), greg.tech (technicians), greg.config + greg.save (JSON file-backed per-mod stores), greg.json (parse/stringify). Extended: server (power/ip/customer/find/get_list), io aliases (read_text, write_text) + read_json/write_json. Fixed io double-data-dir quirk with lossless migration. Crash-safe logging for headless/test contexts. Docs rewritten to exact implementation, fleet_doctor showcase example. Tests: 9 headless Lua SDK cases, suite 153/153 green. * docs: shop-items adoption note (standalone vs hard dep) * docs: hard-dependency playbook with per-mod verdicts * feat: LUA covers framework (patch/customer/economy/shop/net/mods/tablet/subnet/requests/items) New greg.* tables for patch panels, customers, economy (read-only), shop (catalog/unlock/buy/cart), network save data (read-only), mod registry/deps, tablets/widgets with Lua callbacks, subnet math, service requests, custom item registration. world.open_all_walls. Docs match implementation exactly. Tests: 21 headless Lua cases, suite 165/165 green. * feat: LUA tech extended + coverage gaps closed tech.list/send_to_server/send_to_switch/hire/fire via GregTechnicians (ID-based resolution); doc updated. Suite 165/165 green. * feat: LUA modsave module (per-save mod data) greg.modsave.list/upsert/remove against SaveData.modItemData with manual Vector3/Quaternion mapping. Completes the Lua persistence story (file-backed greg.save + save-bound modsave). * feat: C# SDK parity (log/toast/menu/shop/sidecar) + script HotLoad in main menu * feat: UI-focused JS/TS SDK (per-mod engines, HotLoad, greg.d.ts) + EN * docs: JS/TS UI SDK wiki (per-mod runtime, HotLoad, greg.d.ts) + stale beta claims fixed * fix: LUA splitter repairs + round-3 test coverage Restore dropped greg assignments/aliases, fix Tablet/greg shadowing, remove duplicate append_file, add tests for all round-3 ops (30 Lua cases). Suite green. * chore: remove dead GregEventJsModule (empty, unreferenced) * docs: LUA reference round 3 (server/patch/rack/cable/shop/tech/modsave/setip) * feat: LUA round 4 (internet/settings/objectives/tooltip/coop/misc) internet endpoints + command center, game audio settings, tutorials + objectives CRUD, tooltips, coop peers/session, steam/locale/numpad/pause helpers, tech.request_next_job. Docs match implementation. Build green. * feat: LUA SDK split + round 3/4 coverage (100% framework) Split all long Register methods into small helpers (Codacy limits); new tables: patch, customer, economy, shop, net, mods, tablet, subnet, requests, items, modsave, internet, settings, objectives, tooltip, coop, misc + server/patch/rack/cable/shop/tech extensions; docs exact; 36 headless Lua tests. Suite 202/202 green. * feat: LUA bridge wires round-4 modules + computer module + registry Registers internet/settings/objectives/tooltip/coop/misc/modsave tables and auto-registers Lua mods in GregModRegistry (visible in greg.mods). Includes computer-module wiring. Build green, suite 202/202. * feat: LUA objectives video flows * feat: LUA customer find_base + splitter table-var fixes * feat: GregPatches safe-patch helper + GregCables.FindByServer * feat: LUA customer find_base + smoke test + doc touch-ups * feat: LUA customer apply_save + requests.add (+ headless-finalizer guard) * integrate: menus/shop/patches/SDK/HotLoad/JS APIs + fixes (linear, no merge) * perf: EnsureAllRackPositionUIDs via NetworkMap first, FindObjects fallback * docs: top-level Hooks/Glossary/FAQ sidebar, Rust track, content updates * style: convention comments on empty catches (Codacy) * docs: sidebar order Guidebook-Core-Hooks-Glossary-FAQ like Oxide * fix: bt-merge follow-up (else-Duplikate, patchPanels-Fallback) * chore: Codacy-Skills-Pass (lokaler Scan + Regel-Tuning) Analysis-CLI (19 Tools): 378 -> 117 Findings. Echt gefixt: existsSync-Import, /* global greg */ im JS-Example, leere README-Badges, Node-Globals (eslint.config.mjs + in-source), tote game_hooks-Ladung, tote dst-Variable, Dockerfile USER+HEALTHCHECK. Getunt (codacy.config.json): Agentlinter-Completeness-Nags (17, AGENTS.md folgt eigenem Standard), Markdown-Stilpatterns (41, nur MD042/MD052 behalten), Lizard-Groessenschwellen (4, passen nicht zur Codebase), steamdesc.md exkludiert (Steam-BBCode). Geprueft-offen (Patterns aktiv): Asserts im Validator (CI ruft plain auf), token-Name (Semver-Klassifizierer), git-Subprocess (eigene Repo-Daten), Rust-unsafe (bewachte ABI-Grenze), C# Path.Combine (MelonEnvironment-Pfad), non-literal-fs (operator-kontrolliertes Build-Skript), Python-greg (host-injiziert), Go-CGo-Signaturen (ABI-fix), DOCKER_7 (gepinnt via ARG). Build 0 Fehler, 264/264 Tests gruen. * chore: Coverage-Upload nach Codacy verdrahten (Part 3) - CI (Forgejo): Tests mit XPlat-Coverage sammeln + Reporter-Upload (braucht CODACY_PROJECT_TOKEN als Actions-Secret, sonst Skip). - coverlet.collector 10.0.1 -> 6.0.4 (passt zu Test-SDK 17.8 + coverlet.msbuild 6.0.4; v10 lieferte keinen DataCollector). * refactor: Codacy complexity fixes for gregCore APIs (helpers split, ShopButtonSpec) * refactor: clear remaining Codacy warnings (Spec-only AddButton, Install/BuildUI split) * refactor: clear Codacy complexity gate (helper splits, partials, FFI excludes) * fix: clear SonarCSharp gate findings (properties, overloads, catches, discards, FFI suppressions) * fix: clear SonarCSharp layer 2 (catches, discards, props, overloads, IEquatable) * fix: clear SonarCSharp layer 3 (S1172/S2386 suppressions, overloads, tuple API, nosemgrep) * fix: clear SonarCSharp layer 4 (S1172/S2386, taint nosemgrep, props, overloads) * fix: clear SonarCSharp layer 5 (props, overloads, S1172/S2386, nosemgrep, tuple API) * fix: clear SonarCSharp layer 6 (props, overloads, S1172/S2386, IEquatable, tuple APIs) * fix: clear SonarCSharp layer 7 (props, S2386 props, IEquatable+operators, S1118, overloads) * fix: clear SonarCSharp layer 8 (overloads, tuples, S2696, IEquatable+ops, defaults) * chore: drop accidentally committed pycache artifact * fix: clear SonarCSharp layer 9 (GameAPITable split+chunked equality, overloads, props) * refactor: break semgrep taint chain (GregIoFileStore sink split) * fix: clear SonarCSharp layer 10 (getter-props, overloads, tuple APIs, dead code) * fix: bulk sweep (discards, catch comments, const props) + verify blob lines * fix: drop unneeded ref param (RouteClicks) * fix: clear SonarCSharp layer 12 (overloads, tuples, IEquatable, templates) * fix: final valid findings (props, twins, S1172, dead params) * fix: tuples, overloads, template lint headers, test helpers * fix: overloads, S1313/S1172, dead params, test helpers * fix: tool script nits (catch comment, Find braces) * chore: residual Codacy cleanup (coverage scanner clarity) * docs: refresh wiki API references (ShopButtonSpec, click-router signatures) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) (#298) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real CI URLs, Jenkins webhook done, Mantis REST nginx fix * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real public URLs, Jenkins webhook done, Mantis REST nginx fix * fix: PSScriptAnalyzer Write-Host, editor catch comment * fix: editor catch comment * ⚡ Bolt: Optimize CustomerBase lookups Replaced global scene queries `FindObjectsOfType<CustomerBase>()` with O(1) dictionary lookups using `NetworkMap.instance.customerBases`. This optimization reduces main thread stuttering and CPU usage during demand generation/scanning loops by bypassing scene-wide searches.
* release: dev to main (gregCore consolidation + wiki refresh) * 🛡️ Sentinel: [CRITICAL] Fix Path Traversal in Lua list_files (#294) * I am addressing the Sentinel alert to fix the path traversal vulnerability in the Lua file listing logic. * I have resolved the Sentinel security alert by fixing the path traversal vulnerability in the Lua file listing logic. * Perf opt gamehooks 11443369995706449354 (#295) * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * Fix compilation error: safely TryCast INetworkEndpoint to specific components * chore: merge all branches to dev (menus, shop, patches, SDKs, HotLoad, fixes) * feat: consolidate GregCore integration and release flow Integrate the reviewed security and performance changes, establish bounded runtime services, add contributor and maintainer documentation, and enforce the dev to pre-release to main promotion model. * docs: record branch consolidation and cleanup Document the chronological branch audit, retained promotion branches, and rejected changes from redundant automation proposals. * refactor(multiplayer): remove custom networking stack Keep the legacy Rust FFI v7 table layout stable while making its Steam and P2P slots inert. Document the native Unity/Data Center/Steamworks boundary from the local reference assemblies. * docs(changelog): record integration commit history Record the native multiplayer removal and the preceding branch/release integration commits in the Keep-a-Changelog ledger. * chore: remove obsolete FishNet agent instructions The native Data Center co-op boundary supersedes the former FishNet design guidance. * docs(changelog): record FishNet guidance cleanup Record the obsolete agent-instruction cleanup in the commit ledger. * feat(ui): Tasten-HUD und zentrales F1-Mod-Hub - GregHudRegistry/GregHud: Hotkey-Leiste am rechten Rand (HUD-Layer) - GregModHub (F1): Mod-/Menue-Liste mit Oeffnen-Buttons (Click-Routing) - GregMenuRegistry: RegisterOpener/TryOpen/Snapshot (+MenuInfo) - F1-Tick in GregCoreMod.OnUpdate * feat(mods): ModPackConfig-Erweiterung + ModItemSaveData-Persistenz - GregModPack: Builder und typ-sicherer Reader (Snapshot) fuer ModPackConfig/ShopItemConfig/StaticItemConfig/DllEntry - GregModSave: DTO plus Create/Fill/Read/Upsert/Remove fuer ModItemSaveData (SaveData.modItemData, Key modFolderName) * feat(mods): Custom Items via Vanilla-ModLoader laden - GregObjImport: validierter .obj-Import (Endung, Existenz, Traversal-Schutz, 64MB-Limit, Vertex-Check) - GregCustomItems: RegisterShopItem/RegisterStaticItem aus DTO + Pack-Ordner (Mesh-Vorabcheck), GetPrefab per Folder-Name * feat(net): Networking-Batch (PatchPanels, SetIP, ServiceRequests, Server) - GregPatchPanels: Save-DTO + Runtime-Brücke (Capture, InsertIntoRack, FindAll/ById, Cable-/Rack-Checks) - GregSetIP: Keypad-Fund, Subnetzmathe (Vanilla + Fallback), Show/Cancel - GregServiceRequests: Save-Snapshot, AddRequest/LoadFromSave/RebuildUI, ServiceRequestRow-Helfer - GregServers: ServerSaveData-DTO + Aktionen (SetIP, Power, Customer/App, Repair, Warning) * feat(net): Save-DTOs fuer Netzwerk-Devices (Batch A.1) Router (Routen/Subnetze), Firewall (Filterregeln), SFP, LACP (Upsert), Kabel + Endpunkte (Upsert), Link-Labels, Port-VLAN-Filter. * feat(net): Save-DTOs fuer Kunden + Wirtschaft (Batch A.2) CustomerBase (Upsert per ID, Dict-/Array-Brücken), CustomerRecord, MonthlySnapshot, BalanceSheet. Dazu Bool-Arrays in GregModPack. * feat(net): Save-DTOs fuer Jobs + Interacts (Batch A.3) Technician, RepairJob, InteractObject (Upsert per uid). Ctor-Hinweis: Technician-/InteractObjectData brauchen Vanilla-Live-Objekte (null best-effort). * docs: CHANGELOG fuer Save-Batch A * feat(net): Live-Brücke für Router + Firewall (Batch B.1) Finden per switchId, Subnetze/Routen verwalten, Regeln verwalten, Cluster-Sync, Traffic-Check. * feat(net): Live-Brücken für SFP, Rack und Templates (Batch B.2) SFP-Module/Box, RackTür/Mount, RackTemplateStore + Applier (Il2Cpp- Coroutine-Pumpe). Mount-templateId existiert runtime-seitig nicht. * feat(net): Shop-Brücke + nativer ColorPicker (Batch C) ShopItemSO/ShopItem/ShopCartItem/ModShopItem lesen und bedienen, FlexibleColorPicker öffnen/Farbe setzen/lesen/abbrechen. * feat(net): Objectives, CIDR-Helper, Device-Timer (Batch D.1) * feat(net): Customer-Brücke live (Batch D.2) Finden per customerID/baseID, Base-/Item-DTOs, IP-Lookup, Routed- Subnets, LoadData-Brücke, CustomerCard. * feat(net): Coop-Brücke (Batch E) Session, Peers/Avatare, Held-Items, Loose-Items, Trolley-Ghosts, Chat. * feat(mods): Abhängigkeits-Gating + Manifest-Diff für ModSync Declare/EnsureLoaded/CheckAll (Mindestversionen), GetLocalManifest/ DiffManifests/FormatDiff für Coop-Vergleich. 12 neue Unit-Tests. * feat(net): Rack- und Trolley-Brücke (Batch F) Rack-Positionen prüfen/markieren, RackPosition per UID, Trolley-Bays, Wandcheck, CarryModelPool. Coroutine-Pumpe assembly-intern geteilt. * feat(net): Kabel-Brücke live (Batch G) Finden (alle/switchId/Typ), LinkInfo-DTO, Speed setzen, SFP rein/raus, Second-/Label-Action, Rope-Anker. CableIDComponent ohne öffentliche Member — ausgelassen. * feat(net): Techniker-Brücke (Batch H) Finden/lesen, reparieren, Jobs zuweisen, Manager (senden, feuern, Queue-Restore), HR-Dialoge. * feat(net): Internet- und Dienst-Brücke (Batch I) Internet-Endpunkte, CommandCenter (Level, AutoRepair, Up-/Downgrade), Angriffs-Manager. * feat(net): Angriffs-Eskalation über Zeit (Stufen) Intervalle kürzer, Spawn-Rate/Speed höher pro Stufe (Vanilla-Basis wird gelesen). 4 neue Unit-Tests. * 🛡️ Sentinel: [HIGH] Fix path traversal in io.list_files() * Replace O(N) FindObjectsOfType with O(1) NetworkMap dictionary lookup * feat(net): Numpad-Brücke (Batch J) Zahl lesen, Tasten drücken (Ziffern, OK, Del, Clear, Copy, Paste). * feat(net): Steam-Leaderboards-Brücke (Nische N.1) * feat(net): Spiel-Lautstärken-Brücke (Nische N.2) * feat(net): Localisation + Vanilla-Tooltips (Nische N.3a) * feat(net): PauseMenü-Callbacks + Tutorials (Nische N.3b) * feat(net): Tore/Wände + Steam-Lobby/Avatar (Nische N.3c) * chore: Claude-Lokaleinstellungen nicht versionieren * feat(ci): CI von GitHub auf Forgejo/Gitea umstellen - .github/workflows entfernt, Workflows nach .forgejo/ und .gitea/ verschoben - mirror-github.yml für den GitHub-Mirror ergänzt * feat(quality): Codacy CLI und Konfiguration ergänzen * refactor: Quellbaum in gregCore.*-Assemblies umbauen - Monolith-Layout durch projektbasierte Assemblies gregCore.* ersetzt - lib/MoonSharp und lib/references entfernt (NuGet bzw. references/) - ci-stubs, mods-Payload und unknown_hooks.json entfernt - references/ als Symlinks auf Game-Installation + README - IGregAPI.Version auf 1.2.3, Hook-Counts auf 1850 angehoben * build: Release-Basisversion 1.2.3 setzen - VERSION auf 1.2.3, Dev-Builds stempeln weiter -dev.0 - build.sh Dual-Profil Release 1.2.3 / Debug 1.2.3-dev.0 * chore(scripts): Mirror-Sync-Skript und Skript-Doku * docs: README/CHANGELOG/Architecture und Governance finalisieren - Offene-Source-Doku für den 1.2.3-Release abgeschlossen - Steam-Workshop-Profil in den README-Links ergänzt - Branch-Protection, INDEX, ARCHITECTURE, CODE_OF_CONDUCT, SECURITY * test: GameApiGenerator, Coverage-Tools und neue Tests - GameApiGenerator + regenerate Scripts unter tools/ - check-coverage.sh und coverage-baseline.txt - neue Unit-Tests (GameApiRegistry, RamAlert, DemandPlanner) und tests/README * fix: Save-Sanitize berührt Singleton im Hauptmenü nicht mehr LoadGame-Postfix nutzt das zurückgegebene Save; void-Einstiege nur in Spiel-Szenen (Menü-Vorschaudaten brauchen kein Sanitize). * feat(ui): Menü-Closer + ehrliche Hub-Buttons - RegisterCloser/TryClose, HasCloser im Snapshot - Hub: Schließen nur mit Closer, interne greg.*-Menüs ausgeblendet * feat(ui): DevConsole mit Unity-Log-Feed - Subscribed Unity-Log (Fehler/Warnungen aus Spiel + Mods), Thread-sicher queued, Anzeige im Update, Duplikat-Schutz - Menü-ID greg.console für Input-Lock * feat: save inventory with stable invisible UIDs for mods GregSaveInventory inventories everything in the save on load (servers, switches, routers, firewalls, patch panels, cables, SFP modules, LACP groups) and tags each entry with a stable UID invisible to the player. Server/switch/patch-panel reuse their gregID; cables/LACP derive deterministic UIDs from vanilla IDs; router/firewall/SFP persist via sidecar (greg_inventory.<save>.tsv) with index-shift repair via hints. Mods resolve entries directly (TryFindLive/TryGetUid/GetAll/Rebuilt). Hooked into the load path via LoadNetworkState postfix in GregSaveGuard. Tests: 18 new cases (pure helpers), full suite 135/135 green. * feat: entity inventory display split, control surface, rename - Rename GregSaveInventory -> GregEntityInventory (user vocabulary). - Display/persistence split: gameObject.name stays vanilla, ServerID/ switchId/patchPanelId keep the persistent gregID; screen-scrub postfixes replace leaked gregID tokens with the vanilla designation (Server.UpdateServerScreenUI, NetworkSwitch.UpdateScreenUI). - Control surface: MelonPreferences gregCore.EntityInventory (Enabled/VerboseLogging/DumpOnRebuild) plus Dump() and Verify(). - Tests: ScrubGregIds/CleanDisplayName cases, suite 144/135 green. * refactor: Hardware-IDs als eigenstaendiges Single-Scheme-System - Keine Fremd-Schema-Adoption mehr: genau ein stabiles Schema (gregID), alles andere wird exakt einmal ueberfuehrt (live + Save-Healing). - CleanId nur fuer numerische GetInstanceID-Suffixe, Null-Guards pro Healing-Eintrag, Log-Dedup per ID-String, [gregCore][HwId]-Logs, Idpatch-Typo korrigiert. * feat: 404-PersistentID-Mod bei Erkennung automatisch entpatchen IncompatibleModGuard (Name-/Assembly-Erkennung, UnpatchSelf) laeuft bei Mod-Init und Szenen-Laden; Log-Warnung + Toast einmal pro Sitzung. gregID bleibt damit garantiert das einzige ID-System. * refactor: Hardware-ID-System sichtbar als eigene Implementierung Greg*-Patch-Klassennamen, Startup-Kennung im Log, eigene Doku (docs/modding/hardware-ids.md) + README-Eintrag. * refactor: HwId system fully in short English Logs, comments, docs, README and changelog in English; startup line: HWID SYSTEM ACTIVE. * refactor: shorten all HwId logs, keep them informative * feat: Hub/SettingsHub-Ausbau und Mod-Autoren-Doku (modding/) * fix: codacy codeline limits for entity inventory Split GregEntityInventory into three partial files (API, collectors, codec/config) and slim RebuildFromNetworkData via FreshData + CollectAll/PublishFresh helpers. Extract PatchLoadNetworkState from GregSaveGuard.Install. No behavior change (build clean, 144/144 green). * fix: codacy empty-catch findings with documented rationale Add ignore comments to all bare catch blocks in PR scope (defensive best-effort per CONVENTIONS.md). Comment-only change, no behavior change (build clean, 144/144 green). * fix: codacy trivial findings batch (overloads, properties, comments) Overload chains instead of optional parameters (GregAPI, proxies, ModConfigSystem getters/setters); DTO public fields to auto-properties (source-compatible, no serialization impact); empty-method and switch fixes; const to static property; discard without unused local; field init. Verified hunk-by-hunk, foreign work untouched (build clean, 144/144 green). * fix: codacy empty-catch comments, batch 2 (comment-only) Same documented rationale as previous batch. Verified pure comment diffs (added == deleted == marker count); files with foreign work-in-progress excluded. * fix: codacy long ctor (GameAPIManager 256 lines split) Split delegate wiring into Bind*/FillTable* helpers (all under 30 lines), drop readonly where helpers assign (logger stays readonly). Generated mechanically from exact source lines, order preserved. Build clean, 144/144 green. * fix: codacy method/file findings batch (extractions, splits) GameAPIManager ctor, ModConfigSystem lifecycle/intercept/parse building blocks, RustFFI table binding, TechnicianHiring flow split into small helpers; ModConfigSystem and GregNetworkDeviceSaves split into partials; SliderOptions replaces 9-param overload; AGENTS.md link fixed. No behavior change (build clean, 144/144 green). * fix: codacy long InteractOnClick postfix split Pickup/drop flow extracted into small helpers (identity resolve per device family, rack-uid coalesce via shared UsableObject properties, stable-id apply). No behavior change (build clean, 144/144 green). * fix: codacy long rack/worldsync methods split MarkPositionAsUsed postfix and ProcessNewObject extracted into small helpers (identity resolve per family, rack-uid coalesce, record/fire). No behavior change (build clean). * docs: Modding-Guide auf Stand (PortSpeedMemory, RGB-Animator, Bulk-Snapshot, FAQ) * feat: entity-inventory Kompatibilitaet * feat: entity-inventory und Networking-Saves (WIP-Stand) * feat: GregMenuBinding, GregShopItems primitives, GregHost template + docs * feat: complete Greg.LUA SDK for complex mods New: greg.switch (mirror of server), greg.tech (technicians), greg.config + greg.save (JSON file-backed per-mod stores), greg.json (parse/stringify). Extended: server (power/ip/customer/find/get_list), io aliases (read_text, write_text) + read_json/write_json. Fixed io double-data-dir quirk with lossless migration. Crash-safe logging for headless/test contexts. Docs rewritten to exact implementation, fleet_doctor showcase example. Tests: 9 headless Lua SDK cases, suite 153/153 green. * docs: shop-items adoption note (standalone vs hard dep) * docs: hard-dependency playbook with per-mod verdicts * feat: LUA covers framework (patch/customer/economy/shop/net/mods/tablet/subnet/requests/items) New greg.* tables for patch panels, customers, economy (read-only), shop (catalog/unlock/buy/cart), network save data (read-only), mod registry/deps, tablets/widgets with Lua callbacks, subnet math, service requests, custom item registration. world.open_all_walls. Docs match implementation exactly. Tests: 21 headless Lua cases, suite 165/165 green. * feat: LUA tech extended + coverage gaps closed tech.list/send_to_server/send_to_switch/hire/fire via GregTechnicians (ID-based resolution); doc updated. Suite 165/165 green. * feat: LUA modsave module (per-save mod data) greg.modsave.list/upsert/remove against SaveData.modItemData with manual Vector3/Quaternion mapping. Completes the Lua persistence story (file-backed greg.save + save-bound modsave). * feat: C# SDK parity (log/toast/menu/shop/sidecar) + script HotLoad in main menu * feat: UI-focused JS/TS SDK (per-mod engines, HotLoad, greg.d.ts) + EN * docs: JS/TS UI SDK wiki (per-mod runtime, HotLoad, greg.d.ts) + stale beta claims fixed * fix: LUA splitter repairs + round-3 test coverage Restore dropped greg assignments/aliases, fix Tablet/greg shadowing, remove duplicate append_file, add tests for all round-3 ops (30 Lua cases). Suite green. * chore: remove dead GregEventJsModule (empty, unreferenced) * docs: LUA reference round 3 (server/patch/rack/cable/shop/tech/modsave/setip) * feat: LUA round 4 (internet/settings/objectives/tooltip/coop/misc) internet endpoints + command center, game audio settings, tutorials + objectives CRUD, tooltips, coop peers/session, steam/locale/numpad/pause helpers, tech.request_next_job. Docs match implementation. Build green. * feat: LUA SDK split + round 3/4 coverage (100% framework) Split all long Register methods into small helpers (Codacy limits); new tables: patch, customer, economy, shop, net, mods, tablet, subnet, requests, items, modsave, internet, settings, objectives, tooltip, coop, misc + server/patch/rack/cable/shop/tech extensions; docs exact; 36 headless Lua tests. Suite 202/202 green. * feat: LUA bridge wires round-4 modules + computer module + registry Registers internet/settings/objectives/tooltip/coop/misc/modsave tables and auto-registers Lua mods in GregModRegistry (visible in greg.mods). Includes computer-module wiring. Build green, suite 202/202. * feat: LUA objectives video flows * feat: LUA customer find_base + splitter table-var fixes * feat: GregPatches safe-patch helper + GregCables.FindByServer * feat: LUA customer find_base + smoke test + doc touch-ups * feat: LUA customer apply_save + requests.add (+ headless-finalizer guard) * integrate: menus/shop/patches/SDK/HotLoad/JS APIs + fixes (linear, no merge) * perf: EnsureAllRackPositionUIDs via NetworkMap first, FindObjects fallback * docs: top-level Hooks/Glossary/FAQ sidebar, Rust track, content updates * style: convention comments on empty catches (Codacy) * docs: sidebar order Guidebook-Core-Hooks-Glossary-FAQ like Oxide * fix: bt-merge follow-up (else-Duplikate, patchPanels-Fallback) * chore: Codacy-Skills-Pass (lokaler Scan + Regel-Tuning) Analysis-CLI (19 Tools): 378 -> 117 Findings. Echt gefixt: existsSync-Import, /* global greg */ im JS-Example, leere README-Badges, Node-Globals (eslint.config.mjs + in-source), tote game_hooks-Ladung, tote dst-Variable, Dockerfile USER+HEALTHCHECK. Getunt (codacy.config.json): Agentlinter-Completeness-Nags (17, AGENTS.md folgt eigenem Standard), Markdown-Stilpatterns (41, nur MD042/MD052 behalten), Lizard-Groessenschwellen (4, passen nicht zur Codebase), steamdesc.md exkludiert (Steam-BBCode). Geprueft-offen (Patterns aktiv): Asserts im Validator (CI ruft plain auf), token-Name (Semver-Klassifizierer), git-Subprocess (eigene Repo-Daten), Rust-unsafe (bewachte ABI-Grenze), C# Path.Combine (MelonEnvironment-Pfad), non-literal-fs (operator-kontrolliertes Build-Skript), Python-greg (host-injiziert), Go-CGo-Signaturen (ABI-fix), DOCKER_7 (gepinnt via ARG). Build 0 Fehler, 264/264 Tests gruen. * chore: Coverage-Upload nach Codacy verdrahten (Part 3) - CI (Forgejo): Tests mit XPlat-Coverage sammeln + Reporter-Upload (braucht CODACY_PROJECT_TOKEN als Actions-Secret, sonst Skip). - coverlet.collector 10.0.1 -> 6.0.4 (passt zu Test-SDK 17.8 + coverlet.msbuild 6.0.4; v10 lieferte keinen DataCollector). * refactor: Codacy complexity fixes for gregCore APIs (helpers split, ShopButtonSpec) * refactor: clear remaining Codacy warnings (Spec-only AddButton, Install/BuildUI split) * refactor: clear Codacy complexity gate (helper splits, partials, FFI excludes) * fix: clear SonarCSharp gate findings (properties, overloads, catches, discards, FFI suppressions) * fix: clear SonarCSharp layer 2 (catches, discards, props, overloads, IEquatable) * fix: clear SonarCSharp layer 3 (S1172/S2386 suppressions, overloads, tuple API, nosemgrep) * fix: clear SonarCSharp layer 4 (S1172/S2386, taint nosemgrep, props, overloads) * fix: clear SonarCSharp layer 5 (props, overloads, S1172/S2386, nosemgrep, tuple API) * fix: clear SonarCSharp layer 6 (props, overloads, S1172/S2386, IEquatable, tuple APIs) * fix: clear SonarCSharp layer 7 (props, S2386 props, IEquatable+operators, S1118, overloads) * fix: clear SonarCSharp layer 8 (overloads, tuples, S2696, IEquatable+ops, defaults) * chore: drop accidentally committed pycache artifact * fix: clear SonarCSharp layer 9 (GameAPITable split+chunked equality, overloads, props) * refactor: break semgrep taint chain (GregIoFileStore sink split) * fix: clear SonarCSharp layer 10 (getter-props, overloads, tuple APIs, dead code) * fix: bulk sweep (discards, catch comments, const props) + verify blob lines * fix: drop unneeded ref param (RouteClicks) * fix: clear SonarCSharp layer 12 (overloads, tuples, IEquatable, templates) * fix: final valid findings (props, twins, S1172, dead params) * fix: tuples, overloads, template lint headers, test helpers * fix: overloads, S1313/S1172, dead params, test helpers * fix: tool script nits (catch comment, Find braces) * chore: residual Codacy cleanup (coverage scanner clarity) * docs: refresh wiki API references (ShopButtonSpec, click-router signatures) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) (#298) * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real CI URLs, Jenkins webhook done, Mantis REST nginx fix * ci: Jenkins pilot (build, test, SonarQube gate, GitHub checks, Mantis reporter) * docs: cloudflared path for Jenkins/Mantis, SonarQube stays LAN-only * docs: real public URLs, Jenkins webhook done, Mantis REST nginx fix * fix: PSScriptAnalyzer Write-Host, editor catch comment * fix: editor catch comment * Fix path traversal vulnerability in Lua search pattern The `SanitizeSearchPattern` method in `GregIoLuaModule.cs` validated that a user-provided search pattern didn't contain directory traversals. However, it only checked for `Path.DirectorySeparatorChar` and `Path.AltDirectorySeparatorChar`. If the code was run on an environment where neither of these matched a given slash (e.g. `\` on Linux), the pattern could bypass the check. Since `Directory.GetFiles` uses the underlying OS APIs, and those APIs might still resolve it as a directory boundary, it opened the door for a directory traversal vulnerability via the search pattern. This commit updates `SanitizeSearchPattern` to explicitly reject both forward slashes and backslashes in addition to the platform's default separator characters.
🚨 Severity: CRITICAL
💡 Vulnerability: Path Traversal via search pattern in
GregIoLuaModule.cs. Thepatternargument passed toDirectory.GetFileswas not sanitized, allowing attackers to escape the intended sandbox by passing strings containing../or/.🎯 Impact: Allowed reading files outside of the intended
dataDirsandbox.🔧 Fix: Added validation to reject any search pattern containing directory separators (
/,\) or traversal characters (..), throwing anUnauthorizedAccessException.✅ Verification: Verified that directory separators and traversal characters are blocked, while normal wildcards still function correctly recursively. Tested build and tests.
PR created automatically by Jules for task 5169142404656099793 started by @mleem97