docs: bugsweep learnings from week 2026-W34 - #10014
decentraland-bot wants to merge 1 commit into
Conversation
Learnings distilled from the review of the week 2026-W34 bugsweep PR (#9908), routed to the code-context files. - chat-system skill: in local scene development the LiveKit chat room (DM transport) must not be connected — gate at the source in CommsContainer (IConnectiveRoom.Null.INSTANCE, mirroring the island room) and early-return in PrivateConversationUserStateService, not by filtering DMs downstream. Evidence: reviewer directive on #9832 ("drop connection to ... the livekit chat room as a whole") and the human rework that reverted the bot's DM filter (commit b0eabda). - CLAUDE.md §11: a transient asset/metadata fetch failure must not be encoded as a permanent capability downgrade — keep the DTO-declared flag, log, and evict the poisoned cache entry for retry. Evidence: reviewer directive on #9839 ("keep item.IsSmart as true but log the issue") and the human rework (commit 83d28b0) that replaced IsSmart=false with cache.Remove(id).
🚦 CI StatusBuild skipped — no changes detected under Waiting for lint to start… Waiting for tests to start… Bare-metal benchmarks run automatically after each successful build; results land in this section. Add the On demand — comment |
|
Slack notification sent to #explorer-ext-contributions for external review. |
decentraland-bot
left a comment
There was a problem hiding this comment.
Review — docs: bugsweep learnings from week 2026-W34
STEP 2 — Root-cause check
N/A — this is a documentation-only PR capturing distilled learnings from the 2026-W34 bugsweep (#9908). It does not fix a bug or modify runtime behavior.
STEP 3 — Design & integration
N/A — no new code units, systems, or runtime logic introduced. Both changes are additive documentation:
-
.claude/skills/chat-system/SKILL.md— New "Rooms & local scene development" section placed between "Message Bus Decorator Chain" and "Chat Command Pattern." Logical placement: the preceding section describes the LiveKit transport layer, and the new section explains when that transport must not be connected. All referenced symbols verified ondev:CommsContainer.Create— existsIConnectiveRoom.Null.INSTANCE— existsPrivateConversationUserStateService.InitializeAsync— existsFeatureId.LocalSceneDevelopment— exists
-
CLAUDE.md§11 Anti-Patterns — New bullet "Encoding a transient fetch failure as a permanent capability downgrade" appended at the end of the list. No duplication with existing bullets.SmartWearableCachereference verified ondev.
STEP 4 — Member audit
N/A — no public properties or accessors added/changed.
STEP 5 — Line-level review
No issues found. Both additions:
- Follow the established formatting conventions (bold pattern name, concrete example, prescriptive fix)
- Reference actual code entities that exist on
dev - Are non-duplicative — the PR body documents three candidate lessons that were correctly dropped to avoid restating existing guidance
- Frame principles durably ("gate the connection at the source", "evict the half-built cache entry") rather than coupling to specific implementation details
Security review
No security issues. Pure documentation changes — no secrets, credentials, executable code, or sensitive data.
STEP 6 — Complexity
SIMPLE — 2 markdown files, 7 additions, 0 deletions, documentation only.
STEP 7 — QA assessment
NO — changes are limited to .claude/skills/ and CLAUDE.md documentation. No runtime code is modified.
STEP 8 — Non-blocking warnings
None. Main.unity is not in the changeset.
STEP 9 — Verdict
REVIEW_RESULT: PASS ✅
COMPLEXITY: SIMPLE
COMPLEXITY_REASON: Documentation-only changes to two markdown guidance files, no runtime code touched.
QA_REQUIRED: NO
Reviewed by Jarvis 🤖 · Requested via Slack (auto-triggered by decentraland-bot)
Learnings from the week 2026-W34 bugsweep — decentraland/unity-explorer#9908 (merged). Distilled from human review comments and the code-review commits humans pushed on top of the bot's fixes. Opened for review like any other PR — please correct or reject anything that doesn't hold.
Lesson 1 — Local scene development must not connect the chat (DM) room
Landed in:
.claude/skills/chat-system/SKILL.md(new Rooms & local scene development section)In local scene development the Friends subsystem is disabled, so DMs delivered over the LiveKit chat room are unanswerable. The bot's fix (#9832) connected the room and then dropped inbound DMs downstream; the reviewer asked to fix it at the source instead.
The human rework reverted the bot's DM filter and passed
IConnectiveRoom.Null.INSTANCEfor the chat room inCommsContainer(mirroring the island-room gate), plus an early-return inPrivateConversationUserStateService(commitb0eabda0).Lesson 2 — A transient fetch failure is not a permanent capability downgrade
Landed in:
CLAUDE.md§11 (Anti-Patterns)The bot's fix (#9839) set
IsSmart = falsewhen a smart wearable'sscene.jsonwas missing. The reviewer asked to keep the DTO-declared flag and evict instead.The human rework (commit
83d28b0f) replaceditem.IsSmart = falsewithcache.Remove(id), keeping the wearable smart, logging with the id, and evicting the poisoned entry for retry.Considered and dropped
edad8bdd). A real, human-applied correction, but the bugsweep quality bar already states "named constants, never magic numbers" — re-stating it here would duplicate existing guidance; it was a one-off miss, not a gap.AnalyticsDiskFullDetected.cs). A single reviewer preference that was not applied (the file kept its name) and has no supporting convention in the EventBus folder — not a durable rule.CLAUDE.mdrules — no new guidance.Requested by Alejandro Jimenez via Slack.