Диагностика и ремедиация: система, ненавидящая ошибки
Карта проблем через FPF-линзы
| Проблема в системе |
FPF-диагноз (паттерн) |
Что сломано |
| Наблюдение об ошибке = признание вины |
F.10 Status Families (evidence/standard/requirement смешаны) |
Evidence принудительно приравнивается к Requirement. Наблюдение становится обвинением. |
| Нет цикла улучшения, только наказание |
B.4 Canonical Evolution Loop (Observe→Orient→Decide→Act) |
Фаза Observe подавлена. Без наблюдений нет эволюции, только деградация. |
| Ошибка в ран-тайме блокирует обновление модели |
A.4 Temporal Duality (design-time ↔ run-time) |
Design-time и run-time слиты. Ошибка не возвращается в дизайн, а идёт в карательный контур. |
| «Система наказывает» — но кто именно? |
A.2.8 U.Commitment (антипаттерн Episteme-as-subject) |
Accountability размыта: субъектом назначается «система/процесс/спецификация», а не конкретная роль. |
| Правила мутируют между уровнями |
A.2.6 Scope (claim scope / work scope) |
Scope не определён явно. Blame работает глобально, без привязки к контексту. |
| Сложные ситуации сводятся к одному KPI |
G.12 Dashboards (антипаттерн scalarization) |
Ординальные/категориальные состояния превращаются в скалярные «оценки». |
| Люди производят «удобные» отчёты |
A.10 Evidence Graph (антипаттерн self-justifying loops) |
Holon пытается evidence-ить сам себя. Циклическая провенанс, unverifiable conclusions. |
| Выгорание, отторжение системы |
E.12 Human Factors Loop (HF-Loop) |
Framework стал слишком тяжёлым. HF-Loop требует упрощения до того, как пользователи отбросят его. |
Приоритетные ходы (repairs)
Ход 1. Разделить семейства статусов (F.10)
Что сделать: явно разделить три ортогональных семейства:
- Evidence — что наблюдали (факты, данные, инциденты)
- Standard — что считается нормой (модели, спецификации)
- Requirement — что должно быть выполнено (обязательства)
Конкретно: создать реестр, где каждый инцидент классифицируется как evidence, а не как violation. Evidence не может автоматически становиться requirement без явного решения.
Артефакт: StatusFamilyMapping@Context — таблица, где для каждого типа утверждения указано, к какому семейству оно относится.
Ход 2. Восстановить Observe-фазу (B.4)
Что сделать: легализовать наблюдения как вход в эволюционный цикл, а не как повод для наказания.
Конкретно:
- Создать канал, по которому observations об ошибках возвращаются в design-time
- Разделить «observation of failure» и «attribution of blame» — это разные акты
- Ввести роль Observer, чья задача — собирать наблюдения без оценки
Артефакт: EvolutionLoop@Context с явной Observe-фазой, где observations цитируются по PathId/PathSliceId (G.11).
Ход 3. Разделить design-time и run-time (A.4)
Что сделать: ошибка в run-time — это сигнал к обновлению модели в design-time, а не к наказанию.
Конкретно:
- Ввести явный
Γ_time window для каждой модели (A.2.6)
- Когда модель устарела (вышла за window), обновление — это норма, а не признание ошибки
- Разделить
WorkScope (где capability валидна) и ClaimScope (где claim holds)
Артефакт: QualificationWindow для каждой модели с явными условиями валидности.
Ход 4. Назначить явный accountable subject (A.2.8)
Что сделать: убрать антипаттерн «система наказывает». Наказать может только роль, а не процесс.
Конкретно:
- Для каждого обязательства (
U.Commitment) явно указать subject — конкретную роль или role-enactor
- Запретить использовать «спецификацию/интерфейс/систему» как subject (CC-A.2.8-1)
- Разделить
modality (MUST/SHOULD/MAY) и adjudication (evidence hooks)
Артефакт: CommitmentRegistry@Context с полями: subject, modality, scope, validityWindow, referents, adjudication.
Ход 5. Ограничить scope blame (A.2.6)
Что сделать: blame работает только внутри явно объявленного scope, а не глобально.
Конкретно:
- Для каждого правила/стандарта явно указать
ClaimScope (G) — где оно применимо
- Запретить «global» language, когда actual scope thin (A.2.6:7)
- Использовать Bridges для cross-context talk (A.2.1)
Артефакт: ScopeDeclaration@Context с явными predicates (conditions, parameter ranges, cohorts, Γ_time windows).
Ход 6. Запретить scalarization (G.12)
Что сделать: сложные состояния не сводятся к одному числу.
Конкретно:
- Запретить «average maturity level», «composite score» без явного justification
- Использовать
ModularityVectorLite или аналогичные векторные представления (C.31)
- Dashboard slice surface — view-only, no hidden re-aggregation (G.12)
Артефакт: DashboardSlice@Context с явными telemetry pins для slice-scoped refresh.
Ход 7. Разорвать self-justifying loops (A.10)
Что сделать: holon не может evidence-ить сам себя.
Конкретно:
- Каждый evidence claim должен иметь внешний carrier (файл, датасет, lab notebook)
- Запретить cyclic provenance
- Использовать
EvidenceGraph с явными PathId/PathSliceId
Артефакт: EvidenceGraph@Context с трассируемыми путями от observations до claims.
Ход 8. Запустить HF-Loop (E.12)
Что сделать: если система стала слишком тяжёлой, упростить до того, как пользователи выгорят.
Конкретно:
- Измерить cognitive load (количество контролов, ритуалов, отчётности)
- Выявить антипаттерны: Glorifying Complexity, Ivory Tower, Symptom patching
- Упростить framework до cognitive elegance (P-1)
Артефакт: HF-Assessment@Context с картой когнитивной нагрузки и точками выгорания.
Что чинить первым?
Минимальный viable repair:
- F.10 — разделить evidence/standard/requirement (снимает давление «наблюдение = вина»)
- B.4 — восстановить Observe-фазу (запускает эволюцию)
- A.2.8 — назначить accountable subject (убирает размытую ответственность)
Эти три хода не требуют полной перестройки системы, но меняют базовую динамику: ошибки становятся источником обучения, а не поводом для наказания.
Хотите, чтобы я детализировал какой-то конкретный ход — например, построил CommitmentRegistry или StatusFamilyMapping для вашего контекста?