Situace
Worker řekne, že je práce hotová. Kontrakt finish se už ptá, zda změna zůstala v rozsahu, zda proběhl ověřovací příkaz, zda záznam stále odpovídá větvi a zda je něco otevřené — samá fakta o pracovním stromu. Neptá se, zda testy, které proběhly, popisují kód, který nyní existuje.
Problém není v tom, že důkazy chybí. Je v tom, že důkaz, jakmile je zaznamenán, zůstává pravdivý. Test spuštěný před změnou nic neříká o stromu po ní a zpráva, která obojí pokládá za totéž, je důvod, proč „hotovo“ přestává cokoli znamenat.
Scénář
setup: task-owes
given:
- a repository with the layer installed and a task active
steps:
- id: owes-and-cannot-prove-it
run: ['finish', '--outcome', 'completed', '--note', 'done']
expect:
exit: 10
output: 'owed, and no evidence was recorded'
- id: honest-is-never-refused
run: ['check']
expect:
exit: 0
output: 'obligation'
- id: record-it
run: ['evidence', '--covers', 'tests', '--type', 'test', '--command', 'bash test/run.sh']
expect:
exit: 0
output: 'evidence: tests recorded'
- id: now-it-discharges
run: ['check']
expect:
exit: 0
output: 'discharged over inputs'
then:
- the obligation is discharged while the files it names are unchanged
- a change to any of those files makes the same evidence stale, and finish refuses again
- an outcome other than completed is never refused for owing somethingVýsledek
Úloha nemůže dosáhnout completed na základě tvrzení. Každý závazek, který deklarovala, je splněn zaznamenaným příkazem a splnění je vázáno na hash souborů, které závazek jmenuje, takže jejich změna důkaz odebere, a ne ponechá za sebou. To, co zpráva o práci říká, je pak fakt o repozitáři, ne tvrzení o workerovi.