Done Belongs to the Task
Crucible owns a lifecycle record, not a universal definition of completion. A code repair may be done when tests pass and the served route shows the fix. A research packet may be done when sources are cited and the requested comparison is delivered. A phone call may be done when the call happened and a summary exists. One engine cannot replace those meanings with “commit present.”
This is why the landing summary is required while a commit is optional. Every task needs a compact statement of what changed, where the deliverable went, and what evidence was checked. Only some tasks naturally produce a repository commit. Treating Git as universal proof would make non-code work second class and encourage fake commits containing mere receipts.
The completion predicate travels with the task and is evaluated at its real destination. The workshop may enforce that the predicate was named and that evidence was recorded, but it should not invent domain tests after the fact. Doing so would quietly move product ownership into the engine.
There are two layers of done. The deliverable layer asks whether the requested result exists where it belongs. The record layer asks whether the execution, review, revisions, and proof were captured. Crucible can refuse to close the second layer. It must rely on the scoped task to define the first.
Two Green Lights
Write completion as two checks: destination proof and record proof. A task lands only when both are green. This prevents a beautifully documented failure from passing, and it prevents an undocumented success from disappearing into folklore. The checks are joined at landing but owned by different contracts.