feat(observer): extend classifyTask with 7 new classes

Closes brain-retro 2026-05-20 #1 — analysis/memory-sync/regulatory-bump/
release/cleanup/monitoring/planning. Addresses '59% other' observation
from initial retro factor matrix.

Ordering: release before feature (merge feature-branch), planning before
refactor (план рефакторинга), memory-sync/regulatory-bump at top as most
specific. monitoring regex проверь состоян covers inflected forms.

9 new vitest tests, 241/241 GREEN in npm run test:tools.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-05-20 12:33:35 +03:00
parent abdeab50ff
commit d7d065019a
2 changed files with 50 additions and 0 deletions
+43
View File
@@ -7,6 +7,7 @@ import {
extractProcessEvents,
parseRoutingTag,
extractLastUserPromptText,
classifyTask,
} from './observer-transcript-parser.mjs';
// Build a JSONL transcript string from entry objects.
@@ -877,3 +878,45 @@ describe('extractEnvironment — parallel_session narrowed to tool_result eviden
expect(env.parallel_session).toBe(true);
});
});
describe('classifyTask — extended dictionary (Task 1)', () => {
it('classifies analysis prompts', () => {
expect(classifyTask('проанализируй данные наблюдателя')).toBe('analysis');
expect(classifyTask('review the recent changes')).toBe('analysis');
expect(classifyTask('посмотри что в логах')).toBe('analysis');
});
it('classifies memory-sync prompts', () => {
expect(classifyTask('обнови эталон проекта')).toBe('memory-sync');
expect(classifyTask('sync memory с последним push')).toBe('memory-sync');
expect(classifyTask('обнови MEMORY.md')).toBe('memory-sync');
});
it('classifies regulatory-bump prompts', () => {
expect(classifyTask('обнови CLAUDE.md после правки')).toBe('regulatory-bump');
expect(classifyTask('правка Pravila §16')).toBe('regulatory-bump');
expect(classifyTask('обнови PSR_v1 v3.18')).toBe('regulatory-bump');
});
it('classifies release prompts', () => {
expect(classifyTask('push origin main')).toBe('release');
expect(classifyTask('merge feature-branch')).toBe('release');
expect(classifyTask('сделай release v2')).toBe('release');
});
it('classifies cleanup prompts', () => {
expect(classifyTask('убери временные файлы')).toBe('cleanup');
expect(classifyTask('cleanup тулчейн')).toBe('cleanup');
});
it('classifies monitoring prompts', () => {
expect(classifyTask('проверь состояние портала')).toBe('monitoring');
expect(classifyTask('status of CI')).toBe('monitoring');
});
it('classifies planning prompts', () => {
expect(classifyTask('план рефакторинга биллинга')).toBe('planning');
expect(classifyTask('design новую фичу')).toBe('planning');
expect(classifyTask('обсудим архитектуру')).toBe('planning');
});
it('preserves existing classes — refactor stays refactor', () => {
expect(classifyTask('рефактор биллинг-сервиса')).toBe('refactor');
});
it('preserves existing classes — bugfix stays bugfix', () => {
expect(classifyTask('почини баг в logger')).toBe('bugfix');
});
});