declaredbreak

package
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 13, 2026 License: AGPL-3.0 Imports: 9 Imported by: 0

Documentation

Overview

Package declaredbreak — АДЪЮДИКАЦИЯ ломающих изменений контракта, а не голый `buf breaking`.

───────────────────────────────────────────────────────────────────────────── ЗАЧЕМ АДЪЮДИКАЦИЯ, А НЕ ПРОСТО ПРОВЕРКА

Голый `buf breaking` верен ровно до того дня, когда ломающее изменение становится ОСОЗНАННЫМ — снят метод, отвечающий отказом при любом входе; снято поле, которое служба принимает и не читает. Тогда шаг красен ПО ПОСТРОЕНИЮ, и у читателя остаются два плохих хода: снять шаг — потерять защиту от СЛУЧАЙНЫХ разрывов на всём дереве ради одного объявленного; либо внести файл в `breaking.ignore` — послабление без предмета и без срока, ослепляющее проверку на целом файле НАВСЕГДА.

Поэтому разрыв проходит только через перечень объявленных, и запись живёт ровно пока у неё есть предмет: НАХОДКА ВНЕ ПЕРЕЧНЯ — КРАСНОЕ, ЗАПИСЬ БЕЗ НАХОДКИ — ТОЖЕ КРАСНОЕ. Вторая половина и есть самоистечение: без неё перечень пережил бы свой предмет и остался бы слепой зоной, выданной вперёд.

───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ СВОЯ РЕАЛИЗАЦИЯ, А НЕ КОПИЯ ПЛАТФОРМЕННОЙ

У платформы адъюдикатор того же класса есть. Взять его файлом нельзя: копия файла чужого репозитория запрещена, и запрет не смягчается совпадением содержимого — он им ДОКАЗЫВАЕТСЯ, потому что расхождение наступит молча. Взять пином тоже нельзя: ребро `kaname → kacho` снято, и заводить его обратно ради проверки значило бы замкнуть граф.

Поэтому здесь ПОВТОРЕН ПРЕДМЕТ, а не текст: те же три исхода, то же самоистечение, тот же разбор вывода. Расхождение реализаций расхождением СВОЙСТВА не является — свойство у каждого дерева своё, и доказывается оно своей инъекцией на СВОЁМ выводе buf.

───────────────────────────────────────────────────────────────────────────── ИСХОДОВ ТРИ, И ТРЕТИЙ НЕСУЩИЙ

0 — находок нет и перечень пуст либо каждая находка объявлена;
1 — НАХОДКА: разрыв вне перечня либо запись, которой нечего прощать;
2 — гейт НЕ СДЕЛАЛ СВОЕЙ РАБОТЫ: вывод не разобран, перечень не прочитан.

Код возврата самого `buf` разбирает вызывающий: 100 — «есть находки» (штатный вход сюда), 0 — «разрывов нет», ЛЮБОЙ ДРУГОЙ — третий исход. Схлопни их, и сетевой отказ читался бы как «разрывов нет».

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Declaration

type Declaration struct {
	Rule   string `yaml:"rule"`
	Path   string `yaml:"path"`
	Symbol string `yaml:"symbol"`
	Reason string `yaml:"reason"`
	Issue  string `yaml:"issue"`
}

Declaration — объявленный разрыв. Полей пять, и все обязательны.

func LoadDeclarations

func LoadDeclarations(path string) ([]Declaration, error)

LoadDeclarations — перечень объявленных разрывов.

ОТСУТСТВИЕ ФАЙЛА — ОТКАЗ, А НЕ ПУСТОЙ ПЕРЕЧЕНЬ: «перечня нет» и «перечень пуст» ведут читателя в разные места, и схлопывание их сделало бы удаление файла способом снять проверку.

func (Declaration) Validate

func (d Declaration) Validate() []string

Validate — негодная запись есть находка, а не молчание: объявление, которое нельзя сопоставить, прощает не то, что называет.

type Finding

type Finding struct {
	Path    string `json:"path"`
	Type    string `json:"type"`
	Message string `json:"message"`
	Line    int    `json:"start_line"`
}

Finding — одна находка `buf breaking`, как её печатает `--error-format=json`.

func ParseFindings

func ParseFindings(r io.Reader) ([]Finding, error)

ParseFindings — разбор вывода `buf breaking --error-format=json`.

СТРОКА, НЕ ЯВЛЯЮЩАЯСЯ ОБЪЕКТОМ JSON, — ОТКАЗ, а не пропуск: buf печатает в поток вывода только находки, и всё прочее означает, что шаг не сделал своей работы. Молчание здесь читалось бы как «разрывов нет».

func (Finding) Coordinate

func (f Finding) Coordinate() string

Coordinate — координата находки для сопоставления и для текста.

func (Finding) Symbol

func (f Finding) Symbol() string

Symbol — имя снятого символа. buf называет его В КАВЫЧКАХ, и это предпосылка, а не догадка: она снята с настоящего вывода buf 1.72.0 и проверяется пробой.

У снятия ФАЙЛА символ совпадает с путём: предмет такой находки — сам файл, и другого имени у неё нет.

type Result

type Result struct {
	// Undeclared — разрывы, которых нет в перечне.
	Undeclared []Finding
	// Expired — записи, которым нечего прощать. Самоистечение перечня.
	Expired []Declaration
	// Matched — объявленные разрывы, нашедшие свой предмет.
	Matched int
	// Invalid — негодные записи перечня.
	Invalid []string
	// Findings — сколько находок разобрано, Declarations — сколько записей прочитано.
	Findings     int
	Declarations int
}

Result — исход адъюдикации.

func Adjudicate

func Adjudicate(findings []Finding, decls []Declaration) Result

Adjudicate — сопоставление находок с объявлениями.

func (Result) Clean

func (r Result) Clean() bool

Clean — гейт зелен только когда пусты ВСЕ три половины.

func (Result) Report

func (r Result) Report() string

Report — перепись и находки. Объём осмотренного печатается ВСЕГДА: «ноль находок» обязано быть отличимо от «ноль прочитанного».

Directories

Path Synopsis
cmd
adjudicate-declared-breaks command
adjudicate-declared-breaks — читает вывод `buf breaking --error-format=json` со стандартного входа и сопоставляет его с перечнем объявленных разрывов.
adjudicate-declared-breaks — читает вывод `buf breaking --error-format=json` со стандартного входа и сопоставляет его с перечнем объявленных разрывов.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL