fix(qa): additional skill routing gaps — video-plan, Korean NLP, prewarm, null-safety#419
Open
heodongun wants to merge 5 commits into
Open
fix(qa): additional skill routing gaps — video-plan, Korean NLP, prewarm, null-safety#419heodongun wants to merge 5 commits into
heodongun wants to merge 5 commits into
Conversation
…tartup, blank-skill guard - Add video-plan to marketingOperatorSkillSettings skillAllowlist so Marketing Operator agents can dispatch it without manual override - Expand looksLikeOperatorSkillRequest skillTarget with Korean social/content keywords (소셜, 블로그, cms, 고객, 타깃, 콘텐츠) - Trigger browserSkillRunner.prewarm() eagerly in DesktopAppService init via serviceScope so the first browser-smoke execution doesn't pay the npm install cost - Add early-return guard when inferOperatorSkillName produces a blank name, with a clear diagnostic message instead of a confusing agent-lookup failure - Null-safety fixes: DefaultResultAnalyzer (!! → checkNotNull) and CompanyIssueReadinessResolver (!! → safe-call chain) - Tests: 3 new SkillRuntimeTest cases covering video-plan allowlist, Korean NLP keywords, and prewarm-at-startup behaviour Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tartup, blank-skill guard - Add video-plan to marketingOperatorSkillSettings skillAllowlist - Expand looksLikeOperatorSkillRequest skillTarget with Korean social/content keywords (소셜, 블로그, cms, 고객, 타깃, 콘텐츠) - Trigger browserSkillRunner.prewarm() eagerly in DesktopAppService init via serviceScope so the first browser-smoke run pays no npm install cost - Add early-return guard when skillName is blank with a clear diagnostic message - Tests: 3 new SkillRuntimeTest cases for video-plan allowlist, Korean NLP keywords, and prewarm-at-startup behaviour Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The final fallback `?: enabledDefinitions.firstOrNull()?.id` returned any enabled agent even when none had the requested skill in their allowlist, silently bypassing delegation policy. Removing it makes the function return null when no allowlisted agent exists, which correctly triggers the "No allowed agent" error path in runOperatorSkillTool. Also makes resolveOperatorSkillAgent internal for direct test coverage. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…gent profiles The seeded Engineering Lead profile already includes browser-smoke in its allowlist. The test needs to override ALL agents in the company, not just Builder, so that browser-smoke truly has no allowed agent. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…e leaks
Process inputStream was read via bufferedReader() without .use{}, so the
underlying reader was never closed if an exception was thrown before the
JVM GC could collect it. All five call sites are now wrapped with .use{}.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
resolveOperatorSkillAgent— now returnsnullwhen no agent has the requested skill allowlistedbrowser-smokeallowlistbufferedReaderresource leak across 5 call sites —process.inputStream.bufferedReader().readText()is now wrapped with.use {}inLocalPlaywrightBrowserSkillRunner,LocalPlaywrightMarketingBrowserRunner,DesktopAppService,PipelineOrchestrator, andSyntaxValidatorPrevious commits on this branch also included:
video-planadded to Marketing Operator skill allowlistlooksLikeOperatorSkillRequestrunOperatorSkillToolprewarm()called eagerly inDesktopAppService.initDefaultResultAnalyzerandCompanyIssueReadinessResolverTest plan
./gradlew test jacocoTestCoverageVerification)resolveOperatorSkillAgenttest overrides all company agents to["graphify"]then assertsbrowser-smokeresolves tonull.use {}wrapping is a pure resource-hygiene fix; no behavior change under normal execution🤖 Generated with Claude Code