AI Prompts Log¶
Лог всех обращений к ИИ в рамках проекта.
Дата: 01.05.2026 Задача: Подготовка к началу работы над проектом — этап 0
Prompt / темы обращений: Одна сессия, охватывала четыре темы: 1. Формирование детального плана работы для Участника 3 относительно других участников — порядок этапов, зависимости, что можно делать параллельно. 2. Обсуждение настройки защиты ветки main — причины отсутствия прав, к кому обращаться, что просить. 3. Согласование структуры и содержания начальной документации — какие файлы создавать, что в них писать на данном этапе. 4. Обсуждение целесообразности написания примеров .x и docs/syntax.md без согласованного синтаксиса.
Ответ ИИ / краткое содержание: - Составлен поэтапный план работы Участника 3 с таблицей зависимостей от других участников. - Выяснено что защиту ветки может настроить только Admin репозитория, нужно обращаться к преподавателю или владельцу организации MAILabs-Edu-2026. - Определена структура docs/ и шаблоны файлов для текущего этапа. - Принято решение не писать примеры и docs/syntax.md до согласования синтаксиса командой.
Что принято: - Поэтапный план работы Участника 3. - Структура docs/ и содержание файлов 00-policy.md, 01-prompts-log.md, 02-team-decisions.md, architecture.md, standard-library.md. - Решение создать examples/ с пустыми файлами-заглушками. - Решение создать docs/syntax.md с одной строкой-плейсхолдером.
Что изменено человеком: - Скорректирован список и содержание создаваемых файлов — убраны конкретные примеры кода из .x файлов и подробное содержание docs/syntax.md как преждевременные без согласованного синтаксиса.
Связанные файлы: - docs/ai-usage/00-policy.md - docs/ai-usage/01-prompts-log.md - docs/ai-usage/02-team-decisions.md - docs/architecture.md - docs/standard-library.md - docs/syntax.md - examples/*.x (пустые заглушки)
Связанный PR: #2
Дата: 02.05.2026 Задача: Реализация Builtins.fs и покрытие тестами
Prompt / темы обращений: Одна сессия, охватывала две темы: 1. Проверка полноты тестов для Builtins.fs — обсуждение граничных случаев, получение дополнительных тестов для eq с несовпадающими типами и WrongArgumentCount для одного аргумента. Итог: тесты признаны полными. 2. Фундаментальное объяснение того что происходит с точки зрения реализации языка — что такое AST, Values, Environment, Evaluator, Builtins, как они связаны между собой, какое отношение имеют к F# и функциональному программированию в целом.
Ответ ИИ / краткое содержание:
- Добавлены два теста: builtin eq rejects mismatched types и
builtin add rejects single arg.
- Дано объяснение архитектуры интерпретатора: AST как discriminated union,
иммутабельный Environment, eval как структурная рекурсия, Builtins как
начальное окружение, Result как функциональный подход к ошибкам,
функции высшего порядка в arithmeticOp.
Что принято: - Оба дополнительных теста добавлены в BuiltinTests.fs. - Понимание архитектуры использовано при написании Builtins.fs.
Что изменено человеком: - Исправлен синтаксис Builtins.fs — убран result {} computation expression которого нет в стандартном F#, заменён на явный pattern matching.
Связанные файлы: - src/Language/Builtins.fs - tests/Language.Tests/BuiltinTests.fs
Связанный PR: #15
Дата: 02.05.2026 Задача: Рефакторинг Builtins.fs для поддержки вызова VClosure
Prompt / темы обращений: Одна сессия, одна тема: Обсуждение архитектурного решения как передать eval в Builtins.fs чтобы map/filter/fold могли вызывать VClosure. Два варианта — makeBuiltins с eval как параметром или перенос функций в Evaluator.fs.
Ответ ИИ / краткое содержание: - Описаны два варианта решения с плюсами и минусами каждого. - Детальный план реализации Варианта А — makeBuiltins. - Написан обновлённый Builtins.fs и изменения в BuiltinTests.fs.
Что принято: - Вариант А — makeBuiltins принимает eval как параметр. - Структура applyFunc внутри makeBuiltins. - Инициализация builtins в тестах через одну строку в начале модуля.
Что изменено человеком: - Решение о выборе варианта принималось совместно командой.
Связанные файлы: - src/Language/Builtins.fs - tests/Language.Tests/BuiltinTests.fs
Связанный PR: #22
Дата: 03.05.2026
Задача: Реализация списков и функций высшего порядка (list, map, filter, fold)
Prompt / темы обращений:
Одна сессия, охватывала две темы:
1. Уточнение терминологии — различие между функтором и функцией map,
корректная интерпретация VList как функтора, а map, filter, fold
как функций высшего порядка.
2. Проверка и обсуждение реализации встроенных функций:
- list, head, tail, cons, empty?
- map, filter, fold
включая интеграцию с текущей архитектурой evaluator.
Ответ ИИ / краткое содержание:
- Дано корректное объяснение терминологии:
- VList — функтор (структура данных),
- map — операция над функтором,
- filter и fold — функции высшего порядка, не связанные с понятием функтора.
- Обсуждены подходы к реализации функций списков и их поведения:
- создание списков и базовые операции (list, head, tail, cons, empty?)
- применение функций к спискам (map, filter, fold)
Что принято:
- Подход к реализации всех функций списков.
- Реализация map/filter/fold через универсальный механизм применения
функций (applyFunc), поддерживающий как VBuiltin, так и VClosure.
Что изменено человеком:
- Расширено покрытие тестами — добавлены дополнительные
граничные случаи и проверки ошибок.
- Частично переработана структура тестов для лучшей читаемости и полноты покрытия.
- Реализация адаптирована под текущую структуру проекта
и уже существующие паттерны в Builtins.fs.
- Совместно с командой принято архитектурное решение
по использованию valueTypeName для единообразного формирования
сообщений об ошибках типов.
Связанные файлы: - src/Language/Builtins.fs - tests/Language.Tests/BuiltinTests.fs - docs/ai-usage/01-log-participant-3.md
Связанный PR: #28
Дата: 03.05.2026
Задача: Проработка и реализация Maybe (just, nothing, fmap, bind)
Prompt / темы обращений:
Одна сессия, одна тема:
Обсуждение теоретической модели Maybe
и её реализации в рамках текущего интерпретатора:
- семантика Maybe как контейнера значения (Some / None);
- различие между fmap и bind;
- требования к типам возвращаемых значений;
- интеграция с существующей системой Value и applyFunc.
Ответ ИИ / краткое содержание:
- Дано объяснение Maybe как обёртки над значением
с возможным отсутствием (VMaybe).
- Разобраны функции:
- just — оборачивание значения в Some
- nothing — представление отсутствия значения
- fmap — применение функции внутри контекста Maybe
- bind — последовательное вычисление
с функцией, возвращающей Maybe
- Показано различие между fmap (чистое отображение)
и bind (плоское связывание).
- Предложен вариант реализации через applyFunc
для поддержки как VBuiltin, так и VClosure.
Что принято:
- Представление Maybe через VMaybe (Some / None).
- Подход к реализации fmap и bind через applyFunc.
- Контракт:
- fmap возвращает Maybe
- bind ожидает функцию, возвращающую Maybe
Что изменено человеком: - Самостоятельно написаны тесты, включая граничные случаи и проверки ошибок. - Реализация адаптирована под текущую архитектуру проекта и существующие паттерны обработки ошибок.
Связанные файлы: - src/Language/Builtins.fs - tests/Language.Tests/BuiltinTests.fs
Связанный PR: #39
Дата: 03.05.2026 Задача: Документация delay/force, пример lazy.x
Prompt / темы обращений: Одна сессия, три темы: 1. Оценка полноты тестов для delay/force. 2. Обсуждение содержания документации для delay/force — что включить в standard-library.md, примеры мемоизации и лексического окружения. 3. Написание примера lazy.x.
Ответ ИИ / краткое содержание: - Тесты признаны полными — дополнительных замечаний нет. - Написан полный обновлённый docs/standard-library.md с примерами для всех секций и секцией Ленивость. - Написан пример lazy.x.
Что принято: - Структура и содержание docs/standard-library.md. - Примеры lazy.x.
Что изменено человеком: - Оценка и дополнение содержания новой документации.
Связанные файлы: - docs/standard-library.md - examples/lazy.x
Связанный PR: #41
Дата: 03.05.2026
Задача: Реализация и тестирование примеров программ (.x) и интеграционных тестов
Prompt / темы обращений:
Одна сессия, охватывала три темы:
1. Проверка полноты парсера относительно всех примеров (.x файлов)
— подтверждение покрытия всех конструкций языка
(let/letrec/lambda/if/application/higher-order functions).
2. Проектирование и корректировка ExampleTests.fs для полного
end-to-end тестирования через pipeline Parser → Evaluator → Builtins.
3. Диагностика падений тестов при корректной логике программы
— выявление проблем с форматированием входных данных (CRLF/LF).
Ответ ИИ / краткое содержание: - Подтверждено, что Parser полностью покрывает все используемые конструкции языка. - Предложен и уточнён шаблон ExampleTests.fs для запуска всех .x файлов через единый runner. - Даны корректные ожидаемые результаты для всех примеров (factorial, fibonacci, closure, list ops, map/filter/fold, maybe, lazy). - Предложен упрощённый вариант filter.x для повышения надёжности тестов. - Объяснено, что часть падений вызвана различием CRLF/LF, влияющим на чтение входных файлов.
Что принято: - Корректировка ожидаемых результатов в ExampleTests.fs. - Выбор стабильной реализации filter.x через оператор сравнения. - Решение учитывать различия CRLF/LF в CI среде.
Что изменено человеком: - Самостоятельно реализованы примеры .x файлов на основе спецификации языка. - Обновлены и расширены ExampleTests.fs для полного покрытия всех примеров.
Связанные файлы: - examples/*.x - tests/Language.Tests/ExampleTests.fs - src/Language/Parser.fs - src/Language/Evaluator.fs - src/Language/Builtins.fs
Связанный PR: #45
Дата: 04.05.2026 Задача: Новые примеры для синтаксического сахара и ленивости
Prompt / темы обращений: Одна сессия, три темы: 1. Обсуждение новых фич для синтаксиса — print, cond, let*, not/and/or, строки. Оценка сложности реализации каждой. 2. Обсуждение более полного покрытия реализации примерами — синтаксический сахар => и let x =, три варианта демонстрации ленивости. 3. Уточнение что trace.x не нужен — --trace это флаг CLI, а не пример.
Ответ ИИ / краткое содержание: - Оценены фичи по соотношению сложность/эффект. Решено пока не брать. - Предложены примеры arrow-lambda.x, let-sugar.x и три lazy файла. - Написаны тесты для всех новых примеров в ExampleTests.fs.
Что принято: - Структура новых примеров. - Тесты в ExampleTests.fs. - Решение не писать trace.x.
Что изменено человеком: - Содержание примеров написано самостоятельно. - Добавлен lazy-error.x — не обсуждался, инициатива автора.
Связанные файлы: - examples/arrow-lambda.x - examples/let-sugar.x - examples/lazy-basic.x - examples/lazy-memo.x - examples/lazy-scope.x - examples/lazy-error.x - tests/Language.Tests/ExampleTests.fs
Связанный PR: #59
Дата: 06.05.2026
Задача: Написание docs/examples.md.
Prompt / темы обращений:
Попросил привести в читаемый вид каркас docs/examples.md:
добавить краткое описание к каждому примеру, команды запуска
и раздел demo scenario для защиты.
Ответ ИИ / краткое содержание
ИИ дополнил каждый пример одним-двумя предложениями описания,
добавил команды запуска с флагами --ast и --trace,
написал раздел demo scenario с порядком показа на защите.
Также исправил опечатку: в секции fold стояла ссылка на filter.x.
Что принято
- Описания к каждому примеру.
- Команды запуска.
- Раздел demo scenario.
- Исправление ссылки в секции fold.
Что изменено человеком - Структура файла, список примеров, исходный код и результаты — написаны самостоятельно. - Итоговое содержание проверено и скорректировано вручную.
Связанные файлы - docs/examples.md - docs/index.md - README.md
Связанный PR: #73
Дата: 06.05.2026 Задача: Выбор способа публикации документации и настройка GitHub Pages.
Prompt / темы обращений: Обсуждение проблемы с GitHub Pages в classroom-репозитории: форк наследует ограничения организации MAILabs-Edu-2026, Pages недоступен. Поиск workaround для публикации документации.
Ответ ИИ / краткое содержание
ИИ предложил три варианта: форк, Netlify/Vercel, клон в личный аккаунт.
После того как форк не сработал (Pages наследует ограничения родительского репо),
предложен и разобран вариант с клоном в личный публичный репозиторий.
Также предложены: конфигурация mkdocs.yml, workflow pages.yml для автодеплоя,
исправление битых ссылок в docs/examples.md через sed.
Что принято
- Решение клонировать репозиторий в личный аккаунт как публичный.
- Структура mkdocs.yml и pages.yml.
- Исправление ссылок на файлы примеров через GitHub blob URL.
- Добавление ai-usage/04-final-summary.md в nav.
Что изменено человеком
- Выбор конкретного варианта (клон вместо форка) — самостоятельное решение.
- Публикация и настройка репозитория выполнена самостоятельно.
- Исправление команды mkdocs build --strict false → mkdocs build замечено по логу CI.
Связанные файлы - mkdocs.yml - .github/workflows/pages.yml - docs/examples.md - README.md - docs/index.md
Связанный PR: #75