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.

Úkol jmenuje kritérium záměru, kterému slouží, a pokrytí každého kritéria se odvozuje z plánu

Úkol jmenuje kritérium záměru, kterému slouží, a pokrytí každého kritéria se odvozuje z plánu

majordomus://adr/adr-0073navrženo intentprojektplánování

odkazuje na

  • put_in_force apps/majordomus-cli/src/intent_plan.rs (soubor)
  • put_in_force apps/majordomus-cli/src/plan.rs (soubor)
  • put_in_force share/schemas/majordomus/issue/issue.v1.schema.json (soubor)
  • put_in_force adr-0070
  • put_in_force project.derived-once@1

odkazuje na něj

73. Úkol jmenuje kritérium záměru, kterému slouží, a pokrytí každého kritéria se odvozuje z plánu

Kontext

ADR 0070 činí ze záměru typovaný záznam: výrok, invarianty, milníky, které ho realizují, a kritéria uspokojení, z nichž každé jmenuje důkazy, které ho rozhodují. Dává záměr do vztahu k milníkům a k důkazům. Nedává kritérium do vztahu k práci, která ho má učinit pravdivým. Záměr tak může jmenovat milník, jehož úkoly řeší dvě ze čtyř kritérií, a nic neříká, že zbylá dvě nemají žádnou práci, dokud si někdo při ověřování nevšimne, že je nelze splnit.

Otázky, které si plánovač a recenzent kladou před provedením, tedy z repozitáře stále nelze zodpovědět: který úkol nese toto kritérium, proč tento úkol existuje, které kritérium nemá žádnou práci, který milník nepřispívá k záměru, který ho jmenuje, a které dva úkoly dělají totéž.

Rozhodnutí

Úkol může deklarovat serves: seznam odkazů <intent-id>#<criterion-id>. Odkaz se píše na úkolu, protože úkol je prováděcí smlouva a píše se po záměru; záměr své úkoly nevypisuje, takže přeplánování záměr nikdy neupravuje.

Spojení se odvozuje, nikdy neukládá, pomocí intent_plan::coverage nad jedním IntentOutline na záměr (jeho id, id kritérií, milníky a zda je vyřazen) a odvozeným Plan. Engine záměrů převádí vlastní záznam na osnovu, takže soubory záměrů se čtou jedním způsobem.

Záměr, který nikdo ještě neplánoval, není tatáž vada jako plán, který míjí kritérium: první je místo, kde začíná každý záměr. Záměr, jehož milníky nenesou žádný živý úkol, se hlásí jednou jako intent_not_planned, varování, a jeho kritéria se neodmítají jednotlivě pro nedostatek práce. Jakmile pod některým z jeho milníků sedí jakýkoli živý úkol, kritérium, které plán míjí, je selhání.

Pokrytí odmítá, jako selhání:

  • criterion_uncovered — žádný živý úkol neslouží kritériu živého záměru, který má práci;
  • issue_without_purpose — živý úkol pod milníkem, který záměr pojmenovává, nic neslouží;
  • serves_outside_milestone — úkol slouží kritériu záměru, který nejmenuje milník toho úkolu;
  • serves_unknown_intent, serves_unknown_criterion, malformed_serves — visící nebo poškozené odkazy.

Varuje na criterion_weakly_covered (každý sloužící úkol nevyžaduje žádné důkazy), milestone_contributes_nothing (pojmenovaný milník nenese žádné kritérium záměru), duplicate_work (dva živé úkoly slouží jednomu kritériu s překrývajícím se rozsahem) a duplicate_serves.

Úkol pod milníkem, který žádný intent nejmenuje, má původ maintenance. To je legitimní práce uvedená jako taková, nikdy nález a nikdy se jí nepřidělí vymyšlený intent. Zrušený nebo nahrazený intent nedluží žádné pokrytí.

Plánování vychází ze dvou typovaných záznamů, které worker zapíše a Majordomus ověří, nikdy z promptu. Majordomus o mezeře ani o plánu neuvažuje; to dělá člověk nebo model, a to, co zjistil, se stane něčím, co lze odmítnout:

  • mezera (.ai/repo/project/gaps/<intent>.yaml, majordomus.gap/v1) zaznamenává na commitu observed_at pozorování s jejich zdrojem a jednu podmínku na kritérium — satisfied, missing, conflicting nebo unknown — s pozorováními, která za ní stojí, plus rizika a navrhovanou práci. Mezera, která nechá kritérium bez odpovědi, odpoví na kritérium, které intent nedeklaruje, nebo tvrdí stav bez pozorování, je odmítnuta; unknown je povoleno a nikdy se nečte jako splněno. Kritérium pozorované jako satisfied s deklarovanými pozorováními nežádá žádnou plánovanou práci (síla pokrytí observed); zda je splněno, zůstává otázkou důkazů (ADR 0070).
  • kritika (.ai/repo/project/critiques/<intent>.yaml, majordomus.critique/v1) zaznamenává adversariální průchod plánem: nálezy zařazené podle položené otázky (missed_requirement, unproven_assumption, insufficient_work, unnecessary_work, regression_risk, surface_missing, delivery_verification), každý blocking nebo ne, a vyřešený open, planned do stávajícího úkolu, který záměru slouží, nebo rejected s důvodem. Úkol sloužící záměru, který je ACTIVE, VERIFY nebo DONE, zatímco záměr nemá kritiku (executing_without_critique) nebo má otevřený blokující nález (executing_with_open_blocker), se odmítne; plánovaná práce dosud bez kritiky je varování.

Plán nese serves jen jako data. Nepřidává žádné vlastní zjištění, takže dva enginy plánu (lib/project.awk a plan.rs, držené shodné případem 99) se v tom, co odvozují, nemění.

Zamítnuté alternativy

Záměr vypisuje úkoly podle kritéria. Každé přeplánování by upravovalo záměr a ten by se stal druhým indexem plánu.

Pokrytí uvnitř plan validate. Plán by musel číst záměry a awk engine by potřeboval druhou implementaci joinu, který na každém povrchu zvládne obsloužit jen Rust engine.

Nepokrytá kritéria jako varování. Kritérium, které nic nenaplní, je vada, již toto má zachytit před provedením; varování se čte až po dokončení práce. Jediné ponechané varování, intent_not_planned, se týká záměru bez jakéhokoli plánu, který by žádné selhání nemohlo popsat, aniž by odmítlo každý nově deklarovaný záměr.

Důsledky

  • Až druh záměru přistane (ADR 0070), intent validate hlásí tyto nálezy vedle svých vlastních a gate intent-check odmítne nepokryté kritérium.
  • Záměr deklarovaný dřív, než jsou napsány jeho úkoly, se čte jako intent_not_planned, dokud nejsou; deklarace záměru a úkolů, které mu slouží, v jedné změně to odstraní.
  • Nic negeneruje plán z mezery. Pracovník promění navrženou práci v úkoly, které serves kritéria, a zaznamená work[].issue; validace odmítne odkaz, který neplatí. Automatické odvozování zůstává mimo rozsah, protože Majordomus o mezeře ani plánu neuvažuje (rozhodnutí výše); ADR 0070 to žádným směrem nerozhoduje.
  • Zastaralost mezery vůči pozdějším commitům se zde neposuzuje: observed_at je zaznamenáno, aby je pozdější řez mohl porovnat s cestami, na které odkazují kritéria záměru.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0073-an-issue-names-the-intent-criterion-it-serves-and-coverage-is-derived.md
identity
adr-0073
dostupné také jako
Zdroj MCP majordomus://adr/adr-0073 · majordomus entity show adr/adr-0073 · GET /api/v1/entity?uri=majordomus://adr/adr-0073
v Cockpitu
/cockpit/objects/adr/adr-0073

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.