Лавмат, донатные вещи, ксеноморфы, коллективный разум#5
Conversation
|
RSI Diff Bot; head commit afa5f4d merging into 4cf4ab9 Resources/Textures/_Arcane/Clothing/Hands/Sponsor/QM_long_gloves.rsi
Resources/Textures/_Arcane/Clothing/Hands/bdsm_gloves.rsi
Resources/Textures/_Arcane/Clothing/Head/Sponsor/CMO_hat.rsi
Resources/Textures/_Arcane/Clothing/Head/Sponsor/HOS_cap.rsi
Resources/Textures/_Arcane/Clothing/Head/Sponsor/NTR_beret.rsi
Resources/Textures/_Arcane/Clothing/Head/Sponsor/QM_beret.rsi
Resources/Textures/_Arcane/Clothing/Head/Sponsor/clown.rsi
Resources/Textures/_Arcane/Clothing/Head/Sponsor/sanitar_hat.rsi
Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater.rsi
Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater_skirt.rsi
Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/HOS_short_dress.rsi
Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black.rsi
Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black_skirt.rsi
Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white.rsi
|
|
Important Review skippedToo many files! This PR contains 171 files, which is 71 over the limit of 100. To get a review, narrow the scope: Upgrade to a paid plan to raise the limit. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (666)
📒 Files selected for processing (171)
You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
|
|
@coderabbitai почему падают тесты? |
🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
pr=5
echo "=== PR checks ==="
gh pr checks $pr --repo $repo || true
echo "=== PR info ==="
gh pr view $pr --repo $repo --json state,mergeable,statusCheckRollup -q '.' || true
echo "=== Failed runs list ==="
gh run list --repo $repo --branch $(gh pr view $pr --repo $repo --json headRefName -q .headRefName) --limit 10 || trueLength of output: 10043 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
echo "=== Failed job log: check-typo-directory ==="
gh run view 29202074111 --repo $repo --log-failed || trueLength of output: 2035 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== Search offending namespace declarations ==="
rg -n --type=cs 'namespace Content\.Client\.Chat\b' -g '*_Starlight*'
echo "---"
rg -n --type=cs 'namespace Content\.Server\.Chat\.Commands\b' -g '*_Starlight*'Length of output: 602 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== Broad search for namespace Content.Client.Chat ==="
rg -n 'namespace Content\.Client\.Chat\b'
echo "=== Broad search for namespace Content.Server.Chat.Commands ==="
rg -n 'namespace Content\.Server\.Chat\.Commands\b'
echo "=== Locate check_starlight_namespaces.py for rule details ==="
fd check_starlight_namespaces.pyLength of output: 724 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== Broad search for namespace Content.Client.Chat ==="
rg -n 'namespace Content\.Client\.Chat\b' || true
echo "=== Broad search for namespace Content.Server.Chat.Commands ==="
rg -n 'namespace Content\.Server\.Chat\.Commands\b' || true
echo "=== Locate check_starlight_namespaces.py ==="
fd check_starlight_namespaces.py || true
echo "=== List files in Chat dirs under _Starlight paths (Client) ==="
fd -t d 'Chat' Content.Client 2>/dev/null || true
fd -t d '_Starlight' Content.Client 2>/dev/null || true
echo "=== Repo root listing ==="
lsLength of output: 777 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== pwd ==="
pwd
echo "=== ls -la ==="
ls -la
echo "=== git status ==="
git status || true
git branch -a || trueLength of output: 5236 🏁 Script executed: #!/bin/bash
set -euo pipefail
which rg
rg --version
echo "=== search 1 ==="
rg -n 'namespace Content\.Client\.Chat' Content.Client || echo "no match 1"
echo "=== search 2 ==="
rg -n 'namespace Content\.Server\.Chat\.Commands' Content.Server || echo "no match 2"
echo "=== check_starlight_namespaces.py ==="
find Tools -iname '*starlight*namespace*'Length of output: 697 🏁 Script executed: #!/bin/bash
set -euo pipefail
rg --version || true
echo "=== search 1: Content.Client.Chat namespace ==="
rg -n 'namespace Content\.Client\.Chat' Content.Client || echo "no match 1"
echo "=== search 2: Content.Server.Chat.Commands namespace ==="
rg -n 'namespace Content\.Server\.Chat\.Commands' Content.Server || echo "no match 2"
echo "=== find check_starlight_namespaces.py ==="
find Tools -iname '*starlight*namespace*' || true
echo "=== cat script if found ==="
find Tools -iname 'check_starlight_namespaces.py' -exec cat {} \; || trueLength of output: 9958 Now I have the exact cause and fix.
Правило скрипта: любой
Как исправить, выберите один из вариантов:
Остальные проверки ( ✅ Action performedReview finished.
|
|
Tip For best results, initiate chat on the files or code changes.
Тесты падают из-за проверки
Исправить можно так:
После исправления остальные проверки (build, Test Packaging, YAML Linter) должны пройти нормально — стоит дождаться их завершения. (๑•́ ‿ •̀๑) |
There was a problem hiding this comment.
Actionable comments posted: 14
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
Resources/Audio/_White/Xenomorph/attributions.yml (1)
1-45: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winSync
Resources/Audio/_White/Xenomorph/attributions.ymlwith the directory contents
scream9.oggis present but missing from the list.9.ogg,xenomorph.ogg,xenomorph_ask.ogg,xenomorph_exclaim.ogg, andxenomorphdisarm.oggare listed but not present underResources/Audio/_White/Xenomorph/.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Audio/_White/Xenomorph/attributions.yml` around lines 1 - 45, Update the attribution entries in attributions.yml to match the Xenomorph directory contents: add scream9.ogg to the existing scream attribution list, and remove the nonexistent files 9.ogg, xenomorph.ogg, xenomorph_ask.ogg, xenomorph_exclaim.ogg, and xenomorphdisarm.ogg while preserving the remaining attribution metadata.Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml (1)
1-63: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winAdd
Clothingsprite overrides to the cloak prototypes —Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.ymlonly overridesSprite;ClothingNeckBasealready definesClothing, so these cloaks will keep the base neck worn art unless each entry also sets the custom sprite path onClothing.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml` around lines 1 - 63, Add a Clothing component override to each cloak prototype identified by ClothingCloakNTRBlack, ClothingCloakNTRTricolor, ClothingCloakCMOHonorable, ClothingCloakHOSBlack, ClothingCloakHOSRed, ClothingCloakQMBlack, and ClothingCloakQMWhite. Set each Clothing override to use the same custom sprite path as its corresponding Sprite component, preserving the existing prototype-specific worn art.Resources/Prototypes/_Arcane/Loadouts/Miscellaneous/patron.yml (1)
1-342: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winRe-enable the sponsor requirement on patron loadouts. In
Resources/Prototypes/_Arcane/Loadouts/Miscellaneous/patron.yml, everySponsorRequirementLoadoutEffectis commented out, so these loadouts are currently available to everyone. Most of the “unused” IDs are already wired intoResources/Prototypes/Loadouts/LoadoutGroups/loadout_groups.yml,Resources/Prototypes/Loadouts/LoadoutGroups/medical.yml, orResources/Prototypes/_Starlight/Loadouts/loadout_groups.yml; onlyClownPinkPatron,NunDressPatron,ClownPinkHatPatron, andApostolCoatPatronstill look unreferenced.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Prototypes/_Arcane/Loadouts/Miscellaneous/patron.yml` around lines 1 - 342, Re-enable the SponsorRequirementLoadoutEffect for every loadout in patron.yml by uncommenting its effects entry and Tier2 requirement, including the currently unreferenced ClownPinkPatron, NunDressPatron, ClownPinkHatPatron, and ApostolCoatPatron. Preserve each loadout’s existing equipment and IDs.
🧹 Nitpick comments (8)
Content.Client/_Starlight/Chat/CollectiveMindSystem.cs (1)
20-20: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueRemove unused
_collectiveSystemdependency.
CollectiveMindUpdateSystemis injected but never referenced in this file. This is dead code.♻️ Proposed fix
[Dependency] private readonly IChatManager _chatManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; -[Dependency] private readonly CollectiveMindUpdateSystem _collectiveSystem = default!;🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Content.Client/_Starlight/Chat/CollectiveMindSystem.cs` at line 20, Remove the unused _collectiveSystem dependency field and its [Dependency] injection from CollectiveMindSystem, leaving the rest of the class unchanged.Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs (3)
22-22: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueUnused
uidparameter inUpdateCollectiveMind.The
EntityUid uidparameter is never referenced in the method body. Either remove it or add a comment explaining its intended future use.♻️ Proposed fix
-public void UpdateCollectiveMind(EntityUid uid, CollectiveMindComponent collective) +public void UpdateCollectiveMind(CollectiveMindComponent collective)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs` at line 22, Remove the unused EntityUid uid parameter from UpdateCollectiveMind and update every call site to match the revised signature.
16-20: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winRemove unused dependencies and implement or remove
RequiredComponents/RequiredTagschecks.
_componentFactoryand_tagare injected but never used. Their presence strongly suggestsRequiredComponentsandRequiredTagschecks were intended here — the prototype defines these fields, and these systems are the natural consumers. Either implement the checks or remove the dead dependencies and prototype fields.♻️ Proposed fix: remove unused dependencies
[Dependency] private readonly IPrototypeManager _prototypeManager = default!; -[Dependency] private readonly IComponentFactory _componentFactory = default!; -[Dependency] private readonly TagSystem _tag = default!;🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs` around lines 16 - 20, Remove the unused _componentFactory and _tag dependencies from the system, and remove the corresponding RequiredComponents and RequiredTags prototype fields if they are not implemented or consumed. Ensure CollectiveMindUpdateSystem and its prototype definitions no longer retain dead dependency or configuration declarations.
20-20: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick winStatic
_currentIdin a shared system risks client/server ID divergence.This
staticdictionary is per-process and never resets. Since this system lives inContent.Shared, the client and server maintain independent counters. IfUpdateCollectiveMindis ever called on the client (the method ispublic), the client's_currentIdwill be out of sync with the server's, potentially overwriting server-replicatedMindsvalues with incorrect IDs. Consider moving this to instance state or guarding the method with a server-side check.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs` at line 20, Remove the static lifetime from _currentId by making the counter dictionary instance-owned within CollectiveMindUpdateSystem, ensuring each system instance tracks IDs independently. Preserve UpdateCollectiveMind’s existing behavior while preventing client-side calls from sharing process-wide counter state; do not change unrelated logic.Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs (1)
18-25: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueConsider using
ProtoId<CollectiveMindPrototype>as the key type forMinds.
Channelscorrectly usesProtoId<CollectiveMindPrototype>, butMindsuses rawstringkeys, losing type safety and consistency. SinceMindskeys are always prototype IDs (as confirmed byCollectiveMindUpdateSystemwhich adds entries viaprototype.ID), usingProtoIdwould prevent accidental misuse with non-prototype strings.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs` around lines 18 - 25, Update the Minds field in CollectiveMindComponent to use ProtoId<CollectiveMindPrototype> as its dictionary key type, matching Channels and the prototype.ID values used by CollectiveMindUpdateSystem; preserve the existing int value type and data-field initialization.Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml (1)
87-134: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueConsider extracting shared displacement and EroticOrgans configs.
The displacement configurations (jumpsuit, shoes, socks across female/default/male) and
EroticOrgansdefinitions are duplicated verbatim betweenBaseMobHumanoidXenoandMobXenoDummy. Any future change to sprite paths or states must be applied in both places. Consider using a shared prototype or YAML anchor to reduce duplication.Also applies to: 189-236
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml` around lines 87 - 134, Extract the duplicated displacement mappings and EroticOrgans definitions shared by BaseMobHumanoidXeno and MobXenoDummy into a reusable YAML anchor or shared prototype, then reference it from both entities. Preserve the existing femaleDisplacements, displacements, maleDisplacements, sprite paths, states, and EroticOrgans behavior exactly.Resources/Prototypes/_Arcane/Entities/Clothes/Head/hats.yml (1)
1-66: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAll hats inherit from
ClothingHeadHatNTRntcomregardless of role.A clown hat, CMO hat, HOS cap, QM beret, and sanitar hat all parent to the NTR beret prototype. This is likely a copy-paste artifact from the first entry. Using a role-specific or generic hat base would be more semantically correct and avoid inheriting unintended NTR-specific properties.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Prototypes/_Arcane/Entities/Clothes/Head/hats.yml` around lines 1 - 66, Update the parent prototype for ClothingHatClownPink, ClothingHatCMO, ClothingHatHOSCap, ClothingHatQMBlackBeret, and ClothingHatSanitar so they no longer inherit from ClothingHeadHatNTRntcom; use the appropriate role-specific or generic hat base for each while leaving ClothingHatNTRBlackBeret unchanged.Resources/Prototypes/_Arcane/Entities/ERP/condoms.yml (1)
1-10: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueConsider a more appropriate parent for
CondomTrash.
CondomTrashinherits fromFoodPacketTrash, which may carry food-specific tags, components, or behaviors not appropriate for a condom wrapper. A generic trash base would be more semantically correct.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Prototypes/_Arcane/Entities/ERP/condoms.yml` around lines 1 - 10, Change the parent of CondomTrash from FoodPacketTrash to the project’s generic trash entity prototype, preserving the existing Sprite and Item components and their configuration.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs`:
- Around line 59-71: Update the command execution flow around
CollectiveMindComponent and TrySendInGameICMessage to fail immediately when
TryGetComponent does not provide a mind. Keep the existing CanUseInCrit and
dead/critical checks for players with a valid component, and return an
appropriate error through shell before sending any message.
- Line 81: Add CollectiveMind to the InGameICChatType enum and extend
TrySendInGameICMessage with a matching dispatch branch so CollectiveMindCommand
can send messages correctly; preserve the existing Speak, Emote, and Whisper
handling.
In `@Resources/Audio/_White/Talk/attributions.yml`:
- Around line 1-5: Resolve the conflicting license declarations for
xenomorph_ask.ogg and xenomorph_exclaim.ogg by determining the correct Creative
Commons license and updating both attribution entries in the relevant
attributions.yml files to match. Keep xenomorph.ogg unchanged unless its license
also requires correction.
In `@Resources/Audio/_White/Xenomorph/attributions.yml`:
- Line 21: Update the files list in the Xenomorph audio attribution entry by
replacing the incorrectly named "9.ogg" entry with "scream9.ogg", preserving the
existing scream1 through scream10 filename sequence.
In `@Resources/Locale/en-US/_Arcane/markings/humanoid_xeno.ftl`:
- Line 26: Remove the literal double quotes from the values of the affected
marking entries, including marking-HumanoidXenoChestMuscles and the entries at
the other referenced locations. Keep each value as the plain Fluent text
“Muscles” and preserve the existing keys and formatting.
In `@Resources/Prototypes/_Arcane/Body/Organs/humanoid_xeno.yml`:
- Around line 70-91: Update OrganHumanoidXenoLungs to inherit from both
BaseHumanoidXenoOrgan and OrganHumanLungs, and add the Lung component alongside
its existing components so the breathing system recognizes it as functional
lungs.
In `@Resources/Prototypes/_Arcane/Entities/Clothes/Innerclothing/lovemate.yml`:
- Line 16: Correct the typo in the descriptions for both the black shirt and
white shirt entries: replace “nightgrown” with “nightgown” while leaving the
rest of each description unchanged.
In `@Resources/Prototypes/_Arcane/Entities/Clothes/Innerclothing/uniforms.yml`:
- Line 4: Correct the spelling of “unoform” to “uniform” in both bartender
uniform name entries in the YAML, including the additional occurrence identified
by the review.
- Line 125: Correct the typo “sleeveles” to “sleeveless” in all four QM uniform
name entries, including the entries with black uniform, skirt, and their
corresponding variants.
- Line 82: Correct the misspelled word “pracrical” to “practical” in both CMO
sweater descriptions, including the entries represented by the affected
description fields.
In `@Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml`:
- Line 23: Correct the typo in the description by replacing “experienNTRd” with
“experienced,” preserving the rest of the text unchanged.
In `@Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml`:
- Line 5: Update the MobHumanoidXeno prototype reference in humanoid_xeno.yml to
target an existing concrete mob prototype, such as BaseMobHumanoidXeno, or
define the missing MobHumanoidXeno prototype before it is referenced. Ensure the
species points to a prototype that actually exists and can spawn.
In `@Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/meta.json`:
- Line 4: Verify the author’s correct Discord spelling against the canonical
attribution, then update the copyright value in this meta.json and all RSI files
attributed to the same author so they consistently use that spelling and
attribution format.
In
`@Resources/Textures/_Arcane/Structures/Machines/VendingMachines/lovemate.rsi/meta.json`:
- Around line 15-161: Update the delays array in the animation metadata to match
the 384×384 normal-unshaded sprite sheet: it must contain exactly 144 frame
delays for the available 32×32 frames, or alternatively add the missing 16
sprite frames and retain 160 delays.
---
Outside diff comments:
In `@Resources/Audio/_White/Xenomorph/attributions.yml`:
- Around line 1-45: Update the attribution entries in attributions.yml to match
the Xenomorph directory contents: add scream9.ogg to the existing scream
attribution list, and remove the nonexistent files 9.ogg, xenomorph.ogg,
xenomorph_ask.ogg, xenomorph_exclaim.ogg, and xenomorphdisarm.ogg while
preserving the remaining attribution metadata.
In `@Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml`:
- Around line 1-63: Add a Clothing component override to each cloak prototype
identified by ClothingCloakNTRBlack, ClothingCloakNTRTricolor,
ClothingCloakCMOHonorable, ClothingCloakHOSBlack, ClothingCloakHOSRed,
ClothingCloakQMBlack, and ClothingCloakQMWhite. Set each Clothing override to
use the same custom sprite path as its corresponding Sprite component,
preserving the existing prototype-specific worn art.
In `@Resources/Prototypes/_Arcane/Loadouts/Miscellaneous/patron.yml`:
- Around line 1-342: Re-enable the SponsorRequirementLoadoutEffect for every
loadout in patron.yml by uncommenting its effects entry and Tier2 requirement,
including the currently unreferenced ClownPinkPatron, NunDressPatron,
ClownPinkHatPatron, and ApostolCoatPatron. Preserve each loadout’s existing
equipment and IDs.
---
Nitpick comments:
In `@Content.Client/_Starlight/Chat/CollectiveMindSystem.cs`:
- Line 20: Remove the unused _collectiveSystem dependency field and its
[Dependency] injection from CollectiveMindSystem, leaving the rest of the class
unchanged.
In `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs`:
- Around line 18-25: Update the Minds field in CollectiveMindComponent to use
ProtoId<CollectiveMindPrototype> as its dictionary key type, matching Channels
and the prototype.ID values used by CollectiveMindUpdateSystem; preserve the
existing int value type and data-field initialization.
In `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs`:
- Line 22: Remove the unused EntityUid uid parameter from UpdateCollectiveMind
and update every call site to match the revised signature.
- Around line 16-20: Remove the unused _componentFactory and _tag dependencies
from the system, and remove the corresponding RequiredComponents and
RequiredTags prototype fields if they are not implemented or consumed. Ensure
CollectiveMindUpdateSystem and its prototype definitions no longer retain dead
dependency or configuration declarations.
- Line 20: Remove the static lifetime from _currentId by making the counter
dictionary instance-owned within CollectiveMindUpdateSystem, ensuring each
system instance tracks IDs independently. Preserve UpdateCollectiveMind’s
existing behavior while preventing client-side calls from sharing process-wide
counter state; do not change unrelated logic.
In `@Resources/Prototypes/_Arcane/Entities/Clothes/Head/hats.yml`:
- Around line 1-66: Update the parent prototype for ClothingHatClownPink,
ClothingHatCMO, ClothingHatHOSCap, ClothingHatQMBlackBeret, and
ClothingHatSanitar so they no longer inherit from ClothingHeadHatNTRntcom; use
the appropriate role-specific or generic hat base for each while leaving
ClothingHatNTRBlackBeret unchanged.
In `@Resources/Prototypes/_Arcane/Entities/ERP/condoms.yml`:
- Around line 1-10: Change the parent of CondomTrash from FoodPacketTrash to the
project’s generic trash entity prototype, preserving the existing Sprite and
Item components and their configuration.
In `@Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml`:
- Around line 87-134: Extract the duplicated displacement mappings and
EroticOrgans definitions shared by BaseMobHumanoidXeno and MobXenoDummy into a
reusable YAML anchor or shared prototype, then reference it from both entities.
Preserve the existing femaleDisplacements, displacements, maleDisplacements,
sprite paths, states, and EroticOrgans behavior exactly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
| var entityManager = IoCManager.Resolve<IEntityManager>(); | ||
| entityManager.TryGetComponent<CollectiveMindComponent>(playerEntity, out var mind); | ||
|
|
||
| // Skip dead/critical check if CanUseInCrit is enabled | ||
| if (mind != null && !mind.CanUseInCrit) | ||
| { | ||
| var mobStateSystem = EntitySystem.Get<MobStateSystem>(); | ||
| if (mobStateSystem.IsDead(playerEntity) || mobStateSystem.IsCritical(playerEntity)) | ||
| { | ||
| shell.WriteError("You cannot use the collective mind while dead or incapacitated!"); | ||
| return; | ||
| } | ||
| } |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Add a null check for CollectiveMindComponent — players without the component can execute cmsay.
When mind is null (player has no CollectiveMindComponent), the crit/dead check is skipped and execution falls through to TrySendInGameICMessage. The command should fail fast if the player lacks the component.
🔒 Proposed fix
entityManager.TryGetComponent<CollectiveMindComponent>(playerEntity, out var mind);
+if (mind == null)
+{
+ shell.WriteError("You don't have a collective mind!");
+ return;
+}
+
// Skip dead/critical check if CanUseInCrit is enabled
if (mind != null && !mind.CanUseInCrit)📝 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.
| var entityManager = IoCManager.Resolve<IEntityManager>(); | |
| entityManager.TryGetComponent<CollectiveMindComponent>(playerEntity, out var mind); | |
| // Skip dead/critical check if CanUseInCrit is enabled | |
| if (mind != null && !mind.CanUseInCrit) | |
| { | |
| var mobStateSystem = EntitySystem.Get<MobStateSystem>(); | |
| if (mobStateSystem.IsDead(playerEntity) || mobStateSystem.IsCritical(playerEntity)) | |
| { | |
| shell.WriteError("You cannot use the collective mind while dead or incapacitated!"); | |
| return; | |
| } | |
| } | |
| var entityManager = IoCManager.Resolve<IEntityManager>(); | |
| entityManager.TryGetComponent<CollectiveMindComponent>(playerEntity, out var mind); | |
| if (mind == null) | |
| { | |
| shell.WriteError("You don't have a collective mind!"); | |
| return; | |
| } | |
| // Skip dead/critical check if CanUseInCrit is enabled | |
| if (mind != null && !mind.CanUseInCrit) | |
| { | |
| var mobStateSystem = EntitySystem.Get<MobStateSystem>(); | |
| if (mobStateSystem.IsDead(playerEntity) || mobStateSystem.IsCritical(playerEntity)) | |
| { | |
| shell.WriteError("You cannot use the collective mind while dead or incapacitated!"); | |
| return; | |
| } | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs` around
lines 59 - 71, Update the command execution flow around CollectiveMindComponent
and TrySendInGameICMessage to fail immediately when TryGetComponent does not
provide a mind. Keep the existing CanUseInCrit and dead/critical checks for
players with a valid component, and return an appropriate error through shell
before sending any message.
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Resources/Locale/en-US/_Arcane/entities/clothing/innerclothing/uniforms.ftl`:
- Around line 1-30: Correct the user-facing typos in the clothing localization
entries: update the bartender uniform names, CMO sweater descriptions, and QM
sleeveless uniform names, and remove the extra space before “NTR’s” in
ent-ClothingUniformNTRWhite. Preserve all keys and surrounding text.
In `@Resources/Locale/en-US/_Arcane/entities/clothing/neck/cloaks.ftl`:
- Around line 1-14: Correct the typos in the ent-ClothingCloakNTRTricolor and
ent-ClothingCloakQMBlack descriptions: change “exquisitely” to “exquisite” and
“definately” to “definitely,” leaving all other localization text unchanged.
In `@Resources/Locale/en-US/_Arcane/entities/clothing/outerclothing/coats.ftl`:
- Around line 9-10: Update the source description for the enlightenment lab coat
in the coats.yml prototype, not just the mirrored
ent-ClothingOuterCoatLabEnlightenment locale entry, so its generated text uses
natural wording for the relationship between “bacchus” and “death.”
In `@Resources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftl`:
- Around line 3-8: Update the descriptions for ent-ClothingHatClownPink and
ent-ClothingHatHOSCap to replace the hyphen with an em dash, preserving the
surrounding Russian text and punctuation.
In `@Resources/Locale/ru-RU/_Arcane/entities/clothing/neck/cloaks.ftl`:
- Line 2: Исправьте согласование в локализованном описании свойства `.desc`:
замените форму «созданных» на «созданный», сохранив остальной текст без
изменений.
🪄 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 Plus
Run ID: 15aca431-c979-4b7d-be7f-c2b8f55f0105
📒 Files selected for processing (24)
Content.Client/_Starlight/Chat/CollectiveMindSystem.csContent.Server/_Starlight/Chat/Commands/CollectiveMindCommand.csResources/Locale/en-US/_Arcane/datasets/names/xeno_first.ftlResources/Locale/en-US/_Arcane/datasets/names/xeno_last.ftlResources/Locale/en-US/_Arcane/entities/clothing/hands/gloves.ftlResources/Locale/en-US/_Arcane/entities/clothing/head/hats.ftlResources/Locale/en-US/_Arcane/entities/clothing/innerclothing/uniforms.ftlResources/Locale/en-US/_Arcane/entities/clothing/neck/cloaks.ftlResources/Locale/en-US/_Arcane/entities/clothing/outerclothing/armor.ftlResources/Locale/en-US/_Arcane/entities/clothing/outerclothing/coats.ftlResources/Locale/en-US/_Arcane/entities/clothing/shoes/boots.ftlResources/Locale/en-US/_Arcane/entities/clothing/shoes/shoes.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/hands/gloves.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/innerclothing/uniforms.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/neck/cloaks.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/outerclothing/armor.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/outerclothing/coats.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/shoes/boots.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/shoes/shoes.ftlResources/Prototypes/Loadouts/LoadoutGroups/loadout_groups.ymlResources/Prototypes/_Arcane/Datasets/Names/xeno_first.ymlResources/Prototypes/_Arcane/Datasets/Names/xeno_last.ymlResources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml
🚧 Files skipped from review as they are similar to previous changes (4)
- Content.Client/_Starlight/Chat/CollectiveMindSystem.cs
- Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml
- Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs
- Resources/Prototypes/Loadouts/LoadoutGroups/loadout_groups.yml
|
@coderabbitai проверь на ошибки. коллективный разум будет работать? |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== CollectiveMindSystem.cs (client) ==="
cat -n Content.Client/_Starlight/Chat/CollectiveMindSystem.cs
echo "=== CollectiveMindCommand.cs (server) ==="
cat -n Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs
echo "=== CollectiveMindComponent.cs ==="
cat -n Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs
echo "=== CollectiveMindPrototype.cs ==="
cat -n Content.Shared/_Starlight/CollectiveMind/CollectiveMindPrototype.cs
echo "=== CollectiveMindUpdateSystem.cs ==="
cat -n Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs
echo "=== search UpdateCollectiveMind call sites ==="
rg -n 'UpdateCollectiveMind' --type=cs
echo "=== search IsCollectiveMind usages ==="
rg -n 'IsCollectiveMind' --type=cs
echo "=== search InGameICChatType.CollectiveMind ==="
rg -n 'InGameICChatType\.CollectiveMind|CollectiveMind' --type=cs -g '*Chat*'
echo "=== search TrySendInGameICMessage definition ==="
rg -n 'TrySendInGameICMessage' --type=cs -C2
echo "=== search InGameICChatType enum definition ==="
rg -n 'enum InGameICChatType' --type=cs -A15Length of output: 13003 🏁 Script executed: #!/bin/bash
set +e
echo "=== IsCollectiveMind usages ==="
rg -n 'IsCollectiveMind' --type=cs
echo "=== InGameICChatType.CollectiveMind usage in ChatSystem ==="
rg -n 'CollectiveMind' Content.Server/Chat/Systems/ 2>/dev/null
echo "=== search all CollectiveMind mentions across Content.Server/Chat ==="
rg -n 'CollectiveMind' --type=cs -g '*Chat*'
echo "=== TrySendInGameICMessage full definition ==="
rg -n 'void TrySendInGameICMessage|bool TrySendInGameICMessage' --type=cs -A40 Content.Server/Chat/Systems/ChatSystem.cs
echo "=== enum InGameICChatType ==="
rg -n 'enum InGameICChatType' --type=cs -A15
echo "=== search .Channels usage ==="
rg -n '\.Channels\b' --type=cs
echo "=== search .Minds usage (component field) ==="
rg -n '\bcollective\.Minds\b|CollectiveMindComponent.*Minds|\.Minds\[' --type=cs
echo "=== search DefaultChannel usage ==="
rg -n 'DefaultChannel' --type=cs
echo "=== search CollectiveMind in yml species/xeno files ==="
rg -n 'CollectiveMind' Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml
echo "=== search verbs toggling collective mind channel ==="
rg -n 'CollectiveMind' --type=cs -g '*Verb*'Length of output: 1492 🏁 Script executed: #!/bin/bash
echo "=== IsCollectiveMind usages ==="
rg -n 'IsCollectiveMind' --type=cs || true
echo "=== CollectiveMind mentions in Chat-related files ==="
rg -n 'CollectiveMind' --type=cs -g '*Chat*' || true
echo "=== TrySendInGameICMessage definition ==="
fd ChatSystem.cs || true
rg -n 'TrySendInGameICMessage' --type=cs -A5 -B5 || true
echo "=== enum InGameICChatType ==="
rg -n 'enum InGameICChatType' --type=cs -A20 || true
echo "=== .Channels usage ==="
rg -n '\.Channels\b' --type=cs || true
echo "=== .Minds usage ==="
rg -n 'collective\.Minds|\.Minds\b' --type=cs || true
echo "=== DefaultChannel usage ==="
rg -n 'DefaultChannel' --type=cs || true
echo "=== CollectiveMind in xeno species yml ==="
rg -n 'CollectiveMind' Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml || true
echo "=== CollectiveMind in verbs ==="
rg -n 'CollectiveMind' --type=cs -g '*Verb*' || true
echo "=== CollectiveMind broad search whole repo ==="
rg -n 'CollectiveMind' --type=cs || trueLength of output: 1175 🏁 Script executed: #!/bin/bash
rg -n 'CollectiveMind' --type=cs -lLength of output: 355 🏁 Script executed: #!/bin/bash
echo "--- direct file rg ---"
rg -n 'CollectiveMind' Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs
echo "exit: $?"
echo "--- rg without --type=cs ---"
rg -n 'CollectiveMind' -g '*.cs' | head -50
echo "exit: $?"
echo "--- check ignore files ---"
find . -maxdepth 2 -iname '.rgignore' -o -iname '.ignore' 2>/dev/null
cat .gitignore 2>/dev/null | head -30
echo "--- rg --no-ignore ---"
rg -n --no-ignore 'CollectiveMind' -g '*.cs' | head -50Length of output: 1010 🏁 Script executed: #!/bin/bash
rg -n 'CollectiveMind' -g '*.cs' -t cs 2>&1
echo "DONE-EXIT:$?"Length of output: 383 🏁 Script executed: #!/bin/bash
rg -n 'CollectiveMind' . 2>&1
echo "DONE-EXIT:$?"Length of output: 5590 🏁 Script executed: #!/bin/bash
echo "=== lines 170-300 ==="
sed -n '170,300p' Content.Server/Chat/Systems/ChatSystem.cs
echo "=== lines 520-610 ==="
sed -n '520,610p' Content.Server/Chat/Systems/ChatSystem.cs
echo "=== TryProccessCollectiveMindMessage definition ==="
rg -n 'TryProccessCollectiveMindMessage' Content.Server/Chat/Systems/ChatSystem.cs -A30Length of output: 11238 🏁 Script executed: #!/bin/bash
rg -n 'private.*TryProccessCollectiveMindMessage|bool TryProccessCollectiveMindMessage' Content.Server/Chat/Systems/ChatSystem.cs -B2 -A40Length of output: 458 🏁 Script executed: #!/bin/bash
rg -n 'TryProccessCollectiveMindMessage' . -B2 -A40Length of output: 4075 🏁 Script executed: #!/bin/bash
echo "=== case-insensitive broader search ==="
rg -ni 'ProccessCollectiveMind|ProcessCollectiveMind' .
echo "=== search TryProcessRadioMessage similar pattern definition (to see naming convention used) ==="
rg -n 'bool TryProcessRadioMessage' Content.Server/Chat/Systems/ChatSystem.cs -B2 -A5
echo "=== check base/shared ChatSystem class for partial method declarations ==="
fd 'ChatSystem' Content.Shared -e csLength of output: 1066 🏁 Script executed: #!/bin/bash
echo "=== find TryProcessRadioMessage anywhere ==="
rg -n 'TryProcessRadioMessage' .
echo "=== find any partial ChatSystem files in _Starlight or _Arcane paths ==="
fd 'ChatSystem' Content.Server -e cs
echo "=== check git diff / blame is this PR's own new code (search git log for this function) ==="
git log --oneline -- Content.Server/Chat/Systems/ChatSystem.cs | head -5Length of output: 1686
Критическая ошибка (ломает сборку)В if (TryProccessCollectiveMindMessage(source, message, out var modMessage, out var channel))Метод Из-за этого Судя по сообщению коммита Что нужно реализоватьМетод должен по аналогии с
Пример сигнатуры (нужно добавить в private bool TryProccessCollectiveMindMessage(EntityUid source, ChatMessage message, out string modMessage, out CollectiveMindPrototype? channel)
{
modMessage = message.Text;
channel = null;
if (!TryComp<CollectiveMindComponent>(source, out var collective))
return false;
// Ищем префикс с keycode одного из доступных каналов
foreach (var channelId in collective.Channels)
{
if (!_prototypeManager.TryIndex(channelId, out var proto))
continue;
if (message.Text.Length > 0 && message.Text[0] == proto.KeyCode)
{
channel = proto;
modMessage = message.Text[1..].TrimStart();
return true;
}
}
// Иначе используем канал по умолчанию
if (collective.DefaultChannel is { } defaultId && _prototypeManager.TryIndex(defaultId, out var defaultProto))
{
channel = defaultProto;
return true;
}
return false;
}(Это набросок логики, точную реализацию нужно адаптировать под остальную кодовую базу.) Остальной код — без явных ошибок
Хочешь, чтобы я подготовил план правки для добавления |
|
@coderabbitai теперь система рабочая? |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
run_id="29598253290"
job_id="87946896554"
artifact_id="8415372719"
echo "=== Job metadata and failure steps ==="
gh api "repos/$repo/actions/jobs/$job_id" \
--jq '{name, conclusion, started_at, completed_at, steps: [.steps[] | {number, name, conclusion}]}'
echo "=== Artifact metadata ==="
gh api "repos/$repo/actions/artifacts/$artifact_id" \
--jq '{id, name, size_in_bytes, expired, created_at, expires_at, archive_download_url}'
echo "=== Timeout context and last test markers ==="
log="$(mktemp)"
trap 'rm -f "$log"' EXIT
gh run view "$run_id" --repo "$repo" --log --job "$job_id" >"$log" 2>&1
rg -n -i -C 15 \
'GetPair: Called by test|inactivity time|Attempt [0-9]+ failed|Final attempt failed|createdump|test host process crashed|SpawnAndDirtyAllEntities|XenoArtifact' \
"$log" | tail -900 || true
echo "=== PR changes (paths only) ==="
base="$(gh pr view 5 --repo "$repo" --json baseRefOid -q '.baseRefOid')"
git diff --name-status "$base"...HEAD | sed -n '1,1000p'
echo "=== Integration-test sharding configuration ==="
rg -n -i -C 5 'shard|total.*shard|Integration Tests|filter' \
.github Content.IntegrationTests \
-g '*.yml' -g '*.yaml' -g '*.cs' 2>/dev/null | head -1000 || true
echo "=== Entity spawn test definition ==="
fd -e cs 'EntityTest' Content.IntegrationTests \
--exec sh -c 'echo "--- $1"; ast-grep outline "$1" --items all; rg -n -C 20 "SpawnAndDirtyAllEntities" "$1"' sh {} \;Length of output: 233892 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
artifact_id="8415372719"
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT
echo "=== Artifact redirect and byte-range support ==="
gh api -i "repos/$repo/actions/artifacts/$artifact_id/zip" >"$tmp/headers.txt" || true
sed -n '1,80p' "$tmp/headers.txt"
url="$(sed -n -E 's/^[Ll]ocation: //p' "$tmp/headers.txt" | tr -d '\r' | tail -1)"
if [[ -n "$url" ]]; then
echo "=== Range probe (last 128 KiB of ZIP) ==="
curl --fail --silent --show-error --location \
--range -131072 -o "$tmp/zip-tail.bin" \
-w 'http=%{http_code} bytes=%{size_download} range=%{content_range}\n' \
"$url" || true
ls -lh "$tmp/zip-tail.bin" 2>/dev/null || true
strings "$tmp/zip-tail.bin" 2>/dev/null | rg -i 'sequence|\.xml|\.dmp' | head -100 || true
else
echo "No redirect location returned."
fi
echo "=== PR changes to systems observed in slow-test timing ==="
base="$(gh pr view 5 --repo "$repo" --json baseRefOid -q '.baseRefOid')"
for file in \
Content.Shared/Humanoid/HumanoidVisualLayers.cs \
Content.Shared/Humanoid/HumanoidVisualLayersExtension.cs \
Content.Shared/Chat/SharedChatSystem.cs \
Content.Server/Chat/Systems/ChatSystem.cs \
Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs \
Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml \
Resources/Prototypes/_Arcane/Entities/Mobs/Player/humanoid_xeno.yml
do
if [[ -f "$file" ]]; then
echo "--- $file ---"
git diff --unified=8 "$base"...HEAD -- "$file"
fi
done
echo "=== Tests that follow the last completed test in shard 4's generated filter ==="
if [[ -f .integration-filters/shard_4.runsettings ]]; then
rg -n -C 3 'XenoArtifactRemoveNodeTest|XenoArtifactGenerateSegmentsTest' \
.integration-filters/shard_4.runsettings
else
echo ".integration-filters is generated only in CI and is not present in the checkout."
fiLength of output: 2031 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
artifact_id="8415372719"
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT
echo "=== Download endpoint headers only (no artifact body) ==="
gh api --method HEAD -i "repos/$repo/actions/artifacts/$artifact_id/zip" >"$tmp/headers.txt" 2>&1 || true
sed -n '1,100p' "$tmp/headers.txt"
url="$(sed -n -E 's/^[Ll]ocation: //p' "$tmp/headers.txt" | tr -d '\r' | tail -1)"
if [[ -z "$url" ]]; then
echo "No redirect URL from HEAD response."
exit 0
fi
echo "=== Last 256 KiB of the ZIP only ==="
curl --fail --silent --show-error --location \
-H 'Range: bytes=-262144' \
-D "$tmp/range-headers.txt" \
-o "$tmp/zip-tail.bin" \
"$url" || true
sed -n '1,80p' "$tmp/range-headers.txt"
ls -lh "$tmp/zip-tail.bin" 2>/dev/null || true
echo "=== Central-directory candidate names ==="
strings "$tmp/zip-tail.bin" 2>/dev/null \
| rg -i '(sequence.*\.xml|\.dmp$|test-results)' \
| head -100 || trueLength of output: 2153
Что известно точно:
Можно ли исправить в этом PR?Да, если hang dump/Sequence.xml укажет на код из PR. Сейчас утверждать, что это вызвали ксеноморфы, коллективный разум или новые прототипы, нельзя. Не стоит:
Это лишь скроет зависание. Что нужно для точного исправленияВ артефакте После этого возможны два сценария:
На текущих данных единственный корректный вывод: это реальный повторяемый зависший процесс, но не доказанный регресс PR. |
There was a problem hiding this comment.
Зачем ты этот файл трогал? Он тебе не нужен
There was a problem hiding this comment.
Кто ломался? Верни как было
|
@coderabbitai почему упали тесты? |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
pr="5"
echo "=== CURRENT PR HEAD AND CHECKS ==="
gh pr view "$pr" --repo "$repo" --json headRefName,headRefOid,statusCheckRollup \
--jq '{
branch: .headRefName,
sha: .headRefOid,
checks: [.statusCheckRollup[] | {
name,
status,
conclusion,
detailsUrl
}]
}'
branch="$(gh pr view "$pr" --repo "$repo" --json headRefName -q '.headRefName')"
sha="$(gh pr view "$pr" --repo "$repo" --json headRefOid -q '.headRefOid')"
echo "=== COMPLETED FAILED RUNS FOR CURRENT HEAD ==="
gh run list --repo "$repo" --branch "$branch" --limit 30 \
--json databaseId,headSha,displayTitle,status,conclusion,createdAt,updatedAt,url \
--jq --arg sha "$sha" '
.[]
| select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
| {id: .databaseId, title: .displayTitle, createdAt, updatedAt, url}
'
for run_id in $(
gh run list --repo "$repo" --branch "$branch" --limit 30 \
--json databaseId,headSha,status,conclusion \
--jq --arg sha "$sha" '
.[]
| select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
| .databaseId
'
); do
echo "=== FAILED JOBS: RUN $run_id ==="
gh run view "$run_id" --repo "$repo" --json jobs \
--jq '.jobs[] | select(.conclusion == "failure") |
{id: .databaseId, name, failedSteps: [.steps[] | select(.conclusion == "failure") | .name]}'
echo "=== FAILURE DIAGNOSTICS: RUN $run_id ==="
gh run view "$run_id" --repo "$repo" --log-failed 2>&1 \
| rg -n -i -C 10 \
'::error|[0-9]+ errors found|error (CS|MSB|RA)|Failed!|Error Message:|Expected:|Actual:|Assertion|Assert\.|Exception|Stack Trace|Unhandled|fatal|PrototypeLoadException|UnknownComponentException|KeyNotFoundException|not found|not mapped|invalid|duplicate|LocalizedDataset|GenericEquip|arbitrage|stereo|timed out|timeout|test host|exit code [0-9]+|503' \
| head -2600 || true
doneLength of output: 6807 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
declare -a jobs=(
"29619137260:88010469294:build"
"29619137294:88010469367:build-ubuntu"
"29619137176:88010468888:test-packaging"
"29619137307:88010469320:yaml-linter"
)
for item in "${jobs[@]}"; do
IFS=":" read -r run_id job_id label <<<"$item"
echo
echo "=== $label (run $run_id, job $job_id) ==="
gh api "repos/$repo/actions/jobs/$job_id" \
--jq '{name, conclusion, failedSteps: [.steps[] | select(.conclusion == "failure") | {number, name}]}' \
|| true
gh run view "$run_id" --repo "$repo" --log-failed --job "$job_id" 2>&1 \
| rg -n -i -C 12 \
'::error|error (CS|MSB|RA)[0-9]*|[0-9]+ errors found|Unhandled exception|Exception:|Stack Trace|PrototypeLoadException|UnknownComponentException|KeyNotFoundException|not found|not mapped|invalid|duplicate|cannot deserialize|cannot parse|failed|exit code [0-9]+' \
| head -1800 || true
doneLength of output: 156272
В Затронутые места:
Из-за этого не собирается
А ИсправлениеВерните public enum BodyPartType
{
// существующие значения…
Tail,
Tracheas,
}
🐇⬛ |
Vecortys
left a comment
There was a problem hiding this comment.
Я так и не понял, зачем тебе нужно было портировать всякое из Щитмеда. Удали это.
Потом я повторно по всему пройдусь, сейчас бегло осмотрел. Не делай больше никогда ПРы на несколько портов сразу, иначе я тебя выебу
There was a problem hiding this comment.
Кто ломался? Верни как было
|
@coderabbitai почему тесты упали? |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
pr="5"
echo "=== CURRENT PR HEAD AND CHECKS ==="
gh pr view "$pr" --repo "$repo" --json headRefName,headRefOid,statusCheckRollup \
--jq '{
branch: .headRefName,
sha: .headRefOid,
checks: [.statusCheckRollup[] | {
name,
status,
conclusion,
detailsUrl
}]
}'
branch="$(gh pr view "$pr" --repo "$repo" --json headRefName -q '.headRefName')"
sha="$(gh pr view "$pr" --repo "$repo" --json headRefOid -q '.headRefOid')"
echo "=== FAILED WORKFLOWS FOR CURRENT HEAD ==="
gh run list --repo "$repo" --branch "$branch" --limit 30 \
--json databaseId,headSha,displayTitle,status,conclusion,url,createdAt \
--jq --arg sha "$sha" '
.[]
| select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
| {id: .databaseId, title: .displayTitle, url, createdAt}
'
for run_id in $(gh run list --repo "$repo" --branch "$branch" --limit 30 \
--json databaseId,headSha,status,conclusion \
--jq --arg sha "$sha" '
.[]
| select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
| .databaseId
'); do
echo "=== FAILED JOBS: RUN $run_id ==="
gh run view "$run_id" --repo "$repo" --json jobs \
--jq '.jobs[]
| select(.conclusion == "failure")
| {id: .databaseId, name, failedSteps: [.steps[] | select(.conclusion == "failure") | .name]}'
echo "=== FAILURE DIAGNOSTICS: RUN $run_id ==="
gh run view "$run_id" --repo "$repo" --log-failed 2>&1 \
| rg -n -i -C 10 \
'::error|[0-9]+ errors found|error (CS|MSB|RA)[0-9]*|Failed!|Error Message:|Expected:|Actual:|Assertion|Assert\.|Exception|Stack Trace|Unhandled|fatal|PrototypeLoadException|UnknownComponentException|KeyNotFoundException|not found|not mapped|invalid|duplicate|LocalizedDataset|GenericEquip|arbitrage|stereo|timed out|timeout|test host|exit code [0-9]+|503' \
| head -2600 || true
doneLength of output: 7986 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
run_id="29654072182"
job_id="88105964270"
log="$(mktemp)"
trap 'rm -f "$log"' EXIT
echo "=== FAILED JOB METADATA ==="
gh api "repos/$repo/actions/jobs/$job_id" \
--jq '{
name,
status,
conclusion,
started_at,
completed_at,
failedSteps: [.steps[] | select(.conclusion == "failure") | {number, name, conclusion}]
}'
echo "=== FAILED JOB LOG ==="
gh run view "$run_id" --repo "$repo" --log --job "$job_id" >"$log" 2>&1
echo "=== FAILURE / TEST CONTEXT ==="
rg -n -i -C 25 \
'Failed!|Error Message:|Expected:|Actual:|Assertion|Assert\.|Exception|Stack Trace|Unhandled|fatal|test host|crash|hang|timed out|timeout|killed|SIGKILL|out of memory|OOM|Attempted to spawn|invalid prototype|LocalizedDataset|GenericEquip|stereo|arbitrage|exit code [0-9]+' \
"$log" | tail -2200 || true
echo "=== LAST TEST START MARKERS BEFORE FAILURE ==="
rg -n -i -C 3 \
'GetPair: Called by test|Starting test execution|Test Run (Successful|Failed)|The test running when the crash occurred|inactivity time|Final attempt failed' \
"$log" | tail -700 || true
echo "=== LOG TAIL ==="
tail -350 "$log"Length of output: 198734
Причина: test host завис и не выдавал активность более трёх минут: Тест, который runner отмечает активным в момент зависания: Это общий тест, который создаёт и обновляет все entity-прототипы. Он не сообщает, на каком именно прототипе остановился, поэтому из обычного лога нельзя достоверно назвать конкретный файл PR-виновник. В логе есть предупреждение из Для точной диагностики CI сохранил hang dump и Итог: это повторяемый timeout в |
|
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
|
@coderabbitai почему упали тесты? |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
pr="5"
echo "=== CURRENT PR HEAD AND CHECKS ==="
gh pr view "$pr" --repo "$repo" --json headRefName,headRefOid,statusCheckRollup \
--jq '{
branch: .headRefName,
sha: .headRefOid,
checks: [.statusCheckRollup[] | {name, status, conclusion, detailsUrl}]
}'
branch="$(gh pr view "$pr" --repo "$repo" --json headRefName -q '.headRefName')"
sha="$(gh pr view "$pr" --repo "$repo" --json headRefOid -q '.headRefOid')"
echo "=== COMPLETED FAILED WORKFLOWS FOR CURRENT HEAD ==="
gh run list --repo "$repo" --branch "$branch" --limit 30 \
--json databaseId,headSha,displayTitle,status,conclusion,url,createdAt,updatedAt \
--jq --arg sha "$sha" '
.[]
| select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
| {id: .databaseId, title: .displayTitle, url, createdAt, updatedAt}
'
for run_id in $(
gh run list --repo "$repo" --branch "$branch" --limit 30 \
--json databaseId,headSha,status,conclusion \
--jq --arg sha "$sha" '
.[]
| select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
| .databaseId
'
); do
echo "=== FAILED JOBS: RUN $run_id ==="
gh run view "$run_id" --repo "$repo" --json jobs \
--jq '.jobs[]
| select(.conclusion == "failure")
| {id: .databaseId, name, failedSteps: [.steps[] | select(.conclusion == "failure") | .name]}'
echo "=== FAILURE DIAGNOSTICS: RUN $run_id ==="
gh run view "$run_id" --repo "$repo" --log-failed 2>&1 \
| rg -n -i -C 12 \
'::error|[0-9]+ errors found|error (CS|MSB|RA)[0-9]*|Failed!|Error Message:|Expected:|Actual:|Assertion|Assert\.|Exception|Stack Trace|Unhandled|fatal|PrototypeLoadException|UnknownComponentException|KeyNotFoundException|not found|not mapped|invalid|duplicate|LocalizedDataset|GenericEquip|arbitrage|stereo|timed out|timeout|test host|SpawnAndDirtyAllEntities|exit code [0-9]+|503' \
| head -3000 || true
doneLength of output: 8038 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
declare -a jobs=(
"29944379285:89005933018:ubuntu-build"
"29944379220:89005932624:yaml-linter"
"29944379583:89008083898:integration-shard-0"
"29944379583:89008083894:integration-shard-1"
"29944379583:89008083841:integration-shard-2"
"29944379583:89008083934:integration-shard-3"
"29944379583:89008083875:integration-shard-4"
"29944379583:89008083876:integration-shard-5"
"29944379583:89008083931:integration-shard-6"
"29944379583:89008083869:integration-shard-7"
)
for spec in "${jobs[@]}"; do
IFS=: read -r run_id job_id label <<<"$spec"
log="$(mktemp)"
trap 'rm -f "$log"' EXIT
echo
echo "=== $label — job metadata ==="
gh api "repos/$repo/actions/jobs/$job_id" \
--jq '{name, conclusion, failedSteps: [.steps[] | select(.conclusion == "failure") | .name]}' || true
gh run view "$run_id" --repo "$repo" --log --job "$job_id" >"$log" 2>&1 || true
echo "=== $label — error/test diagnostics ==="
rg -n -i -C 10 \
'::error|error (CS|MSB|RA)[0-9]*|Failed!|Error Message:|Expected:|Actual:|Assertion|Assert\.|Exception|Stack Trace|Unhandled|fatal|PrototypeLoadException|UnknownComponentException|KeyNotFoundException|not found|not mapped|invalid|duplicate|cannot deserialize|cannot parse|Attempted to spawn|LocalizedDataset|arbitrage|stereo|test host|timeout|exit code [0-9]+' \
"$log" | tail -700 || true
echo "=== $label — log tail ==="
tail -80 "$log" || true
rm -f "$log"
trap - EXIT
doneLength of output: 201930 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== YAML references to the CollectiveMind component ==="
rg -n -C 8 'type:\s*CollectiveMind\b' Resources --glob '*.yml' --glob '*.yaml' || true
echo "=== CollectiveMindComponent declaration and registration attributes ==="
fd -e cs 'CollectiveMindComponent' Content.Shared Content.Server Content.Client \
--exec sh -c '
echo "--- $1"
sed -n "1,180p" "$1"
' sh {} \;
echo "=== All component-name registration references ==="
rg -n -C 4 '\bCollectiveMind(Component)?\b|RegisterComponent' \
Content.Shared/_Starlight/CollectiveMind \
Content.Server \
Content.Client \
--glob '*.cs' || true
repo="ArcaneSS14/arcane"
for spec in \
"29944379285:89005933018:ubuntu-build" \
"29944379220:89005932624:yaml-linter"
do
IFS=: read -r run_id job_id label <<<"$spec"
echo
echo "=== $label errors ==="
gh run view "$run_id" --repo "$repo" --log --job "$job_id" 2>&1 \
| rg -n -i -C 15 \
'error (CS|MSB|RA)[0-9]*|UnknownComponentException|Unknown name: CollectiveMind|YAML|failed|exception|exit code [0-9]+' \
| tail -800 || true
doneLength of output: 201633 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== Exact YAML references ==="
rg -n -C 6 'type:[[:space:]]*CollectiveMind\b' Resources \
-g '*.yml' -g '*.yaml' || true
echo "=== Collective-mind C# files ==="
fd -e cs . Content.Shared/_Starlight/CollectiveMind
echo "=== Component declaration with attributes ==="
rg -n -U -C 8 \
'\[(RegisterComponent|NetworkedComponent|AutoGenerateComponentState)[^\]]*\][\s\r\n]*(public|internal).*CollectiveMindComponent' \
Content.Shared Content.Server Content.Client -g '*.cs' || true
echo "=== All CollectiveMindComponent declarations, including any without registration ==="
rg -n -C 12 \
'\b(class|struct)\s+CollectiveMindComponent\b|\[RegisterComponent' \
Content.Shared/_Starlight/CollectiveMind -g '*.cs' || true
echo "=== Component conventions from adjacent Starlight components ==="
fd -e cs . Content.Shared/_Starlight \
--exec sh -c '
rg -q "RegisterComponent" "$1" || exit 0
if rg -q "public sealed partial class .*Component" "$1"; then
echo "--- $1"
rg -n -C 3 "RegisterComponent|public sealed partial class .*Component" "$1"
fi
' sh {} \; | head -240Length of output: 2829 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== All CollectiveMind references in the current checkout ==="
rg -n -C 4 '\bCollectiveMind(Component|Prototype|UpdateSystem)?\b' \
Content.Shared Content.Server Content.Client Resources \
-g '*.cs' -g '*.yml' -g '*.yaml' || true
echo "=== Tracked collective-mind files at HEAD ==="
git ls-tree -r --name-only HEAD | rg -i 'collective.?mind' || true
echo "=== Collective-mind files changed by this PR ==="
base="$(git merge-base HEAD origin/main)"
git diff --name-status "$base"...HEAD | rg -i 'collective.?mind|humanoid_xeno\.yml' || true
echo "=== Was CollectiveMindComponent.cs present in the PR base? ==="
git ls-tree -r --name-only "$base" | rg 'CollectiveMindComponent\.cs|CollectiveMind/' || true
echo "=== Recent history of CollectiveMindComponent.cs, if Git knows it ==="
git log --all --oneline --diff-filter=ADR -- \
'Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs' \
'Content.Shared/_Starlight/CollectiveMind' | head -40 || true
echo "=== Current humanoid-xeno component block ==="
sed -n '112,142p' Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.ymlLength of output: 2701
В - type: CollectiveMind
defaultChannel: HumanoidXenomind
channels:
- HumanoidXenomindНо в текущем коммите нет реализации компонента: в Из-за этого:
Как исправитьЕсть два варианта:
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class CollectiveMindComponent : Component
{
// поля defaultChannel / channels и другие данные компонента
}Также понадобятся
Правильнее для заявленной функциональности — вернуть компонент и связанную реализацию, а не просто удалить YAML: иначе у ксеноморфов не будет коллективного разума. Предыдущее зависание |








































Описание PR
Пересос лавмата, донатных вещей, ксеноморфов и системы коллективного разума, которая вообще-то есть на сборке старлайта, но почему-то её не было тут
Медиа
Тип PR
Лицензионное соглашение
Изменения
🆑
Summary by CodeRabbit
cmsaycommand, including permission-aware communication.