feat: complete academic symbol lexicon heal, 2-column Cooper extraction, and updated assets

This commit is contained in:
2026-10-09 15:26:58 +05:00
parent 7f91366201
commit 0b12e4583b
244 changed files with 611461 additions and 1617 deletions
+148
View File
@@ -0,0 +1,148 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:words999/models/syncretic_session_model.dart';
import 'package:words999/services/words_repository.dart';
import 'package:words999/services/traditions_repository.dart';
import 'package:words999/services/oracle_master_prompt_generator.dart';
void main() {
setUpAll(() async {
TestWidgetsFlutterBinding.ensureInitialized();
await WordsRepository().init();
await TraditionsRepository().init();
});
test('SyncreticSession accumulates multiple diverse readings and generates Meta-Prompt', () {
final repo = WordsRepository();
final r1 = SyncreticReading(
id: 'test_r1',
systemId: 'cleromancy',
systemName: 'Оракул 999 (Клеромантия)',
systemIcon: '🎲',
timestamp: DateTime.now(),
layoutTitle: '2 знака',
inputMethod: 'dice',
items: [
ReadingSignItem(
title: '#142 ВОЛЯ',
subtitle: 'Существительное',
symbol: '🎲',
lore: 'Импульс намерения',
linkedWord: repo.allWords[0],
),
],
question: 'Как реализовать проект?',
);
final r2 = SyncreticReading(
id: 'test_r2',
systemId: 'runes',
systemName: 'Руны Старшего Футарка (24)',
systemIcon: 'ᚱ',
timestamp: DateTime.now(),
layoutTitle: 'Бросок 2×d12',
inputMethod: 'dice',
items: [
ReadingSignItem(
title: 'Феху (Fehu)',
subtitle: 'Этт Фрейи',
symbol: 'ᚠ',
lore: 'Скот, богатство, первичный огонь творения.',
isReversed: false,
linkedWord: repo.allWords[1],
),
],
question: 'Как реализовать проект?',
);
final r3 = SyncreticReading(
id: 'test_r3',
systemId: 'lenormand',
systemName: 'Малый Оракул Ленорман',
systemIcon: '🪶',
timestamp: DateTime.now(),
layoutTitle: 'd6+d12: Карта #24',
inputMethod: 'dice',
items: [
ReadingSignItem(
title: 'Карта 24 «Сердце»',
subtitle: 'Любовь, искренность, страсть',
symbol: '#24',
lore: 'Сердце указывает на чистую эмоциональную вовлечённость.',
linkedWord: repo.allWords[2],
),
],
question: 'Как реализовать проект?',
);
final session = SyncreticSession(
id: 'syn_test_day',
date: DateTime.now(),
mainQuestion: 'Как реализовать проект?',
readings: [r1, r2, r3],
);
expect(session.readings.length, 3);
final metaPrompt = OracleMasterPromptGenerator.generateCrossSystemComparison(session);
expect(metaPrompt.isNotEmpty, true);
expect(metaPrompt.contains('ВЕЛИКИЙ МЕТА-МАСТЕР-ПРОМПТ'), true);
expect(metaPrompt.contains('Как реализовать проект?'), true);
expect(metaPrompt.contains('ОРАКУЛ 999'), true);
expect(metaPrompt.contains('РУНЫ СТАРШЕГО ФУТАРКА'), true);
expect(metaPrompt.contains('МАЛЫЙ ОРАКУЛ ЛЕНОРМАН'), true);
expect(metaPrompt.contains('ТОЧКА КОНВЕРГЕНЦИИ'), true);
expect(metaPrompt.contains('ТОЧКИ ДИВЕРГЕНЦИИ И ПОЛЯРНОСТИ'), true);
});
test('Matrix chains reading can be recorded and serialized in SyncreticSession', () {
final repo = WordsRepository();
final chainReading = SyncreticReading(
id: 'chains_session_99',
systemId: 'matrix_chains',
systemName: 'Матрица 33×30: Цепочки Домов',
systemIcon: '🔗',
timestamp: DateTime.now(),
layoutTitle: '1 цепочка',
inputMethod: 'dice',
items: [
ReadingSignItem(
title: 'Цепочка #1: Петля Судьбы',
subtitle: 'Старт: Дом #1 «ОГОНЬ» • Шагов: 3',
symbol: '🔄',
lore: 'Траектория: «ВОДА» ➔ «ЗЕМЛЯ» ➔ «ОГОНЬ»\nЗамкнутая петля судьбы.',
linkedWord: repo.allWords[0],
meta: {
'chainIndex': 1,
'endType': 'loop',
'stepsCount': 3,
'path': '«ВОДА» ➔ «ЗЕМЛЯ» ➔ «ОГОНЬ»',
},
),
],
question: 'Вектор развития',
);
final session = SyncreticSession(
id: 'syn_matrix_chains_test',
date: DateTime.now(),
mainQuestion: 'Вектор развития',
readings: [chainReading],
);
final jsonStr = session.toJson();
final restored = SyncreticSession.fromJson(jsonStr);
expect(restored.readings.length, 1);
expect(restored.readings.first.systemId, 'matrix_chains');
expect(restored.readings.first.items.first.title, 'Цепочка #1: Петля Судьбы');
expect(restored.readings.first.items.first.symbol, '🔄');
expect(restored.readings.first.items.first.meta?['endType'], 'loop');
final metaPrompt = OracleMasterPromptGenerator.generateCrossSystemComparison(restored);
expect(metaPrompt.contains('МАТРИЦА 33×30: ЦЕПОЧКИ ДОМОВ'), true);
expect(metaPrompt.contains('ЦЕПОЧКА #1: ПЕТЛЯ СУДЬБЫ'), true);
});
}