I1405 — Pull request pojmenovává úkol, který realizuje, a hrana je odvozena, ne zapamatována
Odvodit vztah mezi úkolem a pull requesty, branchemi a commity, které jej realizovaly, z gitu a z GitHubu a umožnit jeho procházení oběma směry.
HOTOVO vlna 1 · p1 · profil implementation · běží samostatně
Cíl
Odvodit vztah mezi úkolem a pull requesty, branchemi a commity, které jej realizovaly, z gitu a z GitHubu a umožnit jeho procházení oběma směry.
Proč
Model sahá tak daleko jako větev: `worktree/state.rs` čte id úkolu z názvu větve a kontrola topologie to vynucuje. Nad větví není nic. Sloučený pull request nevede zpět ke kritériím přijetí, která splnil, a výsledek nevede dopředu ke kódu, který k němu došel, což je otázka, na kterou celý model existuje.
Aktuální stav
Důkazy nesou volitelný řetězec `commit` psaný ručně. Žádný kanonický záznam nejmenuje pull request, běh kontroly ani větev. `issue_of()` v apps/majordomus-cli/src/worktree/state.rs odvozuje úkol ze složky cesty větve a je jedinou hranou, která existuje.
Cílový stav
Z úkolu lze odvodit větve, commity a pull requesty, které ho realizovaly. Ze sloučeného commitu nebo pull requestu lze odvodit úkol a výsledek, kterému sloužil. Neukládá se nic, co git nebo GitHub už zná.
Rozsah
- apps/majordomus-cli/src/worktree
- apps/majordomus-cli/src/git
- apps/majordomus-cli/src/graph.rs
- scripts/github-sync
- test/cases
- dokumentace
Mimo rozsah
- Vyžadovat, aby větev kódovala id úkolu tam, kde to doktrína už nevyžaduje
- Ukládání seznamu commitů do kanonického záznamu; commity vlastní git
Závislosti
Co na tom čeká
Kritéria přijetí
- Pro dané id úkolu se vypíší branche, commity a pull requesty, které ho realizovaly, odvozené z gitu a GitHubu
- Pro daný commit nebo pull request se pojmenuje úkol a milník, kterým sloužil, nebo se uvede jako nepřiřazený
- Práce bez prováděcí smlouvy je hlášena jako nepřiřazená, ne tiše vynechána
- Odvození nečte žádnou uloženou hranu, kterou už drží git nebo GitHub
Validace
- cargo test --workspace --all-features
- bash test/run.sh
Požadované důkazy
- traceability_both_ways
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| traceability_both_ways | test | env -u MAJORDOMUS_SHARE bash test/run.sh 98_traceability | ok 98_traceability: nad skutečnými rámci MCP I0001 (sloučený merge commitem) uvádí svou větev, svůj merge commit a své dva commity; I0002 (otevřený) se měří proti trunku; I0003 (fast-forwardovaný) hlásí sám sebe jako pohlcený a nenárokuje si žádné commity trunku; I0004 (deklarovaný, nezačatý) nevede k ničemu a zůstává deklarovaný; I9999 odpovídá declared:false. Opačným směrem commit sloučené větve jmenuje I0001 a milník M0 a commit udělaný přímo na trunku je hlášen jako nepřiřazený s důvodem. Koše reportu dávají součet prozkoumaných commitů a commit pohlcené větve je v něm přítomen, ne vynechán. Pak scripts/traceability nad fixture pull requestů spojí PR #1 s I0001, odpoví na #2 pomocí I0002 a M0, ohlásí #3 (hlavní větev chore/tidy-up) jako nepřiřazený místo jeho zahození, sečte 3 přečtené / 2 přiřazené / 1 nepřiřazený a pod --strict skončí s 10 na commitu bez kontraktu. Nakonec: žádný kanonický záznam pod .ai/repo/project/ po běhu nejmenuje větev a git status je beze změny. | 990bd05 |
Riziko
Hrana commit–úkol odvozená z názvu větve je jen tak dobrá jako disciplína větví; unattributed musí být hlášený stav, ne předpoklad.
Časová osa
- zahájeno
- 2026-09-09T18:55:15Z
- ověřeno
- 2026-09-09T18:55:34Z
- dokončeno
- 2026-09-09T18:55:36Z
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Kanonický záznam: .ai/repo/project/issues/I1405.yaml. Přečtěte jej zpět pomocí majordomus plan show I1405.