Qualified Notes on Papers

Комментарий точно в цель.
Ревью точно до конца.

Проверка документов с точностью до строки — она завершена только тогда, когда не осталось ничего открытого.

Сцена рабочего процесса вокруг заголовка: отрисованный документ с выделенным фрагментом и закреплённой аннотацией, пузырёк комментария рецензента, переход версии с повторной привязкой аннотаций, принятое решение и карточка завершения с нулём открытых аннотаций — соединённые одной плавной линией, вдоль которой идут аватары рецензентов.

Этот процесс, в котором вы застряли, вам хорошо знаком.

Проверка документов обычно происходит в зазорах между инструментами — и каждый зазор стоит комментария, версии или целого вечера.

  • Без qnop: Документ уходит вложением в письме.

    Пять рецензентов, пять копий, пять наборов комментариев, которые кому-то придётся сводить вручную.

    С qnop: Один документ, одно ревью, все рецензенты в одном месте.

  • Без qnop: Отзыв приходит в виде «страница 4, второй абзац, третья строка».

    Тот, кто вносит правку, дольше ищет фрагмент, чем меняет его.

    С qnop: Аннотации привязаны ровно к тем строкам и областям, которые имеются в виду.

  • Без qnop: Новая версия оставляет все комментарии к старой без привязки.

    Поэтому надёжнее всего не обновлять документ, пока ревью не закончится.

    С qnop: Новые версии заново привязывают существующие аннотации, а не отбрасывают их.

  • Без qnop: Никто не может сказать, закончено ли ревью на самом деле.

    «Закончено» означает, что кто-то перестал отвечать в ветке, а не что работа завершена.

    С qnop: Ревью можно завершить только при нуле открытых аннотаций.

Точность там, где важно. Структура там, где больно.

Основную работу делают три вещи: точная привязка, обсуждение, которое остаётся на месте, и версии, сохраняющие разговор живым.

Отмечайте строку, а не страницу.

Выделяйте точные строки и области отрисованного PDF и комментируйте в ветках на Markdown. Многослойная привязка хранит цитату, позицию и вёрстку — поэтому аннотация продолжает указывать на то, что имелось в виду, а не на координату, которая сегодня случайно там оказалась.

  • Точное выделение строк и областей
  • Комментарии на Markdown с реакциями
  • Мгновенный переход между документом и обсуждением
Аннотация, привязанная к выделенному фрагменту

Обсуждение остаётся на месте.

У каждой аннотации своя ветка: ответы, реакции и статус, который что-то значит. Открыта, обсуждена, затем принята или отклонена — решение живёт на том фрагменте, о котором шла речь, а не в чьей-то почте.

  • Ветки ответов у каждой аннотации
  • Принять или отклонить — явное решение
  • Опциональная анонимизация рецензентов
Разрешённая ветка аннотации

Новая версия сохраняет разговор.

Изменения содержимого создают новую неизменяемую версию — старые никогда не переписываются. Существующие аннотации заново привязываются к новой версии нечётким сопоставлением, а диф между версиями точно показывает, что сдвинулось.

  • Неизменяемая, полностью сохраняемая история версий
  • Нечёткая повторная привязка между версиями
  • Диф между версиями для режима сравнения
Аннотации, пережившие смену версии

Ревью, которое само скажет, что оно закончено.

qnop моделирует ревью как явный конечный автомат, а не как договорённость, которую просят соблюдать. Финальное состояние недостижимо, пока остаётся незакрытая работа.

  1. Открыта

    Аннотация ставится на фрагмент и принадлежит тому, кто должен на неё ответить.

  2. Обсуждена

    Ветка движется: ответы, реакции и контекст, необходимый для решения.

  3. Принята / Отклонена

    Решение фиксируется на самой аннотации и попадает в журнал аудита.

  4. Завершено

    Достижимо только при нуле открытых аннотаций. Ничто тихо не выпадает из списка.

Ревью как спорт

Темп ревью наконец-то видно.

Ревью — это работа, которую никто не ставит в календарь. qnop делает усилия читаемыми: серии, таблицы результатов, достижения и карточки игроков превращают завершение ревью в привычку, а не в повинность.

  • Карточки игроков

    Профиль, который показывает, что человек действительно внёс в ревью.

  • Серии и миссии

    Видимый разгон — на той же панели, где уже идёт работа.

  • Командные уровни

    Прогресс по командам и ранги лидеров, заработанные реальной активностью в ревью.

Карточка профиля рецензента с серией и достижениями

Ваши документы остаются под вашим контролем.

qnop спроектирован в первую очередь для self-hosted: один контейнер с REST API и встроенным веб-интерфейсом, PostgreSQL и любое S3-совместимое объектное хранилище — на вашей собственной инфраструктуре.

  • qnop API + веб-интерфейс
  • PostgreSQL реляционные данные
  • S3-совместимое объектное хранилище документы

ваша инфраструктура

Никаких небезопасных значений по умолчанию

Сервер сразу отказывается стартовать, если обязательный секрет отсутствует или остался заглушкой. Конфигурации «пока и так сойдёт», о которой забудут, не существует.

Корпоративный вход

Локальные учётные записи с подтверждением по почте или единый вход OIDC. JWT-сессии с ротацией refresh-токенов и ограничение частоты запросов на эндпоинтах аутентификации.

Подотчётность по умолчанию

Каждое значимое действие попадает в журнал аудита, доступный выделенной роли аудитора, которая существует ровно для этого.

Роли, отражающие реальность

Глобальные роли администратора, участника и аудитора плюс лиды команд — а ревью при необходимости может идти с анонимизированными рецензентами.

Закройте ревью. На этот раз по-настоящему.

Self-hosted, точность до строки — и завершено тогда, когда оно само это говорит.