## Кратко Для Сайта `uossv` — это человеко-ориентированный плоский текстовый формат для строковых данных, где важны не столбцы как в `.tsv`, а короткие записи, которые можно быстро набрать вручную и при этом стабильно разобрать скриптом. Формат использует не табы, а нечетные группы пробелов: `3` пробела служат обычным разделителем полей, `5`, `7`, `9+` пробелов задают более глубокие группы. В текущем репозитории он применяется как `.uossv`: строки могут быть неполными, порядок редких полей может отличаться, а завершенные или неактивные записи переносятся вниз файла. Что можно вынести на сайт без сильной переработки: - хранение задач и доступов в обычных `.txt` файлах - быстрый ручной ввод коротких строк - постепенное расширение строки тегами вида `slug=...` или `expires=...` - предсказуемый экспорт в `.csv` или `.tsv` ## Преамбула `plan.txt` и `password.txt` остаются файлами `.txt` для повседневной работы. По своей структуре они ближе всего к `Unordered Odd Space Separated Values`, далее `.uossv`: это плоский формат, где каждая строка может содержать разное количество полей, а средняя часть строки не обязана быть жестко табличной. Связанные названия форматов: - `.tsv` — `Tab Separated Values`, один таб как структурный разделитель - `.ossv` — `Odd Space Separated Values`, нечетные группы пробелов как разделители - `.uossv` — неупорядоченный вариант `.ossv` для плоских строк с разной полнотой - короткие варианты `.osv` и `.uosv` допустимы как алиасы, но в документе основными считаются `.ossv` и `.uossv` Главное отличие `.tsv` от `.ossv` в семействе разделителей. `.tsv` использует только один таб. `.ossv` допускает `1`, `3`, `5`, `7`, `9+` пробелов. В этом репозитории рабочие файлы ведут себя как `.uossv`, хотя физически остаются `.txt`. ## Политика Именования В документации лучше держать одно основное имя формата, а не несколько равных названий в одной строке. Рекомендуемая схема: - формат хранения: `.txt` - семейство форматов: `.ossv` - текущий рабочий профиль строк: `.uossv` - короткие алиасы: `.osv` и `.uosv` Не стоит показывать `.txt`, `.osv`, `.uosv`, `.ossv` и `.uossv` как пять равных имен одного и того же файла. Это делает формат менее понятным. ## Назначение `plan.txt` и `password.txt` — компактные плоские текстовые таблицы. Их сначала редактирует человек, а потом при необходимости разбирает скрипт. Первая строка — это строка-инструкция формата, вторая строка пустая, дальше идут данные. ## Рабочий Профиль - пустые строки игнорируются - первая строка читается как инструкция формата - файлы считаются `.txt`, но по поведению соответствуют профилю `.uossv` - базовый разделитель данных — `3` пробела - группы из `5`, `7`, `9+` пробелов считаются более глубокими уровнями, а не пустыми ячейками - разбор идет от самых широких групп к узким: `9+`, затем `7`, затем `5`, затем `3` - одинарные пробелы внутри значений не разделяют поле - каждая строка независима и может не содержать часть необязательных полей - короткие строки остаются позиционными и без ключей - расширенные строки живут в том же файле, но редкие поля записываются как теги `name=value` - если в строке появился первый тег, все последующие редкие поля лучше тоже писать тегами - завершенные и неактивные строки держатся в нижнем блоке и сохраняют внутренний порядок ## Строка-Инструкция Заголовок файла — это одна строка с `#` в начале. Она должна читаться как правило для человека, а не как блок настроек для запуска. Части строки разделяются `3` пробелами. Для рабочих файлов сама строка-инструкция держится на английском: так она короче, ровнее звучит в заголовке и лучше совпадает с тегами вроде `slug=...` или `expires=...`. Рекомендуемый порядок фраз: - `write ... first` - `keep ... next` - `add extra fields only as tags like ...` - `keep ... near the end` - `keep ... only as the last value` - `move final rows to the bottom` - `export order ...` Внутри строки-инструкции: - лучше использовать обычные слова и короткие правила, а не плотную схему из `key=value` - `name=value` допустим только как пример тега внутри самой инструкции - запятые нужны только в части с порядком экспорта - формулировки могут быть человеческими, но порядок смысловых блоков должен оставаться стабильным ## plan.txt Строка-инструкция в [plan.txt](/home/konstantin/Documents/profile-sample/plan.txt) означает следующее: - сначала пишется `[id] задача`, например `[11] описание хранения задач и сравнения форматов` - затем при наличии идут `проект` и `клиент` - редкие поля записываются тегами вида `slug=...`, `category=...`, `due=...`, `price=...` - время остается ближе к правому краю строки в человекочитаемом виде, например `140 минут` - `СДЕЛАНО` и `НЕАКТИВНО` допустимы только как последнее обычное значение - нижний блок файла отведен под завершенные или неактивные строки - часть `порядок экспорта ...` задает целевую колонночную схему для `.csv` или `.tsv` Основные формы строк: - `[2] черновая задача без уточнений` - `[9] условный робот для служебной операции 240 минут` - `[9] условный робот для служебной операции project-eta.example ООО Клиент Пример Зета 240 минут` - `[31] карточка проекта project-alpha.example ООО Клиент Пример Альфа slug=client-portfolio parent=portfolio category=портфель status=in-progress url=/plan/item.php?slug=client-portfolio start=2026-03-01 due=2026-04-01 effective=860 average=960 120 минут` Соответствие тегов колонкам экспорта: - `project -> project_slug`, `client -> client`, `task -> task` - `title= -> title`, `slug= -> slug`, `parent= -> parent_slug`, `customer= -> customer_key`, `sort= -> sort_order` - `desc= -> description`, `category= -> category`, `status= -> status`, `vis= -> visibility`, `hidden= -> admin_hidden` - `code= -> access_code`, `url= -> url`, `start= -> start_at`, `due= -> due_at` - `work-start= -> work_start_at`, `work-end= -> work_end_at`, `effective= -> effective_minutes`, `average= -> average_minutes` - `price= -> price`, `info= -> information`, `published= -> published_at` ## password.txt Строка-инструкция в [password.txt](/home/konstantin/Documents/profile-sample/password.txt) означает следующее: - сначала записывается либо один `endpoint`, либо пара `label secret` - если в строке два секрета, используется блок на `5` пробелах - `note` остается основным читаемым полем в середине строки - редкие поля записываются тегами вида `login=...`, `email=...`, `expires=...`, `info=...` - `endpoint` держится ближе к правому краю как главное целевое поле - `ИСТЕК` и `НЕАКТИВНО` допустимы только как последнее обычное значение - нижний блок файла отведен под истекшие или неактивные строки - часть `порядок экспорта ...` задает целевую колонночную схему для `.csv` или `.tsv` Основные формы строк: - `billing.project-beta.example` - `admin-user-01 PassPlaceholder01! panel.project-alpha.example` - `admin-user-01 PassPlaceholder01! панель примера panel.project-alpha.example` - `hosting-main HostPlaceholder02! DbPlaceholder02! хостинг и база примера cp.project-alpha.example` - `vpn-user-08 VpnPlaceholder08! удаленный доступ примера expires=2026-04-01 vpn.office-example.local` - `archive-user-77 OldPlaceholder77! старый тестовый доступ ftp.project-theta.example ИСТЕК` Соответствие тегов колонкам экспорта: - `label -> label`, первый секрет -> `secret_1`, второй секрет в пакете -> `secret_2` - `note -> note`, `client -> client`, `project -> project`, `category -> category`, `type -> type`, `location -> location` - `login= -> login`, `email= -> email`, `role= -> role`, `url= -> url`, `expires= -> expires`, `info= -> information` - правый `endpoint -> endpoint`, терминальное значение -> `final` ## Форм-Факторы И Риски Поддерживаемые формы в `plan.txt`: - короткая черновая строка - строка только с оценкой времени - строка с проектом и клиентом - расширенная строка с тегами - завершенная или неактивная строка внизу файла Поддерживаемые формы в `password.txt`: - строка только с endpoint - строка с label и одним secret - строка с label и двумя secret внутри группы - строка с тегами доступа - истекшая или неактивная строка внизу файла Основные риски: - слишком много нетегированных полей делает строку неоднозначной - тег `status=` можно перепутать с терминальным состоянием строки - повтор одного и того же тега в строке ломает экспорт - повтор `slug=` мешает древовидным связям через `parent=` - табличные редакторы импортируют первую строку как данные, если ее не пропустить вручную - обычные DSV-инструменты могут схлопывать или пересчитывать повторные пробелы не так, как ожидается Принятые ограничения: - без тегов остаются только самые частые поля середины строки - терминальное состояние хранится отдельным последним значением - каждый тег допустим не более одного раза в строке - `slug=` должен быть уникальным, если строка участвует в иерархии - при важности табличной совместимости лучше экспортировать в `.csv` или `.tsv` ## Профили Сортировки - `source` — сохранять строки в исходном порядке - `grouped` — переносить завершенные или неактивные строки вниз стабильной группировкой - `preferred` — нормализовать строку по схеме `левая часть -> обычная середина -> теги -> правая часть -> терминальное значение`, не меняя сами значения ## Профиль `sep=1` Для Экспорта `.ossv` может использовать `1` пробел как структурный разделитель только там, где каждое поле уже сведено к одному токену или к строгому ASCII-значению. Это подходит для компактных экспортов и примеров, но не для текущих рабочих файлов. Нельзя безопасно ожидать, что один и тот же файл корректно прочтется и как `sep=1`, и как `sep=3`. Если инструменту указать разделитель в один пробел, строка вида `[31] карточка проекта project-alpha.example slug=client-portfolio 120 минут` потеряет смысл рабочего профиля `sep=3`. ## Табличные Редакторы Excel, Google Sheets, OpenOffice Calc и LibreOffice Calc по умолчанию не считают `#` комментарием при импорте разделенного текста. На практике первая строка попадет в таблицу как обычная строка данных, если не пропустить ее вручную. Для работы через таблицы: 1. хранить исходные данные в нативном `.uossv` 2. пропускать первую строку-инструкцию при прямом импорте 3. экспортировать в `.tsv` или `.csv`, когда важнее совместимость с табличными инструментами ## Алгоритм Разбора 1. прочитать первую строку как инструкцию формата 2. разделить ее на смысловые блоки по `3` пробелам и распознать устойчивые английские фразы 3. пропустить пустую вторую строку 4. разбирать строку данных от широких групп пробелов к узким 5. снять справа терминальное состояние, если оно есть 6. определить левую форму строки: `[id] задача`, `endpoint`, `label secret` или `label secret1 secret2` 7. распределить нетегированные средние поля в стандартные слоты 8. разобрать все оставшиеся поля вида `name=value` как теги 9. при необходимости собрать выход в порядке, указанном в части `порядок экспорта ...` ## Правило Обновления - если меняется грамматика строк, сначала обновляется первая строка файла, затем этот документ - строки данных должны оставаться короткими и удобными для ручного ввода - новые поля добавляются только тогда, когда они действительно улучшают ручную работу или экспорт
Документ Формата
`uossv` — это человеко-ориентированный плоский текстовый формат для строковых данных, где важны не столбцы как в `.tsv`, а короткие записи, которые можно быстро набрать вручную и при этом стабильно разобрать скриптом.
Основной файл документа: doc.md
Справочные материалы документа
Откройте основной материал или другой файл документа как ссылочный источник.