# Task State Canon Migration

Date: 2026-05-25
Status: implementation source

## Canon Source

State Hub follows the task lifecycle defined by InfoTechCanon:

- `info-tech-canon/infospace/models/task/InfoTechCanonTaskModel.md`
- `info-tech-canon/seeds/InfoTechCanonTaskModel_RC1_seed.md`

The canon defines symbolic codes and lowercase stored values:

| Code | Stored value | Meaning |
|------|--------------|---------|
| `WAIT` | `wait` | Blocked, paused, or waiting on another actor, event, decision, input, or condition. |
| `TODO` | `todo` | Ready or planned work that is not actively being worked. |
| `PROG` | `progress` | Active work in focus. |
| `DONE` | `done` | Completed successfully. |
| `CNCL` | `cancel` | Stopped because the work is no longer relevant, wanted, or valid. |

State Hub stores lowercase values, not uppercase codes.

## State Hub Profile

State Hub task status is separate from workstream/workplan lifecycle status.
Workstream frontmatter continues to use:

```text
proposed, ready, active, blocked, backlog, finished, archived
```

Task status now uses:

```text
wait, todo, progress, done, cancel
```

Compatibility aliases accepted during the migration window:

| Legacy value | Canon value |
|--------------|-------------|
| `blocked` | `wait` |
| `waiting` | `wait` |
| `in_progress` | `progress` |
| `cancelled` | `cancel` |
| `canceled` | `cancel` |

`done` and `cancel` are terminal for normal planning and completion checks.
`cancel` is final. `done` can be reopened only by an explicit workflow/profile
rule and should not be treated as normal progress churn.

## Wait Versus Human Intervention

`wait` is broader than the old `blocked` task status. It can mean blocked,
paused, waiting on another actor, waiting on an event, waiting on input, or
waiting on a decision.

State Hub keeps these fields separate:

- `status=wait`: the task is not actively progressing;
- `blocking_reason`: explanatory text about the wait condition;
- `needs_human=true`: the wait requires direct human action;
- `intervention_note`: human-facing instruction or resolution note.

A task can be `wait` without `needs_human=true`. A human intervention is
represented by `needs_human=true`, not by status alone.

## Attached Repo Adaptation Brief

Repos attached to State Hub should update local agent instructions, workplan
examples, scripts, docs, dashboards, and tests if they mention State Hub task
statuses.

Migration map:

```text
blocked    -> wait
in_progress -> progress
cancelled  -> cancel
canceled   -> cancel
todo       -> todo
done       -> done
```

During the compatibility window, State Hub accepts legacy aliases in API and
workplan-file inputs, but writebacks prefer canonical values. Attached repos
should report completion by replying to their State Hub inbox message or by
closing the targeted `[repo:<slug>]` ecosystem task created for the adaptation.
