fix(status-md): rename C6 System Health to avoid alert-table collision
Code review noted that the new section heading ## C6: System Health collided
with the existing alert-table row | C6 Chain map sync | for controller C6.
Two things named C6 confuses readers and brain-retro analysis scripts.
Heading is now ## System Health (no prefix). Section position unchanged.
Also tightens weak toContain('2')-style assertions in system-health.test.mjs
to pipe-delimited '| 2 |' form -- prevents false-passes if sort order breaks.
Follow-up to 7314a926.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+11
-11
@@ -1,6 +1,6 @@
|
||||
# Brain Status (auto-generated)
|
||||
|
||||
Last updated: 2026-05-28T07:19:07.640Z
|
||||
Last updated: 2026-05-28T07:28:29.669Z
|
||||
|
||||
| Контролёр | Состояние | Детали |
|
||||
|---|---|---|
|
||||
@@ -8,13 +8,13 @@ Last updated: 2026-05-28T07:19:07.640Z
|
||||
| C2 Cross-ref consistency | ✅ | [cross-ref-checker] OK — 0 drift in 4 files |
|
||||
| C3 Observer-of-observer | ✅ | [observer-of-observer] OK — last read 0 week(s) ago |
|
||||
| C4 Сигнальный статус | ✅ | This file (self-reference) |
|
||||
| C5 Observer-coverage | ⚠️ | 758 episode(s) this month · Stop-hook + post-commit OK · 20 missed activation(s) — see /brain-retro |
|
||||
| C5 Observer-coverage | ⚠️ | 759 episode(s) this month · Stop-hook + post-commit OK · 20 missed activation(s) — see /brain-retro |
|
||||
| C6 Chain map sync | ✅ | [chain-map-checker] OK — 16 chains in sync |
|
||||
|
||||
## Метрики (информационные, не алерты)
|
||||
|
||||
- Observer evidence: 758 episodes this month, 0 observer_error markers, 164 PII matches before filter
|
||||
- Legacy v1 episodes (not in factor analysis): 619
|
||||
- Observer evidence: 759 episodes this month, 0 observer_error markers, 165 PII matches before filter
|
||||
- Legacy v1 episodes (not in factor analysis): 620
|
||||
- Last /brain-retro: 0 day(s) ago
|
||||
- Использование узлов: см. `/brain-retro` (раз в спринт). missed_activations: 20. **Неиспользованные узлы — не алерт, если профильной задачи не было** (Pravila §16.4 v1.36; capability-readiness; см. memory `feedback_brain_unused_tools_not_problem` — outside-repo memory store).
|
||||
|
||||
@@ -31,9 +31,9 @@ Baseline дисциплины роутера (этап 2 router discipline overh
|
||||
| cleanup | 7 | 0.0% | 0.0% |
|
||||
| refactor | 1 | 0.0% | 0.0% |
|
||||
|
||||
Router step distribution: 1: 328, 2: 278, 3: 77, 5: 67
|
||||
Router step distribution: 1: 328, 2: 279, 3: 77, 5: 67
|
||||
|
||||
Boundaries applied (ADR / границы): 90 of 750 эпизодов (12.0%).
|
||||
Boundaries applied (ADR / границы): 90 of 751 эпизодов (12.0%).
|
||||
|
||||
## Активные многоэтапные проекты
|
||||
|
||||
@@ -51,10 +51,10 @@ Boundaries applied (ADR / границы): 90 of 750 эпизодов (12.0%).
|
||||
|
||||
| Компонент | Токены (in/out) | USD |
|
||||
|---|---|---|
|
||||
| Classifier (Sonnet 4.6) | 9430/88590 | $1.36 |
|
||||
| Classifier (Sonnet 4.6) | 9471/89293 | $1.37 |
|
||||
| Self-assessment (Sonnet 4.6) | 0/0 | $0.00 |
|
||||
| Reviewer (Opus 4.7 + fallback) | 0/0 | $0.00 |
|
||||
| **Итого** | | **$1.36** |
|
||||
| **Итого** | | **$1.37** |
|
||||
|
||||
## Аномалии классификатора
|
||||
|
||||
@@ -67,7 +67,7 @@ Episodes since last run: 0 / threshold: 10
|
||||
|
||||
## Reviewer: субагент vs fallback
|
||||
|
||||
0 эпизодов проверено из 758.
|
||||
0 эпизодов проверено из 759.
|
||||
|
||||
## Reviewer findings
|
||||
|
||||
@@ -109,7 +109,7 @@ Episodes since last run: 0 / threshold: 10
|
||||
|
||||
| Фраза | За всё время | За сегодня |
|
||||
|---|---|---|
|
||||
| `recovery` | 639 | 366 ⚠️ |
|
||||
| `recovery` | 700 | 427 ⚠️ |
|
||||
| `ремонт инфраструктуры` | 185 | 26 ⚠️ |
|
||||
| `без скилов` | 103 | 45 ⚠️ |
|
||||
| `срочно` | 93 | 11 ⚠️ |
|
||||
@@ -117,7 +117,7 @@ Episodes since last run: 0 / threshold: 10
|
||||
| `direct ok` | 6 | 0 |
|
||||
| `быстрый коммит` | 3 | 0 |
|
||||
|
||||
## C6: System Health
|
||||
## System Health
|
||||
|
||||
Долго работающих процессов нет (порог CPU > 1ч).
|
||||
|
||||
|
||||
@@ -17,21 +17,21 @@ describe('renderStatus — systemHealthBlock (brain-retro #9 candidate 5)', () =
|
||||
};
|
||||
|
||||
it('renders systemHealthBlock when provided as string', () => {
|
||||
const block = '## C6: System Health\n\nТоп-3 процессов с CPU > 1ч:\n\n| PID | Имя | CPU-время | Возраст |\n|---|---|---|---|\n| 6444 | python | 7.07ч | 13.6ч |\n\n⚠️ Проверь, не «осиротевшие» ли это процессы.\n';
|
||||
const block = '## System Health\n\nТоп-3 процессов с CPU > 1ч:\n\n| PID | Имя | CPU-время | Возраст |\n|---|---|---|---|\n| 6444 | python | 7.07ч | 13.6ч |\n\n⚠️ Проверь, не «осиротевшие» ли это процессы.\n';
|
||||
const md = renderStatus({ ...minInputs, systemHealthBlock: block });
|
||||
expect(md).toContain('## C6: System Health');
|
||||
expect(md).toContain('## System Health');
|
||||
expect(md).toContain('6444');
|
||||
expect(md).toContain('python');
|
||||
});
|
||||
|
||||
it('omits systemHealthBlock when absent (backward compat)', () => {
|
||||
const md = renderStatus(minInputs);
|
||||
// Should not contain C6 System Health section
|
||||
expect(md).not.toContain('## C6: System Health');
|
||||
// Should not contain System Health section
|
||||
expect(md).not.toContain('## System Health');
|
||||
});
|
||||
|
||||
it('renders "Долго работающих процессов нет" variant correctly', () => {
|
||||
const block = '## C6: System Health\n\nДолго работающих процессов нет (порог CPU > 1ч).\n';
|
||||
const block = '## System Health\n\nДолго работающих процессов нет (порог CPU > 1ч).\n';
|
||||
const md = renderStatus({ ...minInputs, systemHealthBlock: block });
|
||||
expect(md).toContain('Долго работающих процессов нет');
|
||||
});
|
||||
|
||||
@@ -47,12 +47,12 @@ export function computeSystemHealthBlock(procs) {
|
||||
.sort((a, b) => b.cpuSeconds - a.cpuSeconds)
|
||||
.slice(0, 3);
|
||||
if (heavy.length === 0) {
|
||||
return `## C6: System Health\n\nДолго работающих процессов нет (порог CPU > 1ч).\n`;
|
||||
return `## System Health\n\nДолго работающих процессов нет (порог CPU > 1ч).\n`;
|
||||
}
|
||||
const rows = heavy.map(p => {
|
||||
const hours = (p.cpuSeconds / 3600).toFixed(2);
|
||||
const ageHours = (p.ageMinutes / 60).toFixed(1);
|
||||
return `| ${p.pid} | ${p.name} | ${hours}ч | ${ageHours}ч |`;
|
||||
}).join('\n');
|
||||
return `## C6: System Health\n\nТоп-3 процессов с CPU > 1ч:\n\n| PID | Имя | CPU-время | Возраст |\n|---|---|---|---|\n${rows}\n\n⚠️ Проверь, не «осиротевшие» ли это процессы от завершённых Claude-сессий.\n`;
|
||||
return `## System Health\n\nТоп-3 процессов с CPU > 1ч:\n\n| PID | Имя | CPU-время | Возраст |\n|---|---|---|---|\n${rows}\n\n⚠️ Проверь, не «осиротевшие» ли это процессы от завершённых Claude-сессий.\n`;
|
||||
}
|
||||
|
||||
@@ -74,9 +74,9 @@ describe('computeSystemHealthBlock', () => {
|
||||
];
|
||||
const block = computeSystemHealthBlock(procs);
|
||||
// Should contain top 3 by CPU: b(8000), d(6000), c(5000)
|
||||
expect(block).toContain('2'); // pid 2 = b
|
||||
expect(block).toContain('4'); // pid 4 = d
|
||||
expect(block).toContain('3'); // pid 3 = c
|
||||
expect(block).toContain('| 2 |'); // pid 2 = b
|
||||
expect(block).toContain('| 4 |'); // pid 4 = d
|
||||
expect(block).toContain('| 3 |'); // pid 3 = c
|
||||
// pid 1 (lowest CPU among heavy) should be excluded
|
||||
expect(block).not.toContain('| 1 |');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user