Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

derived-data-integrity — Commitnuté odvození popisuje něco, čeho může být projekcí

Commitnutý odvozený artefakt je projekcí vstupů, které commit vlastní. Přistání nesouvisející změny na trunku ho neneplatní, fixture, jejíž databáze objektů nemá historii, ho stále dokáže vyhodnotit, a odmítnutí kvůli zastarání existuje na cestě, kterou merge skutečně jdou — takže první, co řekne ne, je kontrola, nikoli publikovaný web.

AKTIVNÍ 1 of 3 issues done

připraveno
2
blokováno
0
aktivní
0
verify
0
hotovo
1
zrušeno
0

Problém

Odvozený artefakt se commituje s otiskem toho, co jej vytvořilo, a kontroly porovnávají tento otisk se stromem. Dvě věci způsobují, že záznam nemůže zůstat pravdivý. Hashuje celou vstupní množinu, takže nesouvisející změna přistávající na kmeni zneplatní odvození, které není špatné — strom se prostě pohnul; a kde hashuje HEAD, soubor uvnitř commitu nemůže popsat commit, ve kterém je, což apps/majordomus-cli/src/release/changelog.rs:75 říká ve vlastním komentáři, zatímco kontrola sahá přes něj. Náklady se platí denně a odděleně: každá větev se po každém merge odvozuje znovu, pokaždé šest až pětatřicet minut; testovací vstup bez historie nemůže artefakt vůbec vyhodnotit; a odmítnutí, které zastaralý záznam zachytí, žije v pre-commit hooku, který se nemůže spustit pro merge vytvořený serverem. Takže první věc v pipeline, která může říct ne, je publikace.

Výsledek

Commitnutý odvozený artefakt je projekcí vstupů, které commit vlastní. Přistání nesouvisející změny na trunku ho neneplatní, fixture, jejíž databáze objektů nemá historii, ho stále dokáže vyhodnotit, a odmítnutí kvůli zastarání existuje na cestě, kterou merge skutečně jdou — takže první, co řekne ne, je kontrola, nikoli publikovaný web.

Aktuální stav

Změřeno 2026-09-10. master 3fb515f5c zaznamenává source_hash e6abaa4665163bcd, zatímco hash jeho stromu je 4fe657a09b10, a tři po sobě jdoucí běhy Pages na masteru selhaly shodně v kroku buildu kvůli tomuto odmítnutí; web naposledy odpovídal z 5e67318db. Dva z těch tří mergů commitnul GitHub, kde žádný pre-commit hook neexistuje, a gh api branches/master/protection vrací 404 Branch not protected, takže gate webu, který aktuálnost kontroluje, je poradní a hlásí až po mergi. c44c2d4c8 a 2ce8d66e5 zaznamenávají stejný source_hash - merge driver řeší odvozené artefakty na naši stranu, takže zastaralý záznam projde mergem nedotčen. test/cases/56_derived_current_gate.sh exportuje git archive HEAD do fixture bez commitů, takže složení changelogu hlásí fatal: Not a valid commit name. Jedna větev zaplatila za jeden večer 185 s, 1125 s a 2135 s znovuodvozování, celé proto, že se pod ní posunul trunk.

Cílový stav

Záznam pokrývá to, co commit vlastní. Kontrola, která odmítne zastaralý, běží tam, kde se dějí merge. Changelog se skládá z něčeho, co fixture umí vyhodnotit. Nikdo neodvozuje znovu, aby zodpověděl otázku, na kterou odvození už mělo pravdu.

Rozsah

  • skripty
  • apps/majordomus-cli/src/release
  • .ai/repo/ci
  • test/cases
  • docs/CI.md

Mimo rozsah

  • Přimět build Pages, aby znovu odvozoval, místo aby odmítal. Otisk vstupu je deterministický - tři běhy na jednom stromu jsou bajt po bajtu shodné - ale vygenerovaný obsah závisí na stroji: %h zkracuje proti lokálnímu úložišti objektů, checkout s hloubkou 1 zapisuje degradovaný changelog, souběžný derive může číst kořen sourozeneckého worktree. Build, který by znovu odvozoval, by mohl vyrobit třetí odpověď, která neodpovídá žádné straně. Zaznamenáno zde, protože tento východ bude navržen znovu a protože námitka formulovaná jako nedeterminismus otisku je vyvratitelná jedním příkazem a strhla by s sebou správnou námitku.
  • Zapnutí ochrany větve nebo volba, která kontrola je povinná. Nastavení repozitáře a rozhodnutí provozovatele.
  • Oslabení odvozeného merge driveru. Vyřešit ve prospěch našeho je správné; chybí odmítnutí za ním na straně serveru.

Kritéria přijetí

  • Odvozený artefakt commitnutý na jednom commitu je na tomto commitu stále aktuální poté, co na kmen přistane nesouvisející změna
  • Fixture, jejíž databáze objektů neobsahuje testovaný commit, dokáže vyhodnotit každý odvozený artefakt
  • Odmítnutí zastaralosti běží na cestě, kterou jde merge na straně serveru, nebo záznam jmenuje rozhodnutí, které se místo toho přijalo
  • Žádný dokument netvrdí ochranu, kterou merge vytvořený GitHubem nedosáhne

Validace

  • scripts/derive-check
  • scripts/pages current
  • test/run.sh 56_derived_current_gate

Požadované důkazy

  • derivation_survives_an_unrelated_merge
  • fixture_without_history_evaluates

Rizika

  • Zúžení toho, co záznam pokrývá, je tiché v nebezpečném směru: příliš úzké a zastaralost přestane být zjistitelná, což se čte jako zelená, ne jako šum. Každá změna zde potřebuje případ, který dokazuje, že kontrola stále něco odmítá.
  • Subsystém se dotýká každá větev, takže změna přistává v trvalém sporu se vším ostatním, co právě derivuje.

Důkazy

Milník není nikdy hotový tím, že jsou hotové jeho úkoly; poslední krok je jeho vlastní přijetí a podmiňují jej řádky níže.

pokrývátypcommandvýsledek
derivation_survives_an_unrelated_mergetestbash test/run.sh 3048_a_derivation_survives_an_unrelated_mergetesty: 1 prošel, 0 selhalo, 0 přeskočeno na masteru 01227a0f74a (2026-10-17, MAJORDOMUS_BIN = build onoho stromu); I1409 HOTOVO
fixture_without_history_evaluatestestbash test/run.sh 3055_a_derivation_needs_no_historytesty: 1 prošel, 0 selhalo, 0 přeskočeno na masteru 01227a0f74a (2026-10-17, MAJORDOMUS_BIN = sestavení onoho stromu)

Úkoly

Každý z nich je prováděcí kontrakt s vlastními kritérii přijetí, validačním příkazem a požadovanými důkazy. Sloupec wave je vrstva grafu závislostí, v níž úkol leží.

issuestatusvlnazávisí nanázev
I1409 HOTOVO 0 — Odvozená data přestanou hashovat vstupy, které nemohou řídit
I2863 PŘIPRAVENO 0 — A derive does not run while a merge is uncommitted
I2864 PŘIPRAVENO 0 — The site generator reads no output of a later derive stage

Graf

graf závislostí derived-data-integrityz .ai/repo/project
flowchart LR
    I1409["I1409<br/>Derived data stops hashing inputs it cannot control"]:::done
    I2863["I2863<br/>A derive does not run while a merge is uncommitted"]:::ready
    I2864["I2864<br/>The site generator reads no output of a later derive stage"]:::ready
    classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
    classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
    classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
    classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
    classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
    classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px

Kanonický záznam: .ai/repo/project/milestones/derived-data-integrity.yaml. Přečtěte ho zpět pomocí majordomus plan show derived-data-integrity.

Prohledává názvy a popisy všech stránek, které tento web publikuje.