Модуль ритуала начала задачи — помогает студентам преодолеть прокрастинацию через правила «если-то»
Project description
White-sheet-breaker
CLI-инструмент для преодоления прокрастинации через правила «если-то».
Превращение размытого намерения в конкретное правило «ЕСЛИ [сигнал] → ТО [действие]» и немедленное выполнение микро-шага снижает психологическое сопротивление.
О проекте
White-sheet-breaker помогает преодолеть барьер начала работы. Вместо того чтобы писать код за пользователя (как Copilot), модуль помогает сделать первый шаг: сформулировать правило, создать файл с шаблоном и мягко подтолкнуть к действию, если пользователь завис.
Возможности
- Формулировка правил «если-то» через интерактивный диалог
- Библиотека готовых шаблонов правил с редактором
- Создание и открытие файлов с автоопределением шаблона по расширению
- Встроенный Pomodoro-таймер с кроссплатформенным звуком
- Фоновое наблюдение за активностью пользователя
- Адаптивные меню помощи при бездействии (2 уровня)
- Параллельная работа таймера и наблюдения
- Логирование в NDJSON и отправка xAPI-стейтментов в LRS
- Статистика выполненных ритуалов
Быстрый старт
Требования
- Python 3.10+
- pip
Установка
Из PyPI (рекомендуется):
pip install white-sheet-breaker
Из исходного кода:
# Клонировать репозиторий
git clone https://github.com/waqque/white-list-breaker.git
cd white-list-breaker
# Создать виртуальное окружение
python3 -m venv venv
# Активировать
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windows
# Установить зависимости
pip install -e .
Запуск
# Интерактивный режим
python -m breaker
# Демо-режим (без ввода)
python -m breaker --demo
# Без Pomodoro-таймера
python -m breaker --no-timer
Сценарии работы
Сценарий 1: С Pomodoro-таймером
- Пользователь создаёт правило: «ЕСЛИ файл пуст → ТО напишу класс → classes.py»
- Создаётся файл
classes.pyс python-шаблоном - Параллельно запускаются:
- Pomodoro-таймер (обратный отсчёт)
- Фоновое наблюдение (отслеживание файла)
- При бездействии 1 минута — меню уровня 1, через 3 минуты — уровень 2
- При активности >100 символов — «Работа началась» и модуль останавливается
- После завершения таймера — наблюдение не останавливается
- Логирование в NDJSON + отправка xAPI-стейтмента
Сценарий 2: Без таймера
- Пользователь создаёт правило
- Создаётся файл
- Запускается только фоновое наблюдение
- Наблюдение работает до:
- Активности пользователя (>100 символов) → успех
- Таймаута (5 минут) → завершение
- Логирование + xAPI
Пример использования
$ python -m breaker
[1] Создать правило с нуля
Сигнал: файл пуст
Действие: напишу класс
Режим: Создать файл
Файл: classes.py
ЕСЛИ: файл пуст
ТО: напишу класс
ЦЕЛЬ: classes.py
Подтверждаете? [y/n]: y
Файл создан: classes.py
Запускаю фоновое наблюдение...
Запустить Pomodoro-таймер? [y/n]: y
Сколько минут? (5): 25
Осталось: 00:32 ━━━━╸━━━ 47% ← таймер идёт
[1] Шаблон функции ← меню помощи появилось
[2] Шаблон класса ← пользователь выбрал
...
Осталось: 00:26 ━━━━━╸━━ 57% ← таймер продолжает идти!
Шаблон 'class' добавлен в конец файла
Осталось: 00:16 ━━━━━━╺━━ 73%
Отлично! Работа началась.
Тестирование
# Все тесты
make test
# С покрытием
python -m pytest tests/ --cov=breaker --cov-report=term-missing -v
# Отдельные группы
make test-core # schema, tracker, xapi
make test-engine # executor, templates
make test-ui # dialog, timer, help_menu, activity_monitor
Статистика
| Метрика | Значение |
|---|---|
| Всего тестов | 315 |
| Покрытие кода | ~88% |
| Платформы | Windows, macOS, Linux, WSL |
Команды Makefile
| Команда | Назначение |
|---|---|
make install |
Установка зависимостей |
make install-dev |
Установка + dev-инструменты |
make test |
Запуск всех тестов |
make run-cli |
Запуск CLI в mock-режиме |
make demo |
Демо-режим без ввода |
make lint |
Проверка стиля (flake8) |
make format |
Форматирование (black) |
make logs |
Последние 50 строк лога |
make clean |
Очистка артефактов |
Конфигурация
Переменные окружения (в .env или экспортом):
# LRS (Learning Record Store)
LRS_URL=http://localhost:8080/xAPI
LRS_KEY=your_key
LRS_SECRET=your_secret
LRS_MODE=mock # или "real"
# Идентификация учащегося
LEARNER_ID=student123
LEARNER_NAME=Иван Иванов
COURSE_ID=course-python-101
Структура проекта
white-list-breaker/
├── src/breaker/
│ ├── core/ # Модели данных, логирование, xAPI
│ ├── engine/ # Исполнение действий, шаблоны
│ ├── storage/ # Хранилище шаблонов правил
│ ├── ui/ # Интерфейс, таймер, наблюдение
│ └── main.py # Оркестратор
├── tests/ # 315 теста
├── docs/ # Документация
├── logs/ # NDJSON-логи
└── Makefile
Команда
| Участник | Зона | Модули |
|---|---|---|
| А | Core | schema.py, tracker.py, xapi_client.py |
| Б | Engine + Storage | executor.py, file_templates.py, templates.py |
| В | UI | dialog.py, timer.py, activity_monitor.py, help_menu.py, template_editor.py |
Документация
- PyPI: https://pypi.org/project/white-sheet-breaker/
- Репозиторий: https://github.com/waqque/white-list-breaker
Подробная документация находится в директории docs/:
- DOMAIN.md — предметная область и психологическая основа
- SPECIFICATION.md — функциональные и нефункциональные требования
- ARCHITECTURE.md — архитектура системы и структура проекта
- IMPLEMENTATION.md — описание реализованной системы
Зависимости
Runtime
rich>=13.0.0
requests>=2.31.0
Development
pytest>=7.4.0
pytest-cov>=4.1.0
flake8>=6.1.0
black>=23.7.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file white_sheet_breaker-0.1.2.tar.gz.
File metadata
- Download URL: white_sheet_breaker-0.1.2.tar.gz
- Upload date:
- Size: 60.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd7200690125e97ae6910489490c550ca720f4d35e56a12079509377f65783e9
|
|
| MD5 |
1e4c4adb294d617898f67f97ef287b10
|
|
| BLAKE2b-256 |
95883b0aaade295ddf83bbe17fa7acdb22e9858b5b368ba56b0a6558449b8fc2
|
File details
Details for the file white_sheet_breaker-0.1.2-py3-none-any.whl.
File metadata
- Download URL: white_sheet_breaker-0.1.2-py3-none-any.whl
- Upload date:
- Size: 43.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dbd4ae70a6e897a9cde2a327f1ef7fa2caa2f95da31ae3640930d6233ce37867
|
|
| MD5 |
971baac4f509f03361ba518251ef3f29
|
|
| BLAKE2b-256 |
6041abea4480ad8aa96b04dded96ca4bbae08ba116f730634ee97008e504224c
|