Co to znamená
Odvození mohou zastavit dvě věci a ani jedna není tichá. Když je session.knowledge_on_end nebo session.knowledge_on_compact false, adaptér nic neodvodí a řekne to na stderr; účetní kniha ukazuje uzavřenou epizodu bez odvození a kontrola zastaveného zapisovače bere přepínač jako záměrný. Když deriver selže — adresář není zapisovatelný, politika se nedá parsovat — adaptér zapíše řádek provider.event.failed s důvodem, epizodu uzavře, jako by ji uzavřel tak či onak, a vrátí poskytovateli úspěch.
Princip
Koncový adaptér v lib/capture.sh čte stav a stderr uzavření: mj_session_close cestou do session.closed spouští deriver a selhání v něm se objeví jako poslední řádek výstupu uzavření, který adaptér předá mj_capture_session_failed s názvem události end. Adaptér kompakce volá deriver přímo a hlásí stejně s názvem události compact. Oba přepínače se čtou z politiky v okamžiku události pomocí mj_pol, přičemž chybějící znamená zapnuto, a session.knowledge_on_compact je nezávislý na checkpoint_on_compact: kompakce, která přeskočí svůj checkpoint, přesto odvozuje. Žádný hook nekončí nenulově, z téhož důvodu jako capture prompt.
Jak to vidět
sed -i.bak 's/knowledge_on_end: true/knowledge_on_end: false/' .ai/repo/policy.yaml
printf '{"session_id":"e1","reason":"other"}' | .claude/hooks/majordomus-session-end
# stderr: session.knowledge_on_end is false, so no knowledge is derived
mv .ai/repo/policy.yaml.bak .ai/repo/policy.yaml
chmod 0500 .ai/repo/knowledge/candidates
printf '{"session_id":"e2","reason":"other"}' | .claude/hooks/majordomus-session-end; echo "exit $?" # exit 0
majordomus history --event provider.event.failed # event end, reason names the knowledge derivation
chmod 0755 .ai/repo/knowledge/candidatesCo nepokrývá
Selhání uvnitř majordomus knowledge derive zadaného člověkem se hlásí jeho exit kódem a posledním řádkem, ne řádkem provider.event.failed: ta událost je potvrzení hooku poskytovatele a člověk u terminálu má exit kód. Přepínač majordomus knowledge derive ručně nevypíná.
Proč existuje
Adaptér, který přijme událost a odmítne podle ní jednat, zapíše řádek na stderr, který nikdo neuchovává, a vrátí 0, což hook poskytovatele musí. Poté je událost, která nikdy nenastala, a událost, která nastala a nic neudělala, stejným pozorováním. ADR 0052 zavedlo potvrzení selhané události pro kontrolní bod a předávku; .ai/repo/adrs/0091-knowledge-is-derived-at-the-episode-boundary-and-a-person-promotes-it.md je aplikuje na odvozování, takže odvozování, které se zastaví, je typovaný řádek, a ne ticho.