Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
номер: 1098
заголовок: Прибор паритета установок знает ровно две установки и не зовётся ниоткуда; что все каналы ставят один двоичный с одним отпечатком, никто не меряет
статус: свободна
приоритет: P1
исполнитель: —
ветка: —
команда: вторая
карта: Что мешает больше всего
рядом: 7959, 1710, 8128, 1504
нужность: решение ADR-0067 считается исполненным только прибором: все каналы ставят тот же двоичный с тем же отпечатком; без прибора это слово, а не число
---

# 1098. Прибор паритета установок знает ровно две установки и не зовётся ниоткуда; что все каналы ставят один двоичный с одним отпечатком, никто не меряет

Решение: [ADR-0067](../adr/0067-the-release-ships-binaries-for-four-triples-from-one-seed.md),
раздел 5 — как проверять решение исполненным.

## Шаги воспроизведения

1. Сколько установок читает прибор: `grep -n 'sverka-nastroyka' packaging/install-parity.flang`
и пример настройки в функции «Поле настройки» (шесть строк: имя первой,
приставка первой, имя второй, приставка второй, корень, рабочий каталог).
2. Кто его зовёт: `grep -rc 'install-parity' .github/workflows/*.yml .flangrc | grep -v ':0'`
3. Разные ли установки сегодня: поставить из клона в чистый префикс и напечатать
из другого каталога (шаги задачи о таблице каналов) — `flang emit` отвечает
кодом 2, у установки brew или asdf того же выпуска — кодом 0.

## Что происходит

```
$ grep -n 'sverka-nastroyka' packaging/install-parity.flang
397: ожидается вариант «Сделать» с поручение равным (вариант «Прочитать файл» с путь равным "sverka-nastroyka.txt") …
405: то вариант «Сделать» с поручение равным (вариант «Прочитать файл» с путь равным "sverka-nastroyka.txt") …
код 0
$ grep -rc 'install-parity' .github/workflows/*.yml .flangrc | grep -v ':0'
код 1
```

Прибор `packaging/install-parity.flang` (план «Сверка», корпус 60 вызовов,
сверка кода, вывода и потока ошибок) сравнивает РОВНО две установки из
настройки `sverka-nastroyka.txt` и не зовётся ни одной работой CI и ни одной
короткой командой `.flangrc`. Заведён он был для пары npm/brew
(`docs/zettel/two-installs-answered-differently-on-54-calls-of-59.md`); npm
ушёл, пара распалась, прибор остался без предмета. Между тем установка из клона
уже сегодня отвечает на десять вызовов `emit` корпуса иначе, чем brew и asdf
(рантайма нет), и этого не видит никто.

Версия: `flang 0.7.24`, `оболочка 9f361fce`. Прогон 5 октября 2026.

## Что должно быть

Прибор читает настройку с N установок (N ≥ 2; первая — эталон, остальные
сверяются с ней попарно тем же корпусом), печатает по строке на пару и общий
итог `ИТОГ | установок N | вызовов 60 | расхождений 0`; расхождение в первых
двух строках `--version` (версия и отпечаток оболочки) называется отдельно —
это «не тот двоичный», а не «другой ответ». Каждая добавленная строка
`.flang` — не длиннее 120 знаков. Короткая команда `install-parity:check` в
`.flangrc`. Работа CI на теге (в `install-path.yml` или рядом): на
`ubuntu-latest` — установки asdf (двоичный), asdf (`FROM_SOURCE=1`), готовый
архив `tar -xzf`, клон `make install`, Nix (если принят); на `macos-latest` —
brew, asdf, готовый архив, клон. Порог — `расхождений 0`; расхождения клона по
`emit` снимаются либо правкой `make install` (класть `share/flang`), либо
названным исключением в настройке с причиной — молча не глотаются.

## Обходной путь

Запускать прибор руками на двух установках: написать `sverka-nastroyka.txt` из
шести строк и `bootstrap/flang io packaging/install-parity.flang --на-веру`.
Третью установку сверять вторым прогоном.

## Когда задача сделана

1. `bootstrap/flang io packaging/install-parity.flang --на-веру` на настройке из
четырёх установок печатает `ИТОГ | установок 4 | вызовов 60 | расхождений 0`
и завершается кодом 0.
2. Работа CI на теге зовёт `install-parity:check` на обоих раннерах; её имя
стоит в `docs/ci-inventory.md`, а не только в YAML.
3. Проба порчи: одна из установок подменена двоичным другого выпуска —
прибор печатает `не тот двоичный: --version разошёлся` и уходит ненулевым
кодом; вторая порча — у одной установки снят каталог `share/flang/js` —
прибор называет вызов `emit … --target js` и расходится ровно на нём.
4. `flang check packaging/install-parity.flang` зелен, примеры у новых функций
есть; длина добавленных строк не больше 120 знаков
(`awk 'length > 120' packaging/install-parity.flang` молчит).
5. Если двоичные всех четырёх троек собраны одним семенем, строка «оболочка …»
в `--version` совпадает на обеих платформах CI — прибор это печатает числом,
а не словами.

## Где живёт правка

`packaging/install-parity.flang` (настройка на N установок, попарная сверка,
отдельный отказ на `--version`), `.flangrc` (команда `install-parity:check`),
`.github/workflows/install-path.yml` (работа на теге), `docs/ci-inventory.md`.
Перепечатка не нужна: прибор исполняется `flang io`, а не живёт в семени.
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
номер: 1504
заголовок: Ни Nix, ни Arch не ставят flang: в дереве нет flake.nix и PKGBUILD, а имя `flang` в AUR занято Фортраном от LLVM
статус: свободна
приоритет: P3
исполнитель: —
ветка: —
команда: вторая
карта: Что мешает больше всего
рядом: 7959, 1098, 8128
нужность: владелец решил публиковаться во все менеджеры, куда дотягиваемся без Windows; Nix и AUR дотягиваются из того же архива C и не требуют ни Node, ни своих раннеров
---

# 1504. Ни Nix, ни Arch не ставят flang: в дереве нет flake.nix и PKGBUILD, а имя `flang` в AUR занято Фортраном от LLVM

Решение: [ADR-0067](../adr/0067-the-release-ships-binaries-for-four-triples-from-one-seed.md),
раздел 2.5 — новые каналы. Делается ПОСЛЕ матрицы выпуска и после того, как
владелец назовёт имя пакета для AUR.

## Шаги воспроизведения

1. `ls flake.nix packaging/aur`
2. `command -v nix makepkg` — есть ли инструменты на машине разработки.
3. Открыть `https://aur.archlinux.org/packages/flang` — кто занимает имя.

## Что происходит

```
$ ls flake.nix packaging/aur
ls: cannot access 'flake.nix': No such file or directory
ls: cannot access 'packaging/aur': No such file or directory код 2
$ command -v nix makepkg
код 1
```

Ни флейка, ни PKGBUILD в дереве нет; на машине разработки нет ни `nix`, ни
`makepkg`, то есть проверять оба канала можно только в CI (снято 5 октября
2026). В AUR пакет `flang` — «ground-up implementation of a Fortran front end
written in modern C++» (LLVM Flang); в `homebrew-core` имя `flang` занято им
же — потому наш кран и зовётся полным именем `digitable-lol/tap/flang`.

Версия: `flang 0.7.24`, `оболочка 9f361fce`. Прогон 5 октября 2026.

## Что должно быть

**Nix.** `flake.nix` в корне дерева: пакет `flang` из архива C выпуска
(`fetchurl` с `sha256` из `SHA256SUMS`), сборка — `make` с флагами формулы,
установка — раскладка как у формулы (`bin`, `lib`, `include`, `share/flang`,
`share/man`). `nix profile install github:digitable-lol/flang` и `nix run` дают
`flang --version` = версия выпуска. `flake.lock` коммитится; обновляет его
`bump-version` вместе с версией и хешем. Сборка из исходников — нарочно: Nix
сам и есть сборка из описания, готовый двоичный ему чужероден.

**AUR.** `packaging/aur/PKGBUILD` и `.SRCINFO` для пакета с именем, которое
назовёт владелец (предложение ADR: `flang-digitable`; `conflicts=('flang')`,
потому что исполняемый файл тот же `flang`), источник — архив C с `sha256sums`,
сборка — `make` с флагами формулы, `package()` — та же раскладка. Второй пакет
`-bin` из готового двоичного — не в этой задаче. Публикация в AUR требует
учётной записи и ключа SSH владельца; автоматика (`KSXGitHub/github-actions-deploy-aur`
с секретом) — отдельное решение владельца, до него `.SRCINFO` сверяется в CI,
а пушит владелец.

## Обходной путь

Пользователь Nix: `nix-shell -p gcc gnumake`, клон, `make -C bootstrap`.
Пользователь Arch: `base-devel`, то же. Оба — вручную, без менеджера.

## Когда задача сделана

1. Работа CI на `ubuntu-latest` с установщиком Nix: `nix build .#flang` и
`result/bin/flang --version | head -1` = `flang <X>`; `nix flake check` зелен.
2. Работа CI в контейнере `archlinux:base-devel`: `makepkg -si --noconfirm` из
`packaging/aur`, `flang --version | head -1` = `flang <X>`;
`makepkg --printsrcinfo` совпадает с `.SRCINFO` знак в знак (иначе — красное).
3. Прибор паритета (задача об install-parity) даёт `расхождений 0` между
установкой Nix и установкой из готового двоичного на `ubuntu-latest`.
4. Проба порчи: `sha256` в `flake.nix` или `sha256sums` в PKGBUILD с подменённым
знаком — сборка красная по хешу, не по компилятору.
5. `bump-version` поднимает версию и хеш в `flake.nix` и `PKGBUILD` тем же
прогоном, что в формуле; `homebrew-formula:check`-подобный сторож сверяет
три места.

## Где живёт правка

`flake.nix`, `flake.lock`, `packaging/aur/PKGBUILD`, `packaging/aur/.SRCINFO`,
`scripts/release/bump-version.fscript`, новая работа в `.github/workflows/`
(по образцу `install-path.yml`), страницы установки — строки Nix и AUR в
таблице каналов. Перепечатка не нужна.
Loading
Loading