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.

Zdroj, který neodpověděl, není zdroj, ve kterém nic není

Zdroj, který neodpověděl, není zdroj, ve kterém nic není

majordomus://rule/project.a-failed-read-is-not-an-empty-answer@1aktivní projekcegithubshellselhánívynucování

odkazuje na něj

Nic ve vrstvě to nejmenuje. Zpětné odkazy se odvozují, takže prázdný seznam je odpověď, ne opomenutí.

Zdůvodnění

scripts/github-sync vypíše milníky a úkoly repozitáře dřív, než je porovná s plánem. Oba výpisy skončily v 2>/dev/null || true.

Výpis, který GitHub odmítl, zkrátil nebo omezil rychlostí, tak zanechal prázdný soubor a vše za ním ho četlo jako remote: neexistuje žádný milník, neexistuje žádný úkol. --check hlásil každý kanonický záznam jako missing a skončil kódem 11, kódem běžného driftu; kontrola nad ním přijímá 11 jako „remote byl přečten“ a hlásila by rozbitou západku tam, kde pravdou bylo, že se nic nepřečetlo. --apply spuštěné v té minutě by vytvořilo každý úkol podruhé. Řádek, který vypisuje štítky, o deset řádků níž, to už dělal správně a v komentáři říkal proč. Dva výpisy vedle něj ne.

Selhání je opakem toho, které jmenuje project.github-projection-gated. Toto pravidlo říká, že kontrola, která nedosáhne remote, nesmí projít. Toto říká, že nesmí ani selhat jako by dosáhla: odpověď, kterou nikdo nedostal, není shodou ani driftem.

Kontrola, která hlásí nález, když není co nalézt, je tentýž omyl viděný z druhé strany — prázdná množina čtená jako selhání místo selhání čteného jako prázdná množina — a stojí za to číst je spolu.

Požadované chování

  • Skript, který čte remote a ponechá si odpověď, kontroluje, že čtení uspělo. Když ne, řekne, které čtení selhalo, s příkazem, který jej reprodukuje, nic dalšího nezapíše a skončí s 12.
  • Odpověď gh nebo curl se nezapisuje do souboru tak, že by se selhání příkazu zahodilo (> file 2>/dev/null || true, || :).
  • Odpověď držená v proměnné se testuje tam, kde se nastavuje, a její prázdnota se nese jako „neznámé“, jménem, až k tomu, co tiskne nebo rozhoduje — nikdy jako nula, žádné nebo čisté.
  • Běh, který nemohl číst, nic nezapisuje: žádný úkol se nevytvoří, neupraví, neuzavře ani znovu neotevře ze seznamu, který nebyl získán, a zámek vzatý pro běh se uvolní.

Chování při selhání

scripts/ci/shell-lint přečte každý sledovaný shellový skript pomocí scripts/lib/swallowed-listings.awk a selže s uvedením souboru a řádku na příkaz, který se ptá gh nebo curl, zapíše odpověď do souboru a končí v || true nebo || :. Skener se nejdřív spustí nad scripts/lib/swallowed-listings.fixture, v němž je odpověď zapsána, takže skener, který tvar přestal nacházet, nemůže vydávat za čistý strom. Baseline neexistuje: strom žádnou nemá.

test/cases/894_github_sync_applies_only_the_trunk.sh pohání adaptér s gh, který postupně odmítne každý výpis, pro --check a pro --apply: návratový kód je 12, zpráva jmenuje výpis, nevytiskne se žádný řádek DRIFT, žádný zápis nedosáhne gh a zámek je pryč. Tentýž případ vloží zahozená selhání zpět do kopie adaptéru a vyžaduje, aby je skener pojmenoval.

Co nezachytí, řečeno místo naznačeno: sonda, jejíž odpověď jde do proměnné (x="$(gh ... || true)"), není hlášena, protože z řádku nelze poznat, zda je prázdná hodnota pak čtena jako „neznámé“; takových sond je devět a každou má číst přezkum. Výpis, který uspěje a je jen neúplný — stránka, kterou GitHub vynechal bez chyby — zde nezjistí nic.

Příbuzný tvar se také nehlásí: nástroj, který se nemohl spustit, a jeho návratový kód vrácený jako verdikt o vstupu — čtečka JSON za shimem verze bez nastavené verze, čtená jako „tento soubor se nedá parsovat“. Skener hledá odpověď vzdáleného systému uloženou v souboru, ne návratový kód použitý jako úsudek, a oprava tohoto tvaru spočívá v rozlišení „nemohlo se spustit“ od „spustilo se a odmítlo“ tam, kde se nástroj volá.

Ověření

scripts/ci/shell-lint
bash test/run.sh 894_github_sync_applies_only_the_trunk

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/a-failed-read-is-not-an-empty-answer.v1.md
identity
project.a-failed-read-is-not-an-empty-answer@1
dostupné také jako
Zdroj MCP majordomus://rule/project.a-failed-read-is-not-an-empty-answer@1 · majordomus entity show rule/project-a-failed-read-is-not-an-empty-answer-1 · GET /api/v1/entity?uri=majordomus://rule/project.a-failed-read-is-not-an-empty-answer@1
v Cockpitu
/cockpit/objects/rule/project-a-failed-read-is-not-an-empty-answer-1

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

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