diff --git a/.yoi/tickets/closed/20260527-000001-auto-maintain-workflow/artifacts/.gitkeep b/.yoi/tickets/20260527-000001-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000001-auto-maintain-workflow/artifacts/.gitkeep rename to .yoi/tickets/20260527-000001-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000001-auto-maintain-workflow/item.md b/.yoi/tickets/20260527-000001-001/item.md similarity index 95% rename from .yoi/tickets/closed/20260527-000001-auto-maintain-workflow/item.md rename to .yoi/tickets/20260527-000001-001/item.md index 971cbee4..b10535d5 100644 --- a/.yoi/tickets/closed/20260527-000001-auto-maintain-workflow/item.md +++ b/.yoi/tickets/20260527-000001-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000001-auto-maintain-workflow -slug: auto-maintain-workflow -title: 半自動開発運用 Workflow -status: closed -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:01Z -updated_at: 2026-06-05T15:56:29Z -assignee: null +title: "半自動開発運用 Workflow" +state: "closed" +created_at: "2026-05-27T00:00:01Z" +updated_at: "2026-06-05T15:56:29Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000001-auto-maintain-workflow/resolution.md b/.yoi/tickets/20260527-000001-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000001-auto-maintain-workflow/resolution.md rename to .yoi/tickets/20260527-000001-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000001-auto-maintain-workflow/thread.md b/.yoi/tickets/20260527-000001-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000001-auto-maintain-workflow/thread.md rename to .yoi/tickets/20260527-000001-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000004-manual-turn-rollback/artifacts/.gitkeep b/.yoi/tickets/20260527-000002-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000004-manual-turn-rollback/artifacts/.gitkeep rename to .yoi/tickets/20260527-000002-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260527-000002-e2e-harness/item.md b/.yoi/tickets/20260527-000002-001/item.md similarity index 96% rename from .yoi/tickets/open/20260527-000002-e2e-harness/item.md rename to .yoi/tickets/20260527-000002-001/item.md index 8432ffff..8c911ce5 100644 --- a/.yoi/tickets/open/20260527-000002-e2e-harness/item.md +++ b/.yoi/tickets/20260527-000002-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260527-000002-e2e-harness -slug: e2e-harness -title: E2E テストハーネス -status: open -kind: task -priority: P2 -labels: [migrated] -workflow_state: planning -created_at: 2026-05-27T00:00:02Z -updated_at: 2026-05-27T00:00:02Z -assignee: null +title: "E2E テストハーネス" +state: "planning" +created_at: "2026-05-27T00:00:02Z" +updated_at: "2026-05-27T00:00:02Z" --- ## Migration reference diff --git a/.yoi/tickets/open/20260527-000002-e2e-harness/thread.md b/.yoi/tickets/20260527-000002-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260527-000002-e2e-harness/thread.md rename to .yoi/tickets/20260527-000002-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000005-memory-tool-guidance-prompt/artifacts/.gitkeep b/.yoi/tickets/20260527-000003-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000005-memory-tool-guidance-prompt/artifacts/.gitkeep rename to .yoi/tickets/20260527-000003-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260527-000003-internal-worker-workflow/item.md b/.yoi/tickets/20260527-000003-001/item.md similarity index 94% rename from .yoi/tickets/open/20260527-000003-internal-worker-workflow/item.md rename to .yoi/tickets/20260527-000003-001/item.md index 7eefc49c..56af3a0d 100644 --- a/.yoi/tickets/open/20260527-000003-internal-worker-workflow/item.md +++ b/.yoi/tickets/20260527-000003-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260527-000003-internal-worker-workflow -slug: internal-worker-workflow -title: 内部 Worker / 内部 Pod の Workflow 化 -status: open -kind: task -priority: P2 -labels: [migrated] -workflow_state: planning -created_at: 2026-05-27T00:00:03Z -updated_at: 2026-05-27T00:00:03Z -assignee: null +title: "内部 Worker / 内部 Pod の Workflow 化" +state: "planning" +created_at: "2026-05-27T00:00:03Z" +updated_at: "2026-05-27T00:00:03Z" --- ## Migration reference diff --git a/.yoi/tickets/open/20260527-000003-internal-worker-workflow/thread.md b/.yoi/tickets/20260527-000003-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260527-000003-internal-worker-workflow/thread.md rename to .yoi/tickets/20260527-000003-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000007-pod-inbound-pod-event-dedup/artifacts/.gitkeep b/.yoi/tickets/20260527-000004-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000007-pod-inbound-pod-event-dedup/artifacts/.gitkeep rename to .yoi/tickets/20260527-000004-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000004-manual-turn-rollback/item.md b/.yoi/tickets/20260527-000004-001/item.md similarity index 96% rename from .yoi/tickets/closed/20260527-000004-manual-turn-rollback/item.md rename to .yoi/tickets/20260527-000004-001/item.md index 668bb205..49abe5ad 100644 --- a/.yoi/tickets/closed/20260527-000004-manual-turn-rollback/item.md +++ b/.yoi/tickets/20260527-000004-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000004-manual-turn-rollback -slug: manual-turn-rollback -title: 'Pod/TUI: 手動 rewind 導線' -status: closed -kind: task -priority: P2 -labels: [tui, pod, ux] -created_at: 2026-05-27T00:00:04Z -updated_at: 2026-05-29T03:09:22Z -assignee: null +title: "Pod/TUI: 手動 rewind 導線" +state: "closed" +created_at: "2026-05-27T00:00:04Z" +updated_at: "2026-05-29T03:09:22Z" --- ## Background diff --git a/.yoi/tickets/closed/20260527-000004-manual-turn-rollback/resolution.md b/.yoi/tickets/20260527-000004-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000004-manual-turn-rollback/resolution.md rename to .yoi/tickets/20260527-000004-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000004-manual-turn-rollback/thread.md b/.yoi/tickets/20260527-000004-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000004-manual-turn-rollback/thread.md rename to .yoi/tickets/20260527-000004-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000008-pod-scope-persistence-authority/artifacts/.gitkeep b/.yoi/tickets/20260527-000005-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000008-pod-scope-persistence-authority/artifacts/.gitkeep rename to .yoi/tickets/20260527-000005-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000005-memory-tool-guidance-prompt/item.md b/.yoi/tickets/20260527-000005-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260527-000005-memory-tool-guidance-prompt/item.md rename to .yoi/tickets/20260527-000005-001/item.md index 94824a8d..008fb1fd 100644 --- a/.yoi/tickets/closed/20260527-000005-memory-tool-guidance-prompt/item.md +++ b/.yoi/tickets/20260527-000005-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000005-memory-tool-guidance-prompt -slug: memory-tool-guidance-prompt -title: 'プロンプト: memory / knowledge tool 利用タイミングのガイダンス' -status: closed -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:05Z -updated_at: 2026-05-28T23:59:06Z -assignee: null +title: "プロンプト: memory / knowledge tool 利用タイミングのガイダンス" +state: "closed" +created_at: "2026-05-27T00:00:05Z" +updated_at: "2026-05-28T23:59:06Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000005-memory-tool-guidance-prompt/resolution.md b/.yoi/tickets/20260527-000005-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000005-memory-tool-guidance-prompt/resolution.md rename to .yoi/tickets/20260527-000005-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000005-memory-tool-guidance-prompt/thread.md b/.yoi/tickets/20260527-000005-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000005-memory-tool-guidance-prompt/thread.md rename to .yoi/tickets/20260527-000005-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000011-session-todo-reminder/artifacts/.gitkeep b/.yoi/tickets/20260527-000006-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000011-session-todo-reminder/artifacts/.gitkeep rename to .yoi/tickets/20260527-000006-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260527-000006-permission-default-policy/item.md b/.yoi/tickets/20260527-000006-001/item.md similarity index 89% rename from .yoi/tickets/open/20260527-000006-permission-default-policy/item.md rename to .yoi/tickets/20260527-000006-001/item.md index ce8b53b7..9efcc873 100644 --- a/.yoi/tickets/open/20260527-000006-permission-default-policy/item.md +++ b/.yoi/tickets/20260527-000006-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260527-000006-permission-default-policy -slug: permission-default-policy -title: 'Permission: allow-all 既定 policy への整理' -status: open -kind: task -priority: P2 -labels: [migrated] -workflow_state: planning -created_at: 2026-05-27T00:00:06Z -updated_at: 2026-05-27T00:00:06Z -assignee: null +title: "Permission: allow-all 既定 policy への整理" +state: "planning" +created_at: "2026-05-27T00:00:06Z" +updated_at: "2026-05-27T00:00:06Z" --- ## Migration reference diff --git a/.yoi/tickets/open/20260527-000006-permission-default-policy/thread.md b/.yoi/tickets/20260527-000006-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260527-000006-permission-default-policy/thread.md rename to .yoi/tickets/20260527-000006-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000012-spawnpod-initial-run-confirmation/artifacts/.gitkeep b/.yoi/tickets/20260527-000007-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000012-spawnpod-initial-run-confirmation/artifacts/.gitkeep rename to .yoi/tickets/20260527-000007-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000007-pod-inbound-pod-event-dedup/item.md b/.yoi/tickets/20260527-000007-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260527-000007-pod-inbound-pod-event-dedup/item.md rename to .yoi/tickets/20260527-000007-001/item.md index e6716475..5027e641 100644 --- a/.yoi/tickets/closed/20260527-000007-pod-inbound-pod-event-dedup/item.md +++ b/.yoi/tickets/20260527-000007-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000007-pod-inbound-pod-event-dedup -slug: pod-inbound-pod-event-dedup -title: Inbound PodEvent ハンドリングの重複を統合する -status: closed -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:07Z -updated_at: 2026-05-30T05:37:00Z -assignee: null +title: "Inbound PodEvent ハンドリングの重複を統合する" +state: "closed" +created_at: "2026-05-27T00:00:07Z" +updated_at: "2026-05-30T05:37:00Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000007-pod-inbound-pod-event-dedup/resolution.md b/.yoi/tickets/20260527-000007-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000007-pod-inbound-pod-event-dedup/resolution.md rename to .yoi/tickets/20260527-000007-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000007-pod-inbound-pod-event-dedup/thread.md b/.yoi/tickets/20260527-000007-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000007-pod-inbound-pod-event-dedup/thread.md rename to .yoi/tickets/20260527-000007-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000013-tickets-sh-workitem-thread-mvp/artifacts/.gitkeep b/.yoi/tickets/20260527-000008-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000013-tickets-sh-workitem-thread-mvp/artifacts/.gitkeep rename to .yoi/tickets/20260527-000008-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000008-pod-scope-persistence-authority/item.md b/.yoi/tickets/20260527-000008-001/item.md similarity index 94% rename from .yoi/tickets/closed/20260527-000008-pod-scope-persistence-authority/item.md rename to .yoi/tickets/20260527-000008-001/item.md index d5b9d051..e2502e78 100644 --- a/.yoi/tickets/closed/20260527-000008-pod-scope-persistence-authority/item.md +++ b/.yoi/tickets/20260527-000008-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000008-pod-scope-persistence-authority -slug: pod-scope-persistence-authority -title: 'Pod: scope 永続化 authority の整理' -status: closed -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:08Z -updated_at: 2026-05-30T05:57:16Z -assignee: null +title: "Pod: scope 永続化 authority の整理" +state: "closed" +created_at: "2026-05-27T00:00:08Z" +updated_at: "2026-05-30T05:57:16Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000008-pod-scope-persistence-authority/resolution.md b/.yoi/tickets/20260527-000008-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000008-pod-scope-persistence-authority/resolution.md rename to .yoi/tickets/20260527-000008-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000008-pod-scope-persistence-authority/thread.md b/.yoi/tickets/20260527-000008-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000008-pod-scope-persistence-authority/thread.md rename to .yoi/tickets/20260527-000008-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000014-tui-actionbar-transient-notice-api/artifacts/.gitkeep b/.yoi/tickets/20260527-000009-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000014-tui-actionbar-transient-notice-api/artifacts/.gitkeep rename to .yoi/tickets/20260527-000009-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260527-000009-pod-session-fork/item.md b/.yoi/tickets/20260527-000009-001/item.md similarity index 92% rename from .yoi/tickets/open/20260527-000009-pod-session-fork/item.md rename to .yoi/tickets/20260527-000009-001/item.md index 5bdbcc1e..047d7b3f 100644 --- a/.yoi/tickets/open/20260527-000009-pod-session-fork/item.md +++ b/.yoi/tickets/20260527-000009-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260527-000009-pod-session-fork -slug: pod-session-fork -title: 'Pod: 任意ターンからの Fork(複数ターン巻き戻し)' -status: open -kind: task -priority: P2 -labels: [migrated] -workflow_state: planning -created_at: 2026-05-27T00:00:09Z -updated_at: 2026-05-27T00:00:09Z -assignee: null +title: "Pod: 任意ターンからの Fork(複数ターン巻き戻し)" +state: "planning" +created_at: "2026-05-27T00:00:09Z" +updated_at: "2026-05-27T00:00:09Z" --- ## Migration reference diff --git a/.yoi/tickets/open/20260527-000009-pod-session-fork/thread.md b/.yoi/tickets/20260527-000009-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260527-000009-pod-session-fork/thread.md rename to .yoi/tickets/20260527-000009-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000016-tui-picker-live-pending-pods/artifacts/.gitkeep b/.yoi/tickets/20260527-000010-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000016-tui-picker-live-pending-pods/artifacts/.gitkeep rename to .yoi/tickets/20260527-000010-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260527-000010-prompt-eval-metrics/item.md b/.yoi/tickets/20260527-000010-001/item.md similarity index 96% rename from .yoi/tickets/open/20260527-000010-prompt-eval-metrics/item.md rename to .yoi/tickets/20260527-000010-001/item.md index a0669c3a..45794e27 100644 --- a/.yoi/tickets/open/20260527-000010-prompt-eval-metrics/item.md +++ b/.yoi/tickets/20260527-000010-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260527-000010-prompt-eval-metrics -slug: prompt-eval-metrics -title: Prompt / Workflow 評価メトリクスと改善 Offer -status: open -kind: task -priority: P2 -labels: [migrated] -workflow_state: planning -created_at: 2026-05-27T00:00:10Z -updated_at: 2026-05-27T00:00:10Z -assignee: null +title: "Prompt / Workflow 評価メトリクスと改善 Offer" +state: "planning" +created_at: "2026-05-27T00:00:10Z" +updated_at: "2026-05-27T00:00:10Z" --- ## Migration reference diff --git a/.yoi/tickets/open/20260527-000010-prompt-eval-metrics/thread.md b/.yoi/tickets/20260527-000010-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260527-000010-prompt-eval-metrics/thread.md rename to .yoi/tickets/20260527-000010-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000017-tui-spawned-pod-panel/artifacts/.gitkeep b/.yoi/tickets/20260527-000011-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000017-tui-spawned-pod-panel/artifacts/.gitkeep rename to .yoi/tickets/20260527-000011-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000011-session-todo-reminder/item.md b/.yoi/tickets/20260527-000011-001/item.md similarity index 95% rename from .yoi/tickets/closed/20260527-000011-session-todo-reminder/item.md rename to .yoi/tickets/20260527-000011-001/item.md index 12286ad9..3a81d970 100644 --- a/.yoi/tickets/closed/20260527-000011-session-todo-reminder/item.md +++ b/.yoi/tickets/20260527-000011-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000011-session-todo-reminder -slug: session-todo-reminder -title: セッション内 Task ツールの注意機構 -status: closed -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:11Z -updated_at: 2026-05-29T04:31:10Z -assignee: null +title: "セッション内 Task ツールの注意機構" +state: "closed" +created_at: "2026-05-27T00:00:11Z" +updated_at: "2026-05-29T04:31:10Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000011-session-todo-reminder/resolution.md b/.yoi/tickets/20260527-000011-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000011-session-todo-reminder/resolution.md rename to .yoi/tickets/20260527-000011-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000011-session-todo-reminder/thread.md b/.yoi/tickets/20260527-000011-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000011-session-todo-reminder/thread.md rename to .yoi/tickets/20260527-000011-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000019-workspace-memory-lint-cli/artifacts/.gitkeep b/.yoi/tickets/20260527-000012-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000019-workspace-memory-lint-cli/artifacts/.gitkeep rename to .yoi/tickets/20260527-000012-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000012-spawnpod-initial-run-confirmation/item.md b/.yoi/tickets/20260527-000012-001/item.md similarity index 94% rename from .yoi/tickets/closed/20260527-000012-spawnpod-initial-run-confirmation/item.md rename to .yoi/tickets/20260527-000012-001/item.md index f79f00b6..7b51dcea 100644 --- a/.yoi/tickets/closed/20260527-000012-spawnpod-initial-run-confirmation/item.md +++ b/.yoi/tickets/20260527-000012-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000012-spawnpod-initial-run-confirmation -slug: spawnpod-initial-run-confirmation -title: 'SpawnPod: initial Run delivery confirmation' -status: closed -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:12Z -updated_at: 2026-05-28T13:24:48Z -assignee: null +title: "SpawnPod: initial Run delivery confirmation" +state: "closed" +created_at: "2026-05-27T00:00:12Z" +updated_at: "2026-05-28T13:24:48Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000012-spawnpod-initial-run-confirmation/resolution.md b/.yoi/tickets/20260527-000012-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000012-spawnpod-initial-run-confirmation/resolution.md rename to .yoi/tickets/20260527-000012-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000012-spawnpod-initial-run-confirmation/thread.md b/.yoi/tickets/20260527-000012-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000012-spawnpod-initial-run-confirmation/thread.md rename to .yoi/tickets/20260527-000012-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000020-system-reminder-injection-generalization/artifacts/.gitkeep b/.yoi/tickets/20260527-000013-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000020-system-reminder-injection-generalization/artifacts/.gitkeep rename to .yoi/tickets/20260527-000013-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000013-tickets-sh-workitem-thread-mvp/item.md b/.yoi/tickets/20260527-000013-001/item.md similarity index 96% rename from .yoi/tickets/closed/20260527-000013-tickets-sh-workitem-thread-mvp/item.md rename to .yoi/tickets/20260527-000013-001/item.md index a9e7f084..2db7172f 100644 --- a/.yoi/tickets/closed/20260527-000013-tickets-sh-workitem-thread-mvp/item.md +++ b/.yoi/tickets/20260527-000013-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000013-tickets-sh-workitem-thread-mvp -slug: tickets-sh-workitem-thread-mvp -title: 'Ticket 管理: tickets.sh による WorkItem / Thread MVP' -status: closed -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:13Z -updated_at: 2026-05-27T19:28:41Z -assignee: null +title: "Ticket 管理: tickets.sh による WorkItem / Thread MVP" +state: "closed" +created_at: "2026-05-27T00:00:13Z" +updated_at: "2026-05-27T19:28:41Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000013-tickets-sh-workitem-thread-mvp/resolution.md b/.yoi/tickets/20260527-000013-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000013-tickets-sh-workitem-thread-mvp/resolution.md rename to .yoi/tickets/20260527-000013-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000013-tickets-sh-workitem-thread-mvp/thread.md b/.yoi/tickets/20260527-000013-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000013-tickets-sh-workitem-thread-mvp/thread.md rename to .yoi/tickets/20260527-000013-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000021-bash-tool-editing-guidance/artifacts/.gitkeep b/.yoi/tickets/20260527-000014-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000021-bash-tool-editing-guidance/artifacts/.gitkeep rename to .yoi/tickets/20260527-000014-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000014-tui-actionbar-transient-notice-api/item.md b/.yoi/tickets/20260527-000014-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260527-000014-tui-actionbar-transient-notice-api/item.md rename to .yoi/tickets/20260527-000014-001/item.md index ec74bb6d..f8badec2 100644 --- a/.yoi/tickets/closed/20260527-000014-tui-actionbar-transient-notice-api/item.md +++ b/.yoi/tickets/20260527-000014-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000014-tui-actionbar-transient-notice-api -slug: tui-actionbar-transient-notice-api -title: 'TUI: actionbar transient notice API' -status: closed -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:14Z -updated_at: 2026-05-29T03:57:35Z -assignee: null +title: "TUI: actionbar transient notice API" +state: "closed" +created_at: "2026-05-27T00:00:14Z" +updated_at: "2026-05-29T03:57:35Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000014-tui-actionbar-transient-notice-api/resolution.md b/.yoi/tickets/20260527-000014-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000014-tui-actionbar-transient-notice-api/resolution.md rename to .yoi/tickets/20260527-000014-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000014-tui-actionbar-transient-notice-api/thread.md b/.yoi/tickets/20260527-000014-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000014-tui-actionbar-transient-notice-api/thread.md rename to .yoi/tickets/20260527-000014-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000022-manifest-profiles/artifacts/.gitkeep b/.yoi/tickets/20260527-000015-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000022-manifest-profiles/artifacts/.gitkeep rename to .yoi/tickets/20260527-000015-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260527-000015-tui-navigation-mode-design/item.md b/.yoi/tickets/20260527-000015-001/item.md similarity index 91% rename from .yoi/tickets/open/20260527-000015-tui-navigation-mode-design/item.md rename to .yoi/tickets/20260527-000015-001/item.md index 1ec8fa05..a55c6c89 100644 --- a/.yoi/tickets/open/20260527-000015-tui-navigation-mode-design/item.md +++ b/.yoi/tickets/20260527-000015-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260527-000015-tui-navigation-mode-design -slug: tui-navigation-mode-design -title: 'TUI: navigation mode / block focus の設計' -status: open -kind: task -priority: P2 -labels: [migrated] -workflow_state: planning -created_at: 2026-05-27T00:00:15Z -updated_at: 2026-05-27T00:00:15Z -assignee: null +title: "TUI: navigation mode / block focus の設計" +state: "planning" +created_at: "2026-05-27T00:00:15Z" +updated_at: "2026-05-27T00:00:15Z" --- ## Migration reference diff --git a/.yoi/tickets/open/20260527-000015-tui-navigation-mode-design/thread.md b/.yoi/tickets/20260527-000015-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260527-000015-tui-navigation-mode-design/thread.md rename to .yoi/tickets/20260527-000015-001/thread.md diff --git a/.yoi/tickets/closed/20260527-000023-multi-pod-view-ui/artifacts/.gitkeep b/.yoi/tickets/20260527-000016-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-000023-multi-pod-view-ui/artifacts/.gitkeep rename to .yoi/tickets/20260527-000016-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000016-tui-picker-live-pending-pods/item.md b/.yoi/tickets/20260527-000016-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260527-000016-tui-picker-live-pending-pods/item.md rename to .yoi/tickets/20260527-000016-001/item.md index 13781452..4768dd20 100644 --- a/.yoi/tickets/closed/20260527-000016-tui-picker-live-pending-pods/item.md +++ b/.yoi/tickets/20260527-000016-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000016-tui-picker-live-pending-pods -slug: tui-picker-live-pending-pods -title: 'TUI picker: live pending Pod の表示優先と状態補完' -status: closed -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:16Z -updated_at: 2026-05-30T05:00:56Z -assignee: null +title: "TUI picker: live pending Pod の表示優先と状態補完" +state: "closed" +created_at: "2026-05-27T00:00:16Z" +updated_at: "2026-05-30T05:00:56Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000016-tui-picker-live-pending-pods/resolution.md b/.yoi/tickets/20260527-000016-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000016-tui-picker-live-pending-pods/resolution.md rename to .yoi/tickets/20260527-000016-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000016-tui-picker-live-pending-pods/thread.md b/.yoi/tickets/20260527-000016-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000016-tui-picker-live-pending-pods/thread.md rename to .yoi/tickets/20260527-000016-001/thread.md diff --git a/.yoi/tickets/closed/20260527-194421-pod-orchestration-system-guidance/artifacts/.gitkeep b/.yoi/tickets/20260527-000017-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-194421-pod-orchestration-system-guidance/artifacts/.gitkeep rename to .yoi/tickets/20260527-000017-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000017-tui-spawned-pod-panel/item.md b/.yoi/tickets/20260527-000017-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260527-000017-tui-spawned-pod-panel/item.md rename to .yoi/tickets/20260527-000017-001/item.md index 3a726b32..d5c8ac17 100644 --- a/.yoi/tickets/closed/20260527-000017-tui-spawned-pod-panel/item.md +++ b/.yoi/tickets/20260527-000017-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260527-000017-tui-spawned-pod-panel -slug: tui-spawned-pod-panel -title: 'TUI: spawned child Pod の一覧と一時 attach' -status: closed -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:17Z -updated_at: 2026-06-07T03:14:39Z -assignee: null -workflow_state: done +title: "TUI: spawned child Pod の一覧と一時 attach" +state: "closed" +created_at: "2026-05-27T00:00:17Z" +updated_at: "2026-06-07T03:14:39Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000017-tui-spawned-pod-panel/resolution.md b/.yoi/tickets/20260527-000017-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000017-tui-spawned-pod-panel/resolution.md rename to .yoi/tickets/20260527-000017-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000017-tui-spawned-pod-panel/thread.md b/.yoi/tickets/20260527-000017-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000017-tui-spawned-pod-panel/thread.md rename to .yoi/tickets/20260527-000017-001/thread.md diff --git a/.yoi/tickets/closed/20260527-201313-openai-responses-unhandled-sse-observability/artifacts/.gitkeep b/.yoi/tickets/20260527-000018-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260527-201313-openai-responses-unhandled-sse-observability/artifacts/.gitkeep rename to .yoi/tickets/20260527-000018-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260527-000018-tui-user-model-setup/item.md b/.yoi/tickets/20260527-000018-001/item.md similarity index 94% rename from .yoi/tickets/open/20260527-000018-tui-user-model-setup/item.md rename to .yoi/tickets/20260527-000018-001/item.md index 82017ecc..6db94656 100644 --- a/.yoi/tickets/open/20260527-000018-tui-user-model-setup/item.md +++ b/.yoi/tickets/20260527-000018-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260527-000018-tui-user-model-setup -slug: tui-user-model-setup -title: 'TUI: ユーザーマニフェストのモデル設定 wizard' -status: open -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:18Z -updated_at: '2026-06-08T07:29:10Z' -assignee: null -workflow_state: 'ready' +title: "TUI: ユーザーマニフェストのモデル設定 wizard" +state: "ready" +created_at: "2026-05-27T00:00:18Z" +updated_at: "2026-06-08T07:29:10Z" --- ## Migration reference diff --git a/.yoi/tickets/open/20260527-000018-tui-user-model-setup/thread.md b/.yoi/tickets/20260527-000018-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260527-000018-tui-user-model-setup/thread.md rename to .yoi/tickets/20260527-000018-001/thread.md diff --git a/.yoi/tickets/closed/20260528-001748-compact-session-log-exploration/artifacts/.gitkeep b/.yoi/tickets/20260527-000019-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260528-001748-compact-session-log-exploration/artifacts/.gitkeep rename to .yoi/tickets/20260527-000019-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000019-workspace-memory-lint-cli/item.md b/.yoi/tickets/20260527-000019-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260527-000019-workspace-memory-lint-cli/item.md rename to .yoi/tickets/20260527-000019-001/item.md index 5b68fb2e..9176f284 100644 --- a/.yoi/tickets/closed/20260527-000019-workspace-memory-lint-cli/item.md +++ b/.yoi/tickets/20260527-000019-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000019-workspace-memory-lint-cli -slug: workspace-memory-lint-cli -title: ワークスペースのメモリーをLintするヘッドレスCLI -status: closed -kind: task -priority: P2 -labels: [migrated, memory, cli] -created_at: 2026-05-27T00:00:19Z -updated_at: 2026-05-31T02:15:17Z -assignee: null +title: "ワークスペースのメモリーをLintするヘッドレスCLI" +state: "closed" +created_at: "2026-05-27T00:00:19Z" +updated_at: "2026-05-31T02:15:17Z" --- ## Background diff --git a/.yoi/tickets/closed/20260527-000019-workspace-memory-lint-cli/resolution.md b/.yoi/tickets/20260527-000019-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000019-workspace-memory-lint-cli/resolution.md rename to .yoi/tickets/20260527-000019-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000019-workspace-memory-lint-cli/thread.md b/.yoi/tickets/20260527-000019-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000019-workspace-memory-lint-cli/thread.md rename to .yoi/tickets/20260527-000019-001/thread.md diff --git a/.yoi/tickets/closed/20260528-141602-tui-pod-list-view-abstraction/artifacts/.gitkeep b/.yoi/tickets/20260527-000020-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260528-141602-tui-pod-list-view-abstraction/artifacts/.gitkeep rename to .yoi/tickets/20260527-000020-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000020-system-reminder-injection-generalization/item.md b/.yoi/tickets/20260527-000020-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260527-000020-system-reminder-injection-generalization/item.md rename to .yoi/tickets/20260527-000020-001/item.md index 5386cca1..94d95e94 100644 --- a/.yoi/tickets/closed/20260527-000020-system-reminder-injection-generalization/item.md +++ b/.yoi/tickets/20260527-000020-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000020-system-reminder-injection-generalization -slug: system-reminder-injection-generalization -title: Generalize system-reminder history append lane -status: closed -kind: task -priority: P2 -labels: [pod, llm-worker, history, system-reminder] -created_at: 2026-05-27T00:00:20Z -updated_at: 2026-05-29T05:05:43Z -assignee: null +title: "Generalize system-reminder history append lane" +state: "closed" +created_at: "2026-05-27T00:00:20Z" +updated_at: "2026-05-29T05:05:43Z" --- ## Background diff --git a/.yoi/tickets/closed/20260527-000020-system-reminder-injection-generalization/resolution.md b/.yoi/tickets/20260527-000020-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000020-system-reminder-injection-generalization/resolution.md rename to .yoi/tickets/20260527-000020-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000020-system-reminder-injection-generalization/thread.md b/.yoi/tickets/20260527-000020-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000020-system-reminder-injection-generalization/thread.md rename to .yoi/tickets/20260527-000020-001/thread.md diff --git a/.yoi/tickets/closed/20260528-152959-nix-packaging/artifacts/.gitkeep b/.yoi/tickets/20260527-000021-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260528-152959-nix-packaging/artifacts/.gitkeep rename to .yoi/tickets/20260527-000021-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000021-bash-tool-editing-guidance/item.md b/.yoi/tickets/20260527-000021-001/item.md similarity index 57% rename from .yoi/tickets/closed/20260527-000021-bash-tool-editing-guidance/item.md rename to .yoi/tickets/20260527-000021-001/item.md index 818f518e..6e808207 100644 --- a/.yoi/tickets/closed/20260527-000021-bash-tool-editing-guidance/item.md +++ b/.yoi/tickets/20260527-000021-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000021-bash-tool-editing-guidance -slug: bash-tool-editing-guidance -title: Bashツールがファイル編集に常用されている問題をdesciptionで抑制 -status: closed -kind: task -priority: P2 -labels: [migrated] -created_at: 2026-05-27T00:00:21Z -updated_at: 2026-05-31T22:36:34Z -assignee: null +title: "Bashツールがファイル編集に常用されている問題をdesciptionで抑制" +state: "closed" +created_at: "2026-05-27T00:00:21Z" +updated_at: "2026-05-31T22:36:34Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000021-bash-tool-editing-guidance/resolution.md b/.yoi/tickets/20260527-000021-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000021-bash-tool-editing-guidance/resolution.md rename to .yoi/tickets/20260527-000021-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000021-bash-tool-editing-guidance/thread.md b/.yoi/tickets/20260527-000021-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000021-bash-tool-editing-guidance/thread.md rename to .yoi/tickets/20260527-000021-001/thread.md diff --git a/.yoi/tickets/closed/20260528-163238-multi-pod-view-section-layout/artifacts/.gitkeep b/.yoi/tickets/20260527-000022-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260528-163238-multi-pod-view-section-layout/artifacts/.gitkeep rename to .yoi/tickets/20260527-000022-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000022-manifest-profiles/item.md b/.yoi/tickets/20260527-000022-001/item.md similarity index 96% rename from .yoi/tickets/closed/20260527-000022-manifest-profiles/item.md rename to .yoi/tickets/20260527-000022-001/item.md index 9be2f42c..b83314df 100644 --- a/.yoi/tickets/closed/20260527-000022-manifest-profiles/item.md +++ b/.yoi/tickets/20260527-000022-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000022-manifest-profiles -slug: manifest-profiles -title: Nix profile entrypoints that resolve to portable Pod manifests -status: closed -kind: feature -priority: P2 -labels: [manifest, profiles, nix, tui] -created_at: 2026-05-27T00:00:22Z -updated_at: 2026-05-29T17:45:59Z -assignee: null +title: "Nix profile entrypoints that resolve to portable Pod manifests" +state: "closed" +created_at: "2026-05-27T00:00:22Z" +updated_at: "2026-05-29T17:45:59Z" --- ## Migration reference diff --git a/.yoi/tickets/closed/20260527-000022-manifest-profiles/resolution.md b/.yoi/tickets/20260527-000022-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000022-manifest-profiles/resolution.md rename to .yoi/tickets/20260527-000022-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000022-manifest-profiles/thread.md b/.yoi/tickets/20260527-000022-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000022-manifest-profiles/thread.md rename to .yoi/tickets/20260527-000022-001/thread.md diff --git a/.yoi/tickets/closed/20260528-233524-multi-pod-open-return/artifacts/.gitkeep b/.yoi/tickets/20260527-000023-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260528-233524-multi-pod-open-return/artifacts/.gitkeep rename to .yoi/tickets/20260527-000023-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-000023-multi-pod-view-ui/item.md b/.yoi/tickets/20260527-000023-001/item.md similarity index 96% rename from .yoi/tickets/closed/20260527-000023-multi-pod-view-ui/item.md rename to .yoi/tickets/20260527-000023-001/item.md index 3fc2eaad..99a64bf1 100644 --- a/.yoi/tickets/closed/20260527-000023-multi-pod-view-ui/item.md +++ b/.yoi/tickets/20260527-000023-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-000023-multi-pod-view-ui -slug: multi-pod-view-ui -title: Multi-Pod view UI -status: closed -kind: task -priority: P2 -labels: [tui, pod] -created_at: 2026-05-27T00:00:23Z -updated_at: 2026-05-28T16:09:01Z -assignee: null +title: "Multi-Pod view UI" +state: "closed" +created_at: "2026-05-27T00:00:23Z" +updated_at: "2026-05-28T16:09:01Z" --- ## Background diff --git a/.yoi/tickets/closed/20260527-000023-multi-pod-view-ui/resolution.md b/.yoi/tickets/20260527-000023-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-000023-multi-pod-view-ui/resolution.md rename to .yoi/tickets/20260527-000023-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-000023-multi-pod-view-ui/thread.md b/.yoi/tickets/20260527-000023-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-000023-multi-pod-view-ui/thread.md rename to .yoi/tickets/20260527-000023-001/thread.md diff --git a/.yoi/tickets/closed/20260529-001326-rename-installed-binaries/artifacts/.gitkeep b/.yoi/tickets/20260527-194421-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-001326-rename-installed-binaries/artifacts/.gitkeep rename to .yoi/tickets/20260527-194421-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260527-194421-pod-orchestration-system-guidance/item.md b/.yoi/tickets/20260527-194421-001/item.md similarity index 82% rename from .yoi/tickets/closed/20260527-194421-pod-orchestration-system-guidance/item.md rename to .yoi/tickets/20260527-194421-001/item.md index 1586c1f5..4d11013f 100644 --- a/.yoi/tickets/closed/20260527-194421-pod-orchestration-system-guidance/item.md +++ b/.yoi/tickets/20260527-194421-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260527-194421-pod-orchestration-system-guidance -slug: pod-orchestration-system-guidance -title: Pod orchestration tool availability に応じた system guidance -status: closed -kind: feature -priority: P2 -labels: [pod, workflow, prompt] -created_at: 2026-05-27T19:44:21Z -updated_at: 2026-06-01T01:24:59Z -assignee: null +title: "Pod orchestration tool availability に応じた system guidance" +state: "closed" +created_at: "2026-05-27T19:44:21Z" +updated_at: "2026-06-01T01:24:59Z" --- ## Background diff --git a/.yoi/tickets/closed/20260527-194421-pod-orchestration-system-guidance/resolution.md b/.yoi/tickets/20260527-194421-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-194421-pod-orchestration-system-guidance/resolution.md rename to .yoi/tickets/20260527-194421-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-194421-pod-orchestration-system-guidance/thread.md b/.yoi/tickets/20260527-194421-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-194421-pod-orchestration-system-guidance/thread.md rename to .yoi/tickets/20260527-194421-001/thread.md diff --git a/.yoi/tickets/closed/20260529-010200-tui-command-completion-apply/artifacts/.gitkeep b/.yoi/tickets/20260527-201313-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-010200-tui-command-completion-apply/artifacts/.gitkeep rename to .yoi/tickets/20260527-201313-001/artifacts/.gitkeep diff --git a/.yoi/tickets/20260527-201313-001/item.md b/.yoi/tickets/20260527-201313-001/item.md new file mode 100644 index 00000000..3751659c --- /dev/null +++ b/.yoi/tickets/20260527-201313-001/item.md @@ -0,0 +1,14 @@ +--- +title: "OpenAI Responses 未対応 SSE event を破棄せず観測する" +state: "closed" +created_at: "2026-05-27T20:13:13Z" +updated_at: "2026-05-27T20:44:19Z" +--- + +## Background + +Created by tickets.sh. + +## Acceptance criteria + +- TBD diff --git a/.yoi/tickets/closed/20260527-201313-openai-responses-unhandled-sse-observability/resolution.md b/.yoi/tickets/20260527-201313-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260527-201313-openai-responses-unhandled-sse-observability/resolution.md rename to .yoi/tickets/20260527-201313-001/resolution.md diff --git a/.yoi/tickets/closed/20260527-201313-openai-responses-unhandled-sse-observability/thread.md b/.yoi/tickets/20260527-201313-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260527-201313-openai-responses-unhandled-sse-observability/thread.md rename to .yoi/tickets/20260527-201313-001/thread.md diff --git a/.yoi/tickets/closed/20260529-010200-tui-composer-cursor-scroll/artifacts/.gitkeep b/.yoi/tickets/20260528-001748-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-010200-tui-composer-cursor-scroll/artifacts/.gitkeep rename to .yoi/tickets/20260528-001748-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260528-001748-compact-session-log-exploration/item.md b/.yoi/tickets/20260528-001748-001/item.md similarity index 97% rename from .yoi/tickets/closed/20260528-001748-compact-session-log-exploration/item.md rename to .yoi/tickets/20260528-001748-001/item.md index 0d58b512..e0cfe976 100644 --- a/.yoi/tickets/closed/20260528-001748-compact-session-log-exploration/item.md +++ b/.yoi/tickets/20260528-001748-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260528-001748-compact-session-log-exploration -slug: compact-session-log-exploration -title: 'Compact: session log 探索型の要約入力に変更する' -status: closed -kind: task -priority: P2 -labels: [compact, session-log] -created_at: 2026-05-28T00:17:48Z -updated_at: 2026-05-28T03:41:42Z -assignee: null +title: "Compact: session log 探索型の要約入力に変更する" +state: "closed" +created_at: "2026-05-28T00:17:48Z" +updated_at: "2026-05-28T03:41:42Z" --- # Compact: session log 探索型の要約入力に変更する diff --git a/.yoi/tickets/closed/20260528-001748-compact-session-log-exploration/resolution.md b/.yoi/tickets/20260528-001748-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260528-001748-compact-session-log-exploration/resolution.md rename to .yoi/tickets/20260528-001748-001/resolution.md diff --git a/.yoi/tickets/closed/20260528-001748-compact-session-log-exploration/thread.md b/.yoi/tickets/20260528-001748-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260528-001748-compact-session-log-exploration/thread.md rename to .yoi/tickets/20260528-001748-001/thread.md diff --git a/.yoi/tickets/closed/20260529-031832-multi-pod-empty-enter-open/artifacts/.gitkeep b/.yoi/tickets/20260528-131317-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-031832-multi-pod-empty-enter-open/artifacts/.gitkeep rename to .yoi/tickets/20260528-131317-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/audit.md b/.yoi/tickets/20260528-131317-001/artifacts/audit.md similarity index 100% rename from .yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/audit.md rename to .yoi/tickets/20260528-131317-001/artifacts/audit.md diff --git a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/comment-concept-hits.txt b/.yoi/tickets/20260528-131317-001/artifacts/comment-concept-hits.txt similarity index 100% rename from .yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/comment-concept-hits.txt rename to .yoi/tickets/20260528-131317-001/artifacts/comment-concept-hits.txt diff --git a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/deps-numbered.txt b/.yoi/tickets/20260528-131317-001/artifacts/deps-numbered.txt similarity index 100% rename from .yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/deps-numbered.txt rename to .yoi/tickets/20260528-131317-001/artifacts/deps-numbered.txt diff --git a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/deps.txt b/.yoi/tickets/20260528-131317-001/artifacts/deps.txt similarity index 100% rename from .yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/deps.txt rename to .yoi/tickets/20260528-131317-001/artifacts/deps.txt diff --git a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/public-concept-hits.txt b/.yoi/tickets/20260528-131317-001/artifacts/public-concept-hits.txt similarity index 100% rename from .yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/public-concept-hits.txt rename to .yoi/tickets/20260528-131317-001/artifacts/public-concept-hits.txt diff --git a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/reverse-deps-numbered.txt b/.yoi/tickets/20260528-131317-001/artifacts/reverse-deps-numbered.txt similarity index 100% rename from .yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/reverse-deps-numbered.txt rename to .yoi/tickets/20260528-131317-001/artifacts/reverse-deps-numbered.txt diff --git a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/reverse-deps.txt b/.yoi/tickets/20260528-131317-001/artifacts/reverse-deps.txt similarity index 100% rename from .yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/reverse-deps.txt rename to .yoi/tickets/20260528-131317-001/artifacts/reverse-deps.txt diff --git a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/suspicious-excerpts.txt b/.yoi/tickets/20260528-131317-001/artifacts/suspicious-excerpts.txt similarity index 100% rename from .yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/suspicious-excerpts.txt rename to .yoi/tickets/20260528-131317-001/artifacts/suspicious-excerpts.txt diff --git a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/item.md b/.yoi/tickets/20260528-131317-001/item.md similarity index 88% rename from .yoi/tickets/open/20260528-131317-crate-boundary-audit/item.md rename to .yoi/tickets/20260528-131317-001/item.md index fa8efedc..a6de129b 100644 --- a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/item.md +++ b/.yoi/tickets/20260528-131317-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260528-131317-crate-boundary-audit -slug: crate-boundary-audit -title: Audit crate responsibility boundaries -status: open -kind: audit -priority: P2 -labels: [architecture, crates] -workflow_state: planning -created_at: 2026-05-28T13:13:17Z -updated_at: 2026-05-28T13:13:17Z -assignee: null +title: "Audit crate responsibility boundaries" +state: "planning" +created_at: "2026-05-28T13:13:17Z" +updated_at: "2026-05-28T13:13:17Z" --- ## Background diff --git a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/thread.md b/.yoi/tickets/20260528-131317-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260528-131317-crate-boundary-audit/thread.md rename to .yoi/tickets/20260528-131317-001/thread.md diff --git a/.yoi/tickets/closed/20260529-145355-manifest-profile-encrypted-secrets/artifacts/.gitkeep b/.yoi/tickets/20260528-141602-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-145355-manifest-profile-encrypted-secrets/artifacts/.gitkeep rename to .yoi/tickets/20260528-141602-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260528-141602-tui-pod-list-view-abstraction/item.md b/.yoi/tickets/20260528-141602-001/item.md similarity index 96% rename from .yoi/tickets/closed/20260528-141602-tui-pod-list-view-abstraction/item.md rename to .yoi/tickets/20260528-141602-001/item.md index 1fa2cf96..6788832d 100644 --- a/.yoi/tickets/closed/20260528-141602-tui-pod-list-view-abstraction/item.md +++ b/.yoi/tickets/20260528-141602-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260528-141602-tui-pod-list-view-abstraction -slug: tui-pod-list-view-abstraction -title: TUI Pod list/view abstraction -status: closed -kind: task -priority: P2 -labels: [tui, pod, architecture] -created_at: 2026-05-28T14:16:02Z -updated_at: 2026-05-28T15:40:30Z -assignee: null +title: "TUI Pod list/view abstraction" +state: "closed" +created_at: "2026-05-28T14:16:02Z" +updated_at: "2026-05-28T15:40:30Z" --- ## Background diff --git a/.yoi/tickets/closed/20260528-141602-tui-pod-list-view-abstraction/resolution.md b/.yoi/tickets/20260528-141602-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260528-141602-tui-pod-list-view-abstraction/resolution.md rename to .yoi/tickets/20260528-141602-001/resolution.md diff --git a/.yoi/tickets/closed/20260528-141602-tui-pod-list-view-abstraction/thread.md b/.yoi/tickets/20260528-141602-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260528-141602-tui-pod-list-view-abstraction/thread.md rename to .yoi/tickets/20260528-141602-001/thread.md diff --git a/.yoi/tickets/closed/20260529-163047-pod-event-scope-subdelegation-control-only/artifacts/.gitkeep b/.yoi/tickets/20260528-152959-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-163047-pod-event-scope-subdelegation-control-only/artifacts/.gitkeep rename to .yoi/tickets/20260528-152959-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260528-152959-nix-packaging/item.md b/.yoi/tickets/20260528-152959-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260528-152959-nix-packaging/item.md rename to .yoi/tickets/20260528-152959-001/item.md index c79832d3..4b872587 100644 --- a/.yoi/tickets/closed/20260528-152959-nix-packaging/item.md +++ b/.yoi/tickets/20260528-152959-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260528-152959-nix-packaging -slug: nix-packaging -title: Package Insomnia with Nix -status: closed -kind: task -priority: P2 -labels: [packaging, nix, distribution] -created_at: 2026-05-28T15:29:59Z -updated_at: 2026-05-28T16:42:08Z -assignee: null +title: "Package Insomnia with Nix" +state: "closed" +created_at: "2026-05-28T15:29:59Z" +updated_at: "2026-05-28T16:42:08Z" --- ## Background diff --git a/.yoi/tickets/closed/20260528-152959-nix-packaging/resolution.md b/.yoi/tickets/20260528-152959-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260528-152959-nix-packaging/resolution.md rename to .yoi/tickets/20260528-152959-001/resolution.md diff --git a/.yoi/tickets/closed/20260528-152959-nix-packaging/thread.md b/.yoi/tickets/20260528-152959-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260528-152959-nix-packaging/thread.md rename to .yoi/tickets/20260528-152959-001/thread.md diff --git a/.yoi/tickets/closed/20260529-171326-pod-socket-peer-disconnect-noise/artifacts/.gitkeep b/.yoi/tickets/20260528-163238-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-171326-pod-socket-peer-disconnect-noise/artifacts/.gitkeep rename to .yoi/tickets/20260528-163238-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260528-163238-multi-pod-view-section-layout/item.md b/.yoi/tickets/20260528-163238-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260528-163238-multi-pod-view-section-layout/item.md rename to .yoi/tickets/20260528-163238-001/item.md index 29ef2213..4af47a3e 100644 --- a/.yoi/tickets/closed/20260528-163238-multi-pod-view-section-layout/item.md +++ b/.yoi/tickets/20260528-163238-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260528-163238-multi-pod-view-section-layout -slug: multi-pod-view-section-layout -title: Polish multi-Pod view section layout -status: closed -kind: task -priority: P2 -labels: [tui, pod, ux] -created_at: 2026-05-28T16:32:38Z -updated_at: 2026-05-28T16:49:25Z -assignee: null +title: "Polish multi-Pod view section layout" +state: "closed" +created_at: "2026-05-28T16:32:38Z" +updated_at: "2026-05-28T16:49:25Z" --- ## Background diff --git a/.yoi/tickets/closed/20260528-163238-multi-pod-view-section-layout/resolution.md b/.yoi/tickets/20260528-163238-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260528-163238-multi-pod-view-section-layout/resolution.md rename to .yoi/tickets/20260528-163238-001/resolution.md diff --git a/.yoi/tickets/closed/20260528-163238-multi-pod-view-section-layout/thread.md b/.yoi/tickets/20260528-163238-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260528-163238-multi-pod-view-section-layout/thread.md rename to .yoi/tickets/20260528-163238-001/thread.md diff --git a/.yoi/tickets/closed/20260529-180257-profile-registry-config-file/artifacts/.gitkeep b/.yoi/tickets/20260528-233524-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-180257-profile-registry-config-file/artifacts/.gitkeep rename to .yoi/tickets/20260528-233524-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260528-233524-multi-pod-open-return/item.md b/.yoi/tickets/20260528-233524-001/item.md similarity index 94% rename from .yoi/tickets/closed/20260528-233524-multi-pod-open-return/item.md rename to .yoi/tickets/20260528-233524-001/item.md index b5779ee1..cce497db 100644 --- a/.yoi/tickets/closed/20260528-233524-multi-pod-open-return/item.md +++ b/.yoi/tickets/20260528-233524-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260528-233524-multi-pod-open-return -slug: multi-pod-open-return -title: Return to multi-Pod view after opening a Pod -status: closed -kind: task -priority: P2 -labels: [tui, pod, ux] -created_at: 2026-05-28T23:35:24Z -updated_at: 2026-05-28T23:57:49Z -assignee: null +title: "Return to multi-Pod view after opening a Pod" +state: "closed" +created_at: "2026-05-28T23:35:24Z" +updated_at: "2026-05-28T23:57:49Z" --- ## Background diff --git a/.yoi/tickets/closed/20260528-233524-multi-pod-open-return/resolution.md b/.yoi/tickets/20260528-233524-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260528-233524-multi-pod-open-return/resolution.md rename to .yoi/tickets/20260528-233524-001/resolution.md diff --git a/.yoi/tickets/closed/20260528-233524-multi-pod-open-return/thread.md b/.yoi/tickets/20260528-233524-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260528-233524-multi-pod-open-return/thread.md rename to .yoi/tickets/20260528-233524-001/thread.md diff --git a/.yoi/tickets/closed/20260529-181528-remove-profile-aliases/artifacts/.gitkeep b/.yoi/tickets/20260529-001326-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-181528-remove-profile-aliases/artifacts/.gitkeep rename to .yoi/tickets/20260529-001326-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-001326-rename-installed-binaries/item.md b/.yoi/tickets/20260529-001326-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260529-001326-rename-installed-binaries/item.md rename to .yoi/tickets/20260529-001326-001/item.md index 6561e55e..54dea53d 100644 --- a/.yoi/tickets/closed/20260529-001326-rename-installed-binaries/item.md +++ b/.yoi/tickets/20260529-001326-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-001326-rename-installed-binaries -slug: rename-installed-binaries -title: Rename installed binaries -status: closed -kind: task -priority: P2 -labels: [cli, packaging, tui, pod] -created_at: 2026-05-29T00:13:26Z -updated_at: 2026-05-29T00:39:08Z -assignee: null +title: "Rename installed binaries" +state: "closed" +created_at: "2026-05-29T00:13:26Z" +updated_at: "2026-05-29T00:39:08Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-001326-rename-installed-binaries/resolution.md b/.yoi/tickets/20260529-001326-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-001326-rename-installed-binaries/resolution.md rename to .yoi/tickets/20260529-001326-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-001326-rename-installed-binaries/thread.md b/.yoi/tickets/20260529-001326-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-001326-rename-installed-binaries/thread.md rename to .yoi/tickets/20260529-001326-001/thread.md diff --git a/.yoi/tickets/closed/20260529-183318-builtin-profile-remove-manifest-cascade/artifacts/.gitkeep b/.yoi/tickets/20260529-010200-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-183318-builtin-profile-remove-manifest-cascade/artifacts/.gitkeep rename to .yoi/tickets/20260529-010200-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-010200-tui-command-completion-apply/item.md b/.yoi/tickets/20260529-010200-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260529-010200-tui-command-completion-apply/item.md rename to .yoi/tickets/20260529-010200-001/item.md index afb7bfa5..ed974a5d 100644 --- a/.yoi/tickets/closed/20260529-010200-tui-command-completion-apply/item.md +++ b/.yoi/tickets/20260529-010200-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-010200-tui-command-completion-apply -slug: tui-command-completion-apply -title: Apply command completions from keyboard -status: closed -kind: task -priority: P2 -labels: [tui, commands, ux] -created_at: 2026-05-29T01:02:00Z -updated_at: 2026-05-29T02:08:56Z -assignee: null +title: "Apply command completions from keyboard" +state: "closed" +created_at: "2026-05-29T01:02:00Z" +updated_at: "2026-05-29T02:08:56Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-010200-tui-command-completion-apply/resolution.md b/.yoi/tickets/20260529-010200-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-010200-tui-command-completion-apply/resolution.md rename to .yoi/tickets/20260529-010200-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-010200-tui-command-completion-apply/thread.md b/.yoi/tickets/20260529-010200-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-010200-tui-command-completion-apply/thread.md rename to .yoi/tickets/20260529-010200-001/thread.md diff --git a/.yoi/tickets/closed/20260529-205540-spawnpod-profile-tool-description/artifacts/.gitkeep b/.yoi/tickets/20260529-010200-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-205540-spawnpod-profile-tool-description/artifacts/.gitkeep rename to .yoi/tickets/20260529-010200-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-010200-tui-composer-cursor-scroll/item.md b/.yoi/tickets/20260529-010200-002/item.md similarity index 89% rename from .yoi/tickets/closed/20260529-010200-tui-composer-cursor-scroll/item.md rename to .yoi/tickets/20260529-010200-002/item.md index f954d2d7..1026a51a 100644 --- a/.yoi/tickets/closed/20260529-010200-tui-composer-cursor-scroll/item.md +++ b/.yoi/tickets/20260529-010200-002/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-010200-tui-composer-cursor-scroll -slug: tui-composer-cursor-scroll -title: Scroll TUI composer around cursor -status: closed -kind: task -priority: P2 -labels: [tui, input, ux] -created_at: 2026-05-29T01:02:00Z -updated_at: 2026-05-29T02:08:04Z -assignee: null +title: "Scroll TUI composer around cursor" +state: "closed" +created_at: "2026-05-29T01:02:00Z" +updated_at: "2026-05-29T02:08:04Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-010200-tui-composer-cursor-scroll/resolution.md b/.yoi/tickets/20260529-010200-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-010200-tui-composer-cursor-scroll/resolution.md rename to .yoi/tickets/20260529-010200-002/resolution.md diff --git a/.yoi/tickets/closed/20260529-010200-tui-composer-cursor-scroll/thread.md b/.yoi/tickets/20260529-010200-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-010200-tui-composer-cursor-scroll/thread.md rename to .yoi/tickets/20260529-010200-002/thread.md diff --git a/.yoi/tickets/closed/20260529-205844-session-pod-state-boundary/artifacts/.gitkeep b/.yoi/tickets/20260529-031832-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-205844-session-pod-state-boundary/artifacts/.gitkeep rename to .yoi/tickets/20260529-031832-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-031832-multi-pod-empty-enter-open/item.md b/.yoi/tickets/20260529-031832-001/item.md similarity index 88% rename from .yoi/tickets/closed/20260529-031832-multi-pod-empty-enter-open/item.md rename to .yoi/tickets/20260529-031832-001/item.md index 893143a9..d6f30ad2 100644 --- a/.yoi/tickets/closed/20260529-031832-multi-pod-empty-enter-open/item.md +++ b/.yoi/tickets/20260529-031832-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-031832-multi-pod-empty-enter-open -slug: multi-pod-empty-enter-open -title: Open selected multi-Pod entry on empty Enter -status: closed -kind: task -priority: P2 -labels: [tui, pod, ux] -created_at: 2026-05-29T03:18:32Z -updated_at: 2026-05-29T03:27:13Z -assignee: null +title: "Open selected multi-Pod entry on empty Enter" +state: "closed" +created_at: "2026-05-29T03:18:32Z" +updated_at: "2026-05-29T03:27:13Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-031832-multi-pod-empty-enter-open/resolution.md b/.yoi/tickets/20260529-031832-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-031832-multi-pod-empty-enter-open/resolution.md rename to .yoi/tickets/20260529-031832-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-031832-multi-pod-empty-enter-open/thread.md b/.yoi/tickets/20260529-031832-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-031832-multi-pod-empty-enter-open/thread.md rename to .yoi/tickets/20260529-031832-001/thread.md diff --git a/.yoi/tickets/closed/20260529-222850-semantic-nix-profiles/artifacts/.gitkeep b/.yoi/tickets/20260529-041911-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-222850-semantic-nix-profiles/artifacts/.gitkeep rename to .yoi/tickets/20260529-041911-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260529-041911-llm-worker-standalone-publication-audit/item.md b/.yoi/tickets/20260529-041911-001/item.md similarity index 91% rename from .yoi/tickets/open/20260529-041911-llm-worker-standalone-publication-audit/item.md rename to .yoi/tickets/20260529-041911-001/item.md index 2d60d706..40a12e70 100644 --- a/.yoi/tickets/open/20260529-041911-llm-worker-standalone-publication-audit/item.md +++ b/.yoi/tickets/20260529-041911-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260529-041911-llm-worker-standalone-publication-audit -slug: llm-worker-standalone-publication-audit -title: Prepare LLM-Worker for standalone publication -status: open -kind: audit -priority: P2 -labels: [llm-worker, docs, api, release] -workflow_state: planning -created_at: 2026-05-29T04:19:11Z -updated_at: 2026-05-29T04:19:11Z -assignee: null +title: "Prepare LLM-Worker for standalone publication" +state: "planning" +created_at: "2026-05-29T04:19:11Z" +updated_at: "2026-05-29T04:19:11Z" --- ## Background diff --git a/.yoi/tickets/open/20260529-041911-llm-worker-standalone-publication-audit/thread.md b/.yoi/tickets/20260529-041911-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260529-041911-llm-worker-standalone-publication-audit/thread.md rename to .yoi/tickets/20260529-041911-001/thread.md diff --git a/.yoi/tickets/closed/20260529-235408-provider-stream-trace-profile-spawn/artifacts/.gitkeep b/.yoi/tickets/20260529-145355-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260529-235408-provider-stream-trace-profile-spawn/artifacts/.gitkeep rename to .yoi/tickets/20260529-145355-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-145355-manifest-profile-encrypted-secrets/artifacts/resolution-20260531.md b/.yoi/tickets/20260529-145355-001/artifacts/resolution-20260531.md similarity index 100% rename from .yoi/tickets/closed/20260529-145355-manifest-profile-encrypted-secrets/artifacts/resolution-20260531.md rename to .yoi/tickets/20260529-145355-001/artifacts/resolution-20260531.md diff --git a/.yoi/tickets/closed/20260529-145355-manifest-profile-encrypted-secrets/artifacts/review-20260531-secrets-implementation.md b/.yoi/tickets/20260529-145355-001/artifacts/review-20260531-secrets-implementation.md similarity index 100% rename from .yoi/tickets/closed/20260529-145355-manifest-profile-encrypted-secrets/artifacts/review-20260531-secrets-implementation.md rename to .yoi/tickets/20260529-145355-001/artifacts/review-20260531-secrets-implementation.md diff --git a/.yoi/tickets/closed/20260529-145355-manifest-profile-encrypted-secrets/item.md b/.yoi/tickets/20260529-145355-001/item.md similarity index 95% rename from .yoi/tickets/closed/20260529-145355-manifest-profile-encrypted-secrets/item.md rename to .yoi/tickets/20260529-145355-001/item.md index 1677951f..3d413f05 100644 --- a/.yoi/tickets/closed/20260529-145355-manifest-profile-encrypted-secrets/item.md +++ b/.yoi/tickets/20260529-145355-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-145355-manifest-profile-encrypted-secrets -slug: manifest-profile-encrypted-secrets -title: 'Manifest/Profile: local key-value secret store' -status: closed -kind: feature -priority: P2 -labels: [manifest, profiles, secrets, security, cli, tui] -created_at: 2026-05-29T14:53:55Z -updated_at: 2026-05-31T22:23:34Z -assignee: null +title: "Manifest/Profile: local key-value secret store" +state: "closed" +created_at: "2026-05-29T14:53:55Z" +updated_at: "2026-05-31T22:23:34Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-145355-manifest-profile-encrypted-secrets/thread.md b/.yoi/tickets/20260529-145355-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-145355-manifest-profile-encrypted-secrets/thread.md rename to .yoi/tickets/20260529-145355-001/thread.md diff --git a/.yoi/tickets/closed/20260530-013904-profile-authoring-requirements-sync/artifacts/.gitkeep b/.yoi/tickets/20260529-161928-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260530-013904-profile-authoring-requirements-sync/artifacts/.gitkeep rename to .yoi/tickets/20260529-161928-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260529-161928-mcp-integration/item.md b/.yoi/tickets/20260529-161928-001/item.md similarity index 94% rename from .yoi/tickets/open/20260529-161928-mcp-integration/item.md rename to .yoi/tickets/20260529-161928-001/item.md index cc058c14..6696b1e8 100644 --- a/.yoi/tickets/open/20260529-161928-mcp-integration/item.md +++ b/.yoi/tickets/20260529-161928-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260529-161928-mcp-integration -slug: mcp-integration -title: MCP integration as external tool/resource/prompt provider -status: open -kind: feature -priority: P2 -labels: [mcp, tools, security, profiles] -workflow_state: planning -created_at: 2026-05-29T16:19:28Z -updated_at: 2026-05-29T16:19:28Z -assignee: null +title: "MCP integration as external tool/resource/prompt provider" +state: "planning" +created_at: "2026-05-29T16:19:28Z" +updated_at: "2026-05-29T16:19:28Z" --- ## Background diff --git a/.yoi/tickets/open/20260529-161928-mcp-integration/thread.md b/.yoi/tickets/20260529-161928-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260529-161928-mcp-integration/thread.md rename to .yoi/tickets/20260529-161928-001/thread.md diff --git a/.yoi/tickets/closed/20260530-022235-lua-profile-authoring/artifacts/.gitkeep b/.yoi/tickets/20260529-163047-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260530-022235-lua-profile-authoring/artifacts/.gitkeep rename to .yoi/tickets/20260529-163047-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-163047-pod-event-scope-subdelegation-control-only/item.md b/.yoi/tickets/20260529-163047-001/item.md similarity index 90% rename from .yoi/tickets/closed/20260529-163047-pod-event-scope-subdelegation-control-only/item.md rename to .yoi/tickets/20260529-163047-001/item.md index fefe5d3a..b5877815 100644 --- a/.yoi/tickets/closed/20260529-163047-pod-event-scope-subdelegation-control-only/item.md +++ b/.yoi/tickets/20260529-163047-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-163047-pod-event-scope-subdelegation-control-only -slug: pod-event-scope-subdelegation-control-only -title: Keep scope sub-delegation PodEvent out of agent notifications -status: closed -kind: bug -priority: P2 -labels: [pod, events, orchestration, context] -created_at: 2026-05-29T16:30:47Z -updated_at: 2026-05-30T05:04:26Z -assignee: null +title: "Keep scope sub-delegation PodEvent out of agent notifications" +state: "closed" +created_at: "2026-05-29T16:30:47Z" +updated_at: "2026-05-30T05:04:26Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-163047-pod-event-scope-subdelegation-control-only/resolution.md b/.yoi/tickets/20260529-163047-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-163047-pod-event-scope-subdelegation-control-only/resolution.md rename to .yoi/tickets/20260529-163047-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-163047-pod-event-scope-subdelegation-control-only/thread.md b/.yoi/tickets/20260529-163047-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-163047-pod-event-scope-subdelegation-control-only/thread.md rename to .yoi/tickets/20260529-163047-001/thread.md diff --git a/.yoi/tickets/closed/20260530-053259-multi-pod-parallel-status-probes/artifacts/.gitkeep b/.yoi/tickets/20260529-171326-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260530-053259-multi-pod-parallel-status-probes/artifacts/.gitkeep rename to .yoi/tickets/20260529-171326-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-171326-pod-socket-peer-disconnect-noise/item.md b/.yoi/tickets/20260529-171326-001/item.md similarity index 90% rename from .yoi/tickets/closed/20260529-171326-pod-socket-peer-disconnect-noise/item.md rename to .yoi/tickets/20260529-171326-001/item.md index 333bd6f6..65caec19 100644 --- a/.yoi/tickets/closed/20260529-171326-pod-socket-peer-disconnect-noise/item.md +++ b/.yoi/tickets/20260529-171326-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-171326-pod-socket-peer-disconnect-noise -slug: pod-socket-peer-disconnect-noise -title: Treat Pod socket peer disconnects as normal connection close -status: closed -kind: bug -priority: P1 -labels: [pod, ipc, tui, noise] -created_at: 2026-05-29T17:13:26Z -updated_at: 2026-05-29T17:26:50Z -assignee: null +title: "Treat Pod socket peer disconnects as normal connection close" +state: "closed" +created_at: "2026-05-29T17:13:26Z" +updated_at: "2026-05-29T17:26:50Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-171326-pod-socket-peer-disconnect-noise/resolution.md b/.yoi/tickets/20260529-171326-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-171326-pod-socket-peer-disconnect-noise/resolution.md rename to .yoi/tickets/20260529-171326-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-171326-pod-socket-peer-disconnect-noise/thread.md b/.yoi/tickets/20260529-171326-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-171326-pod-socket-peer-disconnect-noise/thread.md rename to .yoi/tickets/20260529-171326-001/thread.md diff --git a/.yoi/tickets/closed/20260530-054927-refresh-builtin-model-catalog/artifacts/.gitkeep b/.yoi/tickets/20260529-180257-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260530-054927-refresh-builtin-model-catalog/artifacts/.gitkeep rename to .yoi/tickets/20260529-180257-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-180257-profile-registry-config-file/item.md b/.yoi/tickets/20260529-180257-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260529-180257-profile-registry-config-file/item.md rename to .yoi/tickets/20260529-180257-001/item.md index afc382fb..7bb4fdbf 100644 --- a/.yoi/tickets/closed/20260529-180257-profile-registry-config-file/item.md +++ b/.yoi/tickets/20260529-180257-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-180257-profile-registry-config-file -slug: profile-registry-config-file -title: Move profile registry out of manifest files -status: closed -kind: bug -priority: P1 -labels: [manifest, profiles, config] -created_at: 2026-05-29T18:02:57Z -updated_at: 2026-05-29T18:11:10Z -assignee: null +title: "Move profile registry out of manifest files" +state: "closed" +created_at: "2026-05-29T18:02:57Z" +updated_at: "2026-05-29T18:11:10Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-180257-profile-registry-config-file/resolution.md b/.yoi/tickets/20260529-180257-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-180257-profile-registry-config-file/resolution.md rename to .yoi/tickets/20260529-180257-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-180257-profile-registry-config-file/thread.md b/.yoi/tickets/20260529-180257-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-180257-profile-registry-config-file/thread.md rename to .yoi/tickets/20260529-180257-001/thread.md diff --git a/.yoi/tickets/closed/20260530-062852-refresh-stale-docs/artifacts/.gitkeep b/.yoi/tickets/20260529-181528-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260530-062852-refresh-stale-docs/artifacts/.gitkeep rename to .yoi/tickets/20260529-181528-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-181528-remove-profile-aliases/item.md b/.yoi/tickets/20260529-181528-001/item.md similarity index 89% rename from .yoi/tickets/closed/20260529-181528-remove-profile-aliases/item.md rename to .yoi/tickets/20260529-181528-001/item.md index 00423ba8..037acb4a 100644 --- a/.yoi/tickets/closed/20260529-181528-remove-profile-aliases/item.md +++ b/.yoi/tickets/20260529-181528-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-181528-remove-profile-aliases -slug: remove-profile-aliases -title: Remove profile aliases from profile registry -status: closed -kind: bug -priority: P1 -labels: [profiles, config, simplification] -created_at: 2026-05-29T18:15:28Z -updated_at: 2026-05-29T18:20:44Z -assignee: null +title: "Remove profile aliases from profile registry" +state: "closed" +created_at: "2026-05-29T18:15:28Z" +updated_at: "2026-05-29T18:20:44Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-181528-remove-profile-aliases/resolution.md b/.yoi/tickets/20260529-181528-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-181528-remove-profile-aliases/resolution.md rename to .yoi/tickets/20260529-181528-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-181528-remove-profile-aliases/thread.md b/.yoi/tickets/20260529-181528-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-181528-remove-profile-aliases/thread.md rename to .yoi/tickets/20260529-181528-001/thread.md diff --git a/.yoi/tickets/closed/20260530-204045-webfetch-readable-extraction/artifacts/.gitkeep b/.yoi/tickets/20260529-183318-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260530-204045-webfetch-readable-extraction/artifacts/.gitkeep rename to .yoi/tickets/20260529-183318-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-183318-builtin-profile-remove-manifest-cascade/item.md b/.yoi/tickets/20260529-183318-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260529-183318-builtin-profile-remove-manifest-cascade/item.md rename to .yoi/tickets/20260529-183318-001/item.md index 1c45fb47..50f560e0 100644 --- a/.yoi/tickets/closed/20260529-183318-builtin-profile-remove-manifest-cascade/item.md +++ b/.yoi/tickets/20260529-183318-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-183318-builtin-profile-remove-manifest-cascade -slug: builtin-profile-remove-manifest-cascade -title: Add builtin Nix profile and remove manifest cascade mode -status: closed -kind: feature -priority: P1 -labels: [profiles, manifest, nix, config] -created_at: 2026-05-29T18:33:18Z -updated_at: 2026-05-29T19:38:49Z -assignee: null +title: "Add builtin Nix profile and remove manifest cascade mode" +state: "closed" +created_at: "2026-05-29T18:33:18Z" +updated_at: "2026-05-29T19:38:49Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-183318-builtin-profile-remove-manifest-cascade/resolution.md b/.yoi/tickets/20260529-183318-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-183318-builtin-profile-remove-manifest-cascade/resolution.md rename to .yoi/tickets/20260529-183318-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-183318-builtin-profile-remove-manifest-cascade/thread.md b/.yoi/tickets/20260529-183318-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-183318-builtin-profile-remove-manifest-cascade/thread.md rename to .yoi/tickets/20260529-183318-001/thread.md diff --git a/.yoi/tickets/closed/20260530-215928-webfetch-local-reader-markdown/artifacts/.gitkeep b/.yoi/tickets/20260529-205540-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260530-215928-webfetch-local-reader-markdown/artifacts/.gitkeep rename to .yoi/tickets/20260529-205540-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-205540-spawnpod-profile-tool-description/item.md b/.yoi/tickets/20260529-205540-001/item.md similarity index 96% rename from .yoi/tickets/closed/20260529-205540-spawnpod-profile-tool-description/item.md rename to .yoi/tickets/20260529-205540-001/item.md index fb1b2cff..de1bd72e 100644 --- a/.yoi/tickets/closed/20260529-205540-spawnpod-profile-tool-description/item.md +++ b/.yoi/tickets/20260529-205540-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-205540-spawnpod-profile-tool-description -slug: spawnpod-profile-tool-description -title: SpawnPod profile selection and templated tool description -status: closed -kind: feature -priority: P2 -labels: [pod, manifest, tools, workflow] -created_at: 2026-05-29T20:55:40Z -updated_at: 2026-05-30T05:19:46Z -assignee: null +title: "SpawnPod profile selection and templated tool description" +state: "closed" +created_at: "2026-05-29T20:55:40Z" +updated_at: "2026-05-30T05:19:46Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-205540-spawnpod-profile-tool-description/resolution.md b/.yoi/tickets/20260529-205540-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-205540-spawnpod-profile-tool-description/resolution.md rename to .yoi/tickets/20260529-205540-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-205540-spawnpod-profile-tool-description/thread.md b/.yoi/tickets/20260529-205540-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-205540-spawnpod-profile-tool-description/thread.md rename to .yoi/tickets/20260529-205540-001/thread.md diff --git a/.yoi/tickets/closed/20260531-003743-codex-gpt55-effective-context-window/artifacts/.gitkeep b/.yoi/tickets/20260529-205844-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-003743-codex-gpt55-effective-context-window/artifacts/.gitkeep rename to .yoi/tickets/20260529-205844-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-205844-session-pod-state-boundary/artifacts/review-r2.md b/.yoi/tickets/20260529-205844-001/artifacts/review-r2.md similarity index 100% rename from .yoi/tickets/closed/20260529-205844-session-pod-state-boundary/artifacts/review-r2.md rename to .yoi/tickets/20260529-205844-001/artifacts/review-r2.md diff --git a/.yoi/tickets/closed/20260529-205844-session-pod-state-boundary/artifacts/review.md b/.yoi/tickets/20260529-205844-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260529-205844-session-pod-state-boundary/artifacts/review.md rename to .yoi/tickets/20260529-205844-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260529-205844-session-pod-state-boundary/item.md b/.yoi/tickets/20260529-205844-001/item.md similarity index 96% rename from .yoi/tickets/closed/20260529-205844-session-pod-state-boundary/item.md rename to .yoi/tickets/20260529-205844-001/item.md index 619bd9be..66996196 100644 --- a/.yoi/tickets/closed/20260529-205844-session-pod-state-boundary/item.md +++ b/.yoi/tickets/20260529-205844-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-205844-session-pod-state-boundary -slug: session-pod-state-boundary -title: Split Pod metadata into a dedicated pod-store crate -status: closed -kind: task -priority: P2 -labels: [session-store, pod-store, pod, persistence, architecture] -created_at: 2026-05-29T20:58:44Z -updated_at: 2026-05-30T00:10:45Z -assignee: null +title: "Split Pod metadata into a dedicated pod-store crate" +state: "closed" +created_at: "2026-05-29T20:58:44Z" +updated_at: "2026-05-30T00:10:45Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-205844-session-pod-state-boundary/resolution.md b/.yoi/tickets/20260529-205844-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-205844-session-pod-state-boundary/resolution.md rename to .yoi/tickets/20260529-205844-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-205844-session-pod-state-boundary/thread.md b/.yoi/tickets/20260529-205844-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-205844-session-pod-state-boundary/thread.md rename to .yoi/tickets/20260529-205844-001/thread.md diff --git a/.yoi/tickets/closed/20260531-005557-single-binary-insomnia-cli/artifacts/.gitkeep b/.yoi/tickets/20260529-222850-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-005557-single-binary-insomnia-cli/artifacts/.gitkeep rename to .yoi/tickets/20260529-222850-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-222850-semantic-nix-profiles/artifacts/implementation-plan.md b/.yoi/tickets/20260529-222850-001/artifacts/implementation-plan.md similarity index 100% rename from .yoi/tickets/closed/20260529-222850-semantic-nix-profiles/artifacts/implementation-plan.md rename to .yoi/tickets/20260529-222850-001/artifacts/implementation-plan.md diff --git a/.yoi/tickets/closed/20260529-222850-semantic-nix-profiles/item.md b/.yoi/tickets/20260529-222850-001/item.md similarity index 95% rename from .yoi/tickets/closed/20260529-222850-semantic-nix-profiles/item.md rename to .yoi/tickets/20260529-222850-001/item.md index 44c849af..6c13f684 100644 --- a/.yoi/tickets/closed/20260529-222850-semantic-nix-profiles/item.md +++ b/.yoi/tickets/20260529-222850-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-222850-semantic-nix-profiles -slug: semantic-nix-profiles -title: Make Nix profiles semantic and manifestize them in the resolver -status: closed -kind: task -priority: P2 -labels: [manifest, profiles, nix, architecture] -created_at: 2026-05-29T22:28:50Z -updated_at: 2026-05-30T03:52:39Z -assignee: null +title: "Make Nix profiles semantic and manifestize them in the resolver" +state: "closed" +created_at: "2026-05-29T22:28:50Z" +updated_at: "2026-05-30T03:52:39Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-222850-semantic-nix-profiles/resolution.md b/.yoi/tickets/20260529-222850-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-222850-semantic-nix-profiles/resolution.md rename to .yoi/tickets/20260529-222850-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-222850-semantic-nix-profiles/thread.md b/.yoi/tickets/20260529-222850-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-222850-semantic-nix-profiles/thread.md rename to .yoi/tickets/20260529-222850-001/thread.md diff --git a/.yoi/tickets/closed/20260531-022821-pod-tool-surface-restore-list/artifacts/.gitkeep b/.yoi/tickets/20260529-235408-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-022821-pod-tool-surface-restore-list/artifacts/.gitkeep rename to .yoi/tickets/20260529-235408-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260529-235408-provider-stream-trace-profile-spawn/item.md b/.yoi/tickets/20260529-235408-001/item.md similarity index 87% rename from .yoi/tickets/closed/20260529-235408-provider-stream-trace-profile-spawn/item.md rename to .yoi/tickets/20260529-235408-001/item.md index b6c77520..d8b47b0a 100644 --- a/.yoi/tickets/closed/20260529-235408-provider-stream-trace-profile-spawn/item.md +++ b/.yoi/tickets/20260529-235408-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260529-235408-provider-stream-trace-profile-spawn -slug: provider-stream-trace-profile-spawn -title: Preserve provider stream trace recording across profile-spawned Pods -status: closed -kind: task -priority: P2 -labels: [pod, profile, session-trace, debuggability] -created_at: 2026-05-29T23:54:08Z -updated_at: 2026-05-30T00:38:28Z -assignee: null +title: "Preserve provider stream trace recording across profile-spawned Pods" +state: "closed" +created_at: "2026-05-29T23:54:08Z" +updated_at: "2026-05-30T00:38:28Z" --- ## Background diff --git a/.yoi/tickets/closed/20260529-235408-provider-stream-trace-profile-spawn/resolution.md b/.yoi/tickets/20260529-235408-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260529-235408-provider-stream-trace-profile-spawn/resolution.md rename to .yoi/tickets/20260529-235408-001/resolution.md diff --git a/.yoi/tickets/closed/20260529-235408-provider-stream-trace-profile-spawn/thread.md b/.yoi/tickets/20260529-235408-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260529-235408-provider-stream-trace-profile-spawn/thread.md rename to .yoi/tickets/20260529-235408-001/thread.md diff --git a/.yoi/tickets/closed/20260531-043239-insomnia-pod-subcommand-runtime/artifacts/.gitkeep b/.yoi/tickets/20260530-013904-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-043239-insomnia-pod-subcommand-runtime/artifacts/.gitkeep rename to .yoi/tickets/20260530-013904-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260530-013904-profile-authoring-requirements-sync/item.md b/.yoi/tickets/20260530-013904-001/item.md similarity index 95% rename from .yoi/tickets/closed/20260530-013904-profile-authoring-requirements-sync/item.md rename to .yoi/tickets/20260530-013904-001/item.md index 2572838a..e5b884cb 100644 --- a/.yoi/tickets/closed/20260530-013904-profile-authoring-requirements-sync/item.md +++ b/.yoi/tickets/20260530-013904-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260530-013904-profile-authoring-requirements-sync -slug: profile-authoring-requirements-sync -title: Sync profile authoring requirements before choosing the language -status: closed -kind: task -priority: P2 -labels: [manifest, profiles, architecture] -created_at: 2026-05-30T01:39:04Z -updated_at: 2026-06-01T07:02:44Z -assignee: null +title: "Sync profile authoring requirements before choosing the language" +state: "closed" +created_at: "2026-05-30T01:39:04Z" +updated_at: "2026-06-01T07:02:44Z" --- ## Background diff --git a/.yoi/tickets/closed/20260530-013904-profile-authoring-requirements-sync/resolution.md b/.yoi/tickets/20260530-013904-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260530-013904-profile-authoring-requirements-sync/resolution.md rename to .yoi/tickets/20260530-013904-001/resolution.md diff --git a/.yoi/tickets/closed/20260530-013904-profile-authoring-requirements-sync/thread.md b/.yoi/tickets/20260530-013904-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260530-013904-profile-authoring-requirements-sync/thread.md rename to .yoi/tickets/20260530-013904-001/thread.md diff --git a/.yoi/tickets/closed/20260531-045034-spawn-through-insomnia-pod-subcommand/artifacts/.gitkeep b/.yoi/tickets/20260530-022235-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-045034-spawn-through-insomnia-pod-subcommand/artifacts/.gitkeep rename to .yoi/tickets/20260530-022235-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260530-022235-lua-profile-authoring/item.md b/.yoi/tickets/20260530-022235-001/item.md similarity index 94% rename from .yoi/tickets/closed/20260530-022235-lua-profile-authoring/item.md rename to .yoi/tickets/20260530-022235-001/item.md index f0e4f35c..8c7dd2b9 100644 --- a/.yoi/tickets/closed/20260530-022235-lua-profile-authoring/item.md +++ b/.yoi/tickets/20260530-022235-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260530-022235-lua-profile-authoring -slug: lua-profile-authoring -title: Implement reusable Lua profile authoring -status: closed -kind: task -priority: P1 -labels: [manifest, profiles, lua, architecture] -created_at: 2026-05-30T02:22:35Z -updated_at: 2026-05-30T02:59:55Z -assignee: null +title: "Implement reusable Lua profile authoring" +state: "closed" +created_at: "2026-05-30T02:22:35Z" +updated_at: "2026-05-30T02:59:55Z" --- ## Background diff --git a/.yoi/tickets/closed/20260530-022235-lua-profile-authoring/resolution.md b/.yoi/tickets/20260530-022235-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260530-022235-lua-profile-authoring/resolution.md rename to .yoi/tickets/20260530-022235-001/resolution.md diff --git a/.yoi/tickets/closed/20260530-022235-lua-profile-authoring/thread.md b/.yoi/tickets/20260530-022235-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260530-022235-lua-profile-authoring/thread.md rename to .yoi/tickets/20260530-022235-001/thread.md diff --git a/.yoi/tickets/closed/20260531-054728-remove-insomnia-pod-binary/artifacts/.gitkeep b/.yoi/tickets/20260530-053259-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-054728-remove-insomnia-pod-binary/artifacts/.gitkeep rename to .yoi/tickets/20260530-053259-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260530-053259-multi-pod-parallel-status-probes/item.md b/.yoi/tickets/20260530-053259-001/item.md similarity index 88% rename from .yoi/tickets/closed/20260530-053259-multi-pod-parallel-status-probes/item.md rename to .yoi/tickets/20260530-053259-001/item.md index c5ceb588..76bc2628 100644 --- a/.yoi/tickets/closed/20260530-053259-multi-pod-parallel-status-probes/item.md +++ b/.yoi/tickets/20260530-053259-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260530-053259-multi-pod-parallel-status-probes -slug: multi-pod-parallel-status-probes -title: Parallelize multi-Pod live status probes -status: closed -kind: task -priority: P2 -labels: [tui, pod-dashboard, performance] -created_at: 2026-05-30T05:32:59Z -updated_at: 2026-05-30T05:45:37Z -assignee: null +title: "Parallelize multi-Pod live status probes" +state: "closed" +created_at: "2026-05-30T05:32:59Z" +updated_at: "2026-05-30T05:45:37Z" --- ## Background diff --git a/.yoi/tickets/closed/20260530-053259-multi-pod-parallel-status-probes/resolution.md b/.yoi/tickets/20260530-053259-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260530-053259-multi-pod-parallel-status-probes/resolution.md rename to .yoi/tickets/20260530-053259-001/resolution.md diff --git a/.yoi/tickets/closed/20260530-053259-multi-pod-parallel-status-probes/thread.md b/.yoi/tickets/20260530-053259-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260530-053259-multi-pod-parallel-status-probes/thread.md rename to .yoi/tickets/20260530-053259-001/thread.md diff --git a/.yoi/tickets/closed/20260531-064550-rename-pod-command-crate-to-insomnia/artifacts/.gitkeep b/.yoi/tickets/20260530-053721-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-064550-rename-pod-command-crate-to-insomnia/artifacts/.gitkeep rename to .yoi/tickets/20260530-053721-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260530-053721-tui-inflight-composer-injection/item.md b/.yoi/tickets/20260530-053721-001/item.md similarity index 92% rename from .yoi/tickets/open/20260530-053721-tui-inflight-composer-injection/item.md rename to .yoi/tickets/20260530-053721-001/item.md index 6ab78c8a..ecf6cbb8 100644 --- a/.yoi/tickets/open/20260530-053721-tui-inflight-composer-injection/item.md +++ b/.yoi/tickets/20260530-053721-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260530-053721-tui-inflight-composer-injection -slug: tui-inflight-composer-injection -title: Support immediate in-flight TUI composer injection -status: open -kind: feature -priority: P2 -labels: [tui, worker, interrupt, ux] -workflow_state: planning -created_at: 2026-05-30T05:37:21Z -updated_at: 2026-05-30T05:38:11Z -assignee: null +title: "Support immediate in-flight TUI composer injection" +state: "planning" +created_at: "2026-05-30T05:37:21Z" +updated_at: "2026-05-30T05:38:11Z" --- ## Background diff --git a/.yoi/tickets/open/20260530-053721-tui-inflight-composer-injection/thread.md b/.yoi/tickets/20260530-053721-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260530-053721-tui-inflight-composer-injection/thread.md rename to .yoi/tickets/20260530-053721-001/thread.md diff --git a/.yoi/tickets/closed/20260531-074258-tui-extract-cli-parsing/artifacts/.gitkeep b/.yoi/tickets/20260530-054927-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-074258-tui-extract-cli-parsing/artifacts/.gitkeep rename to .yoi/tickets/20260530-054927-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260530-054927-refresh-builtin-model-catalog/item.md b/.yoi/tickets/20260530-054927-001/item.md similarity index 89% rename from .yoi/tickets/closed/20260530-054927-refresh-builtin-model-catalog/item.md rename to .yoi/tickets/20260530-054927-001/item.md index facdc424..73971bb6 100644 --- a/.yoi/tickets/closed/20260530-054927-refresh-builtin-model-catalog/item.md +++ b/.yoi/tickets/20260530-054927-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260530-054927-refresh-builtin-model-catalog -slug: refresh-builtin-model-catalog -title: Refresh builtin model catalog to current provider recommendations -status: closed -kind: task -priority: P2 -labels: [models, providers, catalog, research] -created_at: 2026-05-30T05:49:27Z -updated_at: 2026-05-30T23:17:46Z -assignee: null +title: "Refresh builtin model catalog to current provider recommendations" +state: "closed" +created_at: "2026-05-30T05:49:27Z" +updated_at: "2026-05-30T23:17:46Z" --- ## Background diff --git a/.yoi/tickets/closed/20260530-054927-refresh-builtin-model-catalog/resolution.md b/.yoi/tickets/20260530-054927-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260530-054927-refresh-builtin-model-catalog/resolution.md rename to .yoi/tickets/20260530-054927-001/resolution.md diff --git a/.yoi/tickets/closed/20260530-054927-refresh-builtin-model-catalog/thread.md b/.yoi/tickets/20260530-054927-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260530-054927-refresh-builtin-model-catalog/thread.md rename to .yoi/tickets/20260530-054927-001/thread.md diff --git a/.yoi/tickets/closed/20260531-074258-tui-extract-single-pod-runtime/artifacts/.gitkeep b/.yoi/tickets/20260530-062852-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-074258-tui-extract-single-pod-runtime/artifacts/.gitkeep rename to .yoi/tickets/20260530-062852-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260530-062852-refresh-stale-docs/item.md b/.yoi/tickets/20260530-062852-001/item.md similarity index 88% rename from .yoi/tickets/closed/20260530-062852-refresh-stale-docs/item.md rename to .yoi/tickets/20260530-062852-001/item.md index ebf51b3b..4b0a682f 100644 --- a/.yoi/tickets/closed/20260530-062852-refresh-stale-docs/item.md +++ b/.yoi/tickets/20260530-062852-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260530-062852-refresh-stale-docs -slug: refresh-stale-docs -title: 'Docs: refresh stale architecture and operation docs' -status: closed -kind: task -priority: P2 -labels: [docs, maintenance] -created_at: 2026-05-30T06:28:52Z -updated_at: 2026-05-30T06:39:41Z -assignee: null +title: "Docs: refresh stale architecture and operation docs" +state: "closed" +created_at: "2026-05-30T06:28:52Z" +updated_at: "2026-05-30T06:39:41Z" --- ## Background diff --git a/.yoi/tickets/closed/20260530-062852-refresh-stale-docs/resolution.md b/.yoi/tickets/20260530-062852-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260530-062852-refresh-stale-docs/resolution.md rename to .yoi/tickets/20260530-062852-001/resolution.md diff --git a/.yoi/tickets/closed/20260530-062852-refresh-stale-docs/thread.md b/.yoi/tickets/20260530-062852-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260530-062852-refresh-stale-docs/thread.md rename to .yoi/tickets/20260530-062852-001/thread.md diff --git a/.yoi/tickets/closed/20260531-074258-tui-move-view-mode-state/artifacts/.gitkeep b/.yoi/tickets/20260530-204045-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-074258-tui-move-view-mode-state/artifacts/.gitkeep rename to .yoi/tickets/20260530-204045-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260530-204045-webfetch-readable-extraction/item.md b/.yoi/tickets/20260530-204045-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260530-204045-webfetch-readable-extraction/item.md rename to .yoi/tickets/20260530-204045-001/item.md index e84b044d..2e61331c 100644 --- a/.yoi/tickets/closed/20260530-204045-webfetch-readable-extraction/item.md +++ b/.yoi/tickets/20260530-204045-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260530-204045-webfetch-readable-extraction -slug: webfetch-readable-extraction -title: 'WebFetch: extract main HTML content with lightweight readability' -status: closed -kind: task -priority: P2 -labels: [web, tools, html] -created_at: 2026-05-30T20:40:45Z -updated_at: 2026-05-30T20:55:13Z -assignee: null +title: "WebFetch: extract main HTML content with lightweight readability" +state: "closed" +created_at: "2026-05-30T20:40:45Z" +updated_at: "2026-05-30T20:55:13Z" --- ## Background diff --git a/.yoi/tickets/closed/20260530-204045-webfetch-readable-extraction/resolution.md b/.yoi/tickets/20260530-204045-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260530-204045-webfetch-readable-extraction/resolution.md rename to .yoi/tickets/20260530-204045-001/resolution.md diff --git a/.yoi/tickets/closed/20260530-204045-webfetch-readable-extraction/thread.md b/.yoi/tickets/20260530-204045-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260530-204045-webfetch-readable-extraction/thread.md rename to .yoi/tickets/20260530-204045-001/thread.md diff --git a/.yoi/tickets/closed/20260531-082646-document-env-var-policy/artifacts/.gitkeep b/.yoi/tickets/20260530-215928-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-082646-document-env-var-policy/artifacts/.gitkeep rename to .yoi/tickets/20260530-215928-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260530-215928-webfetch-local-reader-markdown/item.md b/.yoi/tickets/20260530-215928-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260530-215928-webfetch-local-reader-markdown/item.md rename to .yoi/tickets/20260530-215928-001/item.md index ef75a970..3ac852b7 100644 --- a/.yoi/tickets/closed/20260530-215928-webfetch-local-reader-markdown/item.md +++ b/.yoi/tickets/20260530-215928-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260530-215928-webfetch-local-reader-markdown -slug: webfetch-local-reader-markdown -title: 'WebFetch: replace readability dependency with Markdown-preserving local reader' -status: closed -kind: task -priority: P2 -labels: [web, tools, html] -created_at: 2026-05-30T21:59:28Z -updated_at: 2026-05-30T22:21:39Z -assignee: null +title: "WebFetch: replace readability dependency with Markdown-preserving local reader" +state: "closed" +created_at: "2026-05-30T21:59:28Z" +updated_at: "2026-05-30T22:21:39Z" --- ## Background diff --git a/.yoi/tickets/closed/20260530-215928-webfetch-local-reader-markdown/resolution.md b/.yoi/tickets/20260530-215928-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260530-215928-webfetch-local-reader-markdown/resolution.md rename to .yoi/tickets/20260530-215928-001/resolution.md diff --git a/.yoi/tickets/closed/20260530-215928-webfetch-local-reader-markdown/thread.md b/.yoi/tickets/20260530-215928-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260530-215928-webfetch-local-reader-markdown/thread.md rename to .yoi/tickets/20260530-215928-001/thread.md diff --git a/.yoi/tickets/closed/20260531-085959-eliminate-test-only-env-vars/artifacts/.gitkeep b/.yoi/tickets/20260531-003743-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-085959-eliminate-test-only-env-vars/artifacts/.gitkeep rename to .yoi/tickets/20260531-003743-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-003743-codex-gpt55-effective-context-window/item.md b/.yoi/tickets/20260531-003743-001/item.md similarity index 89% rename from .yoi/tickets/closed/20260531-003743-codex-gpt55-effective-context-window/item.md rename to .yoi/tickets/20260531-003743-001/item.md index 3e4a7ded..e1f38888 100644 --- a/.yoi/tickets/closed/20260531-003743-codex-gpt55-effective-context-window/item.md +++ b/.yoi/tickets/20260531-003743-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-003743-codex-gpt55-effective-context-window -slug: codex-gpt55-effective-context-window -title: 'Provider: make codex gpt-5.5 context window effective' -status: closed -kind: task -priority: P2 -labels: [provider, models, catalog] -created_at: 2026-05-31T00:37:43Z -updated_at: 2026-05-31T01:58:24Z -assignee: null +title: "Provider: make codex gpt-5.5 context window effective" +state: "closed" +created_at: "2026-05-31T00:37:43Z" +updated_at: "2026-05-31T01:58:24Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-003743-codex-gpt55-effective-context-window/resolution.md b/.yoi/tickets/20260531-003743-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-003743-codex-gpt55-effective-context-window/resolution.md rename to .yoi/tickets/20260531-003743-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-003743-codex-gpt55-effective-context-window/thread.md b/.yoi/tickets/20260531-003743-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-003743-codex-gpt55-effective-context-window/thread.md rename to .yoi/tickets/20260531-003743-001/thread.md diff --git a/.yoi/tickets/closed/20260531-085959-remove-insomnia-pod-command-env/artifacts/.gitkeep b/.yoi/tickets/20260531-005557-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-085959-remove-insomnia-pod-command-env/artifacts/.gitkeep rename to .yoi/tickets/20260531-005557-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-005557-single-binary-insomnia-cli/item.md b/.yoi/tickets/20260531-005557-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260531-005557-single-binary-insomnia-cli/item.md rename to .yoi/tickets/20260531-005557-001/item.md index e6d4c91e..b6470e02 100644 --- a/.yoi/tickets/closed/20260531-005557-single-binary-insomnia-cli/item.md +++ b/.yoi/tickets/20260531-005557-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-005557-single-binary-insomnia-cli -slug: single-binary-insomnia-cli -title: 'CLI: migrate toward a single insomnia binary' -status: closed -kind: task -priority: P2 -labels: [cli, architecture, nix] -created_at: 2026-05-31T00:55:57Z -updated_at: 2026-05-31T12:15:50Z -assignee: null +title: "CLI: migrate toward a single insomnia binary" +state: "closed" +created_at: "2026-05-31T00:55:57Z" +updated_at: "2026-05-31T12:15:50Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-005557-single-binary-insomnia-cli/resolution.md b/.yoi/tickets/20260531-005557-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-005557-single-binary-insomnia-cli/resolution.md rename to .yoi/tickets/20260531-005557-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-005557-single-binary-insomnia-cli/thread.md b/.yoi/tickets/20260531-005557-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-005557-single-binary-insomnia-cli/thread.md rename to .yoi/tickets/20260531-005557-001/thread.md diff --git a/.yoi/tickets/closed/20260531-104614-pure-path-fallback-tests/artifacts/.gitkeep b/.yoi/tickets/20260531-010005-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-104614-pure-path-fallback-tests/artifacts/.gitkeep rename to .yoi/tickets/20260531-010005-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260531-010005-plugin-extension-surface/artifacts/feature-registry-split-decision.md b/.yoi/tickets/20260531-010005-001/artifacts/feature-registry-split-decision.md similarity index 100% rename from .yoi/tickets/open/20260531-010005-plugin-extension-surface/artifacts/feature-registry-split-decision.md rename to .yoi/tickets/20260531-010005-001/artifacts/feature-registry-split-decision.md diff --git a/.yoi/tickets/open/20260531-010005-plugin-extension-surface/item.md b/.yoi/tickets/20260531-010005-001/item.md similarity index 94% rename from .yoi/tickets/open/20260531-010005-plugin-extension-surface/item.md rename to .yoi/tickets/20260531-010005-001/item.md index c7ad73ae..85594aeb 100644 --- a/.yoi/tickets/open/20260531-010005-plugin-extension-surface/item.md +++ b/.yoi/tickets/20260531-010005-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260531-010005-plugin-extension-surface -slug: plugin-extension-surface -title: 'Plugin: define extension surface for hooks and tools' -status: open -kind: feature -priority: P2 -labels: [plugin, hooks, tools, wasm, mcp] -workflow_state: planning -created_at: 2026-05-31T01:00:05Z -updated_at: 2026-06-03T12:25:05Z -assignee: null +title: "Plugin: define extension surface for hooks and tools" +state: "planning" +created_at: "2026-05-31T01:00:05Z" +updated_at: "2026-06-03T12:25:05Z" --- ## Background diff --git a/.yoi/tickets/open/20260531-010005-plugin-extension-surface/thread.md b/.yoi/tickets/20260531-010005-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260531-010005-plugin-extension-surface/thread.md rename to .yoi/tickets/20260531-010005-001/thread.md diff --git a/.yoi/tickets/closed/20260531-110818-remove-resource-dir/artifacts/.gitkeep b/.yoi/tickets/20260531-022821-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-110818-remove-resource-dir/artifacts/.gitkeep rename to .yoi/tickets/20260531-022821-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-022821-pod-tool-surface-restore-list/item.md b/.yoi/tickets/20260531-022821-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260531-022821-pod-tool-surface-restore-list/item.md rename to .yoi/tickets/20260531-022821-001/item.md index 477c627c..c07e340b 100644 --- a/.yoi/tickets/closed/20260531-022821-pod-tool-surface-restore-list/item.md +++ b/.yoi/tickets/20260531-022821-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-022821-pod-tool-surface-restore-list -slug: pod-tool-surface-restore-list -title: 'Pod tools: unify pod listing and rename restore operation' -status: closed -kind: task -priority: P2 -labels: [pod, tools, orchestration] -created_at: 2026-05-31T02:28:21Z -updated_at: 2026-05-31T03:00:15Z -assignee: null +title: "Pod tools: unify pod listing and rename restore operation" +state: "closed" +created_at: "2026-05-31T02:28:21Z" +updated_at: "2026-05-31T03:00:15Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-022821-pod-tool-surface-restore-list/resolution.md b/.yoi/tickets/20260531-022821-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-022821-pod-tool-surface-restore-list/resolution.md rename to .yoi/tickets/20260531-022821-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-022821-pod-tool-surface-restore-list/thread.md b/.yoi/tickets/20260531-022821-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-022821-pod-tool-surface-restore-list/thread.md rename to .yoi/tickets/20260531-022821-001/thread.md diff --git a/.yoi/tickets/closed/20260531-111956-insomnia-crate-cli-owner/artifacts/.gitkeep b/.yoi/tickets/20260531-043239-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-111956-insomnia-crate-cli-owner/artifacts/.gitkeep rename to .yoi/tickets/20260531-043239-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-043239-insomnia-pod-subcommand-runtime/item.md b/.yoi/tickets/20260531-043239-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260531-043239-insomnia-pod-subcommand-runtime/item.md rename to .yoi/tickets/20260531-043239-001/item.md index ee5dcf95..a24e4a66 100644 --- a/.yoi/tickets/closed/20260531-043239-insomnia-pod-subcommand-runtime/item.md +++ b/.yoi/tickets/20260531-043239-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-043239-insomnia-pod-subcommand-runtime -slug: insomnia-pod-subcommand-runtime -title: 'CLI: add insomnia pod runtime entrypoint' -status: closed -kind: task -priority: P2 -labels: [cli, pod, nix] -created_at: 2026-05-31T04:32:39Z -updated_at: 2026-05-31T04:50:14Z -assignee: null +title: "CLI: add insomnia pod runtime entrypoint" +state: "closed" +created_at: "2026-05-31T04:32:39Z" +updated_at: "2026-05-31T04:50:14Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-043239-insomnia-pod-subcommand-runtime/resolution.md b/.yoi/tickets/20260531-043239-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-043239-insomnia-pod-subcommand-runtime/resolution.md rename to .yoi/tickets/20260531-043239-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-043239-insomnia-pod-subcommand-runtime/thread.md b/.yoi/tickets/20260531-043239-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-043239-insomnia-pod-subcommand-runtime/thread.md rename to .yoi/tickets/20260531-043239-001/thread.md diff --git a/.yoi/tickets/closed/20260531-124040-dev-pod-runtime-command-env/artifacts/.gitkeep b/.yoi/tickets/20260531-045034-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-124040-dev-pod-runtime-command-env/artifacts/.gitkeep rename to .yoi/tickets/20260531-045034-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-045034-spawn-through-insomnia-pod-subcommand/item.md b/.yoi/tickets/20260531-045034-001/item.md similarity index 90% rename from .yoi/tickets/closed/20260531-045034-spawn-through-insomnia-pod-subcommand/item.md rename to .yoi/tickets/20260531-045034-001/item.md index 3c578a5f..6d43e74e 100644 --- a/.yoi/tickets/closed/20260531-045034-spawn-through-insomnia-pod-subcommand/item.md +++ b/.yoi/tickets/20260531-045034-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-045034-spawn-through-insomnia-pod-subcommand -slug: spawn-through-insomnia-pod-subcommand -title: 'CLI: spawn Pods through insomnia pod runtime' -status: closed -kind: task -priority: P2 -labels: [cli, pod, client, nix] -created_at: 2026-05-31T04:50:34Z -updated_at: 2026-05-31T05:27:04Z -assignee: null +title: "CLI: spawn Pods through insomnia pod runtime" +state: "closed" +created_at: "2026-05-31T04:50:34Z" +updated_at: "2026-05-31T05:27:04Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-045034-spawn-through-insomnia-pod-subcommand/resolution.md b/.yoi/tickets/20260531-045034-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-045034-spawn-through-insomnia-pod-subcommand/resolution.md rename to .yoi/tickets/20260531-045034-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-045034-spawn-through-insomnia-pod-subcommand/thread.md b/.yoi/tickets/20260531-045034-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-045034-spawn-through-insomnia-pod-subcommand/thread.md rename to .yoi/tickets/20260531-045034-001/thread.md diff --git a/.yoi/tickets/closed/20260531-223506-memory-prompt-conditional-lookup/artifacts/.gitkeep b/.yoi/tickets/20260531-054728-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260531-223506-memory-prompt-conditional-lookup/artifacts/.gitkeep rename to .yoi/tickets/20260531-054728-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-054728-remove-insomnia-pod-binary/item.md b/.yoi/tickets/20260531-054728-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260531-054728-remove-insomnia-pod-binary/item.md rename to .yoi/tickets/20260531-054728-001/item.md index 73e763a8..ea97fd0f 100644 --- a/.yoi/tickets/closed/20260531-054728-remove-insomnia-pod-binary/item.md +++ b/.yoi/tickets/20260531-054728-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-054728-remove-insomnia-pod-binary -slug: remove-insomnia-pod-binary -title: 'CLI: remove insomnia-pod installed/runtime alias' -status: closed -kind: task -priority: P2 -labels: [cli, pod, nix, docs] -created_at: 2026-05-31T05:47:28Z -updated_at: 2026-05-31T06:10:39Z -assignee: null +title: "CLI: remove insomnia-pod installed/runtime alias" +state: "closed" +created_at: "2026-05-31T05:47:28Z" +updated_at: "2026-05-31T06:10:39Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-054728-remove-insomnia-pod-binary/resolution.md b/.yoi/tickets/20260531-054728-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-054728-remove-insomnia-pod-binary/resolution.md rename to .yoi/tickets/20260531-054728-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-054728-remove-insomnia-pod-binary/thread.md b/.yoi/tickets/20260531-054728-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-054728-remove-insomnia-pod-binary/thread.md rename to .yoi/tickets/20260531-054728-001/thread.md diff --git a/.yoi/tickets/closed/20260601-001616-prompt-occupancy-token-estimator/artifacts/.gitkeep b/.yoi/tickets/20260531-064550-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260601-001616-prompt-occupancy-token-estimator/artifacts/.gitkeep rename to .yoi/tickets/20260531-064550-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-064550-rename-pod-command-crate-to-insomnia/item.md b/.yoi/tickets/20260531-064550-001/item.md similarity index 81% rename from .yoi/tickets/closed/20260531-064550-rename-pod-command-crate-to-insomnia/item.md rename to .yoi/tickets/20260531-064550-001/item.md index 6a4c9a77..c4caff89 100644 --- a/.yoi/tickets/closed/20260531-064550-rename-pod-command-crate-to-insomnia/item.md +++ b/.yoi/tickets/20260531-064550-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-064550-rename-pod-command-crate-to-insomnia -slug: rename-pod-command-crate-to-insomnia -title: 'CLI: rename pod-command crate to insomnia' -status: closed -kind: task -priority: P2 -labels: [cli, pod, cargo] -created_at: 2026-05-31T06:45:50Z -updated_at: 2026-05-31T06:49:44Z -assignee: null +title: "CLI: rename pod-command crate to insomnia" +state: "closed" +created_at: "2026-05-31T06:45:50Z" +updated_at: "2026-05-31T06:49:44Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-064550-rename-pod-command-crate-to-insomnia/resolution.md b/.yoi/tickets/20260531-064550-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-064550-rename-pod-command-crate-to-insomnia/resolution.md rename to .yoi/tickets/20260531-064550-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-064550-rename-pod-command-crate-to-insomnia/thread.md b/.yoi/tickets/20260531-064550-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-064550-rename-pod-command-crate-to-insomnia/thread.md rename to .yoi/tickets/20260531-064550-001/thread.md diff --git a/.yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/artifacts/.gitkeep b/.yoi/tickets/20260531-074258-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/artifacts/.gitkeep rename to .yoi/tickets/20260531-074258-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-074258-tui-extract-cli-parsing/item.md b/.yoi/tickets/20260531-074258-001/item.md similarity index 86% rename from .yoi/tickets/closed/20260531-074258-tui-extract-cli-parsing/item.md rename to .yoi/tickets/20260531-074258-001/item.md index 19921f59..0b2886e8 100644 --- a/.yoi/tickets/closed/20260531-074258-tui-extract-cli-parsing/item.md +++ b/.yoi/tickets/20260531-074258-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-074258-tui-extract-cli-parsing -slug: tui-extract-cli-parsing -title: 'TUI: extract CLI parsing from main.rs' -status: closed -kind: task -priority: P2 -labels: [tui, cleanup] -created_at: 2026-05-31T07:42:58Z -updated_at: 2026-05-31T13:38:30Z -assignee: null +title: "TUI: extract CLI parsing from main.rs" +state: "closed" +created_at: "2026-05-31T07:42:58Z" +updated_at: "2026-05-31T13:38:30Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-074258-tui-extract-cli-parsing/resolution.md b/.yoi/tickets/20260531-074258-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-074258-tui-extract-cli-parsing/resolution.md rename to .yoi/tickets/20260531-074258-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-074258-tui-extract-cli-parsing/thread.md b/.yoi/tickets/20260531-074258-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-074258-tui-extract-cli-parsing/thread.md rename to .yoi/tickets/20260531-074258-001/thread.md diff --git a/.yoi/tickets/closed/20260601-020202-tui-keys-inline-viewport-ui/artifacts/.gitkeep b/.yoi/tickets/20260531-074258-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260601-020202-tui-keys-inline-viewport-ui/artifacts/.gitkeep rename to .yoi/tickets/20260531-074258-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-074258-tui-extract-single-pod-runtime/item.md b/.yoi/tickets/20260531-074258-002/item.md similarity index 87% rename from .yoi/tickets/closed/20260531-074258-tui-extract-single-pod-runtime/item.md rename to .yoi/tickets/20260531-074258-002/item.md index 9d36631f..b590d9d5 100644 --- a/.yoi/tickets/closed/20260531-074258-tui-extract-single-pod-runtime/item.md +++ b/.yoi/tickets/20260531-074258-002/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-074258-tui-extract-single-pod-runtime -slug: tui-extract-single-pod-runtime -title: 'TUI: extract single-Pod runtime loop from main.rs' -status: closed -kind: task -priority: P2 -labels: [tui, cleanup] -created_at: 2026-05-31T07:42:58Z -updated_at: 2026-05-31T13:57:02Z -assignee: null +title: "TUI: extract single-Pod runtime loop from main.rs" +state: "closed" +created_at: "2026-05-31T07:42:58Z" +updated_at: "2026-05-31T13:57:02Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-074258-tui-extract-single-pod-runtime/resolution.md b/.yoi/tickets/20260531-074258-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-074258-tui-extract-single-pod-runtime/resolution.md rename to .yoi/tickets/20260531-074258-002/resolution.md diff --git a/.yoi/tickets/closed/20260531-074258-tui-extract-single-pod-runtime/thread.md b/.yoi/tickets/20260531-074258-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-074258-tui-extract-single-pod-runtime/thread.md rename to .yoi/tickets/20260531-074258-002/thread.md diff --git a/.yoi/tickets/closed/20260601-021104-tui-composer-history-persistence/artifacts/.gitkeep b/.yoi/tickets/20260531-074258-003/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260601-021104-tui-composer-history-persistence/artifacts/.gitkeep rename to .yoi/tickets/20260531-074258-003/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-074258-tui-move-view-mode-state/item.md b/.yoi/tickets/20260531-074258-003/item.md similarity index 86% rename from .yoi/tickets/closed/20260531-074258-tui-move-view-mode-state/item.md rename to .yoi/tickets/20260531-074258-003/item.md index 2f095946..6d169d7e 100644 --- a/.yoi/tickets/closed/20260531-074258-tui-move-view-mode-state/item.md +++ b/.yoi/tickets/20260531-074258-003/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-074258-tui-move-view-mode-state -slug: tui-move-view-mode-state -title: 'TUI: move view mode state out of ui module' -status: closed -kind: task -priority: P2 -labels: [tui, cleanup] -created_at: 2026-05-31T07:42:58Z -updated_at: 2026-05-31T13:45:39Z -assignee: null +title: "TUI: move view mode state out of ui module" +state: "closed" +created_at: "2026-05-31T07:42:58Z" +updated_at: "2026-05-31T13:45:39Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-074258-tui-move-view-mode-state/resolution.md b/.yoi/tickets/20260531-074258-003/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-074258-tui-move-view-mode-state/resolution.md rename to .yoi/tickets/20260531-074258-003/resolution.md diff --git a/.yoi/tickets/closed/20260531-074258-tui-move-view-mode-state/thread.md b/.yoi/tickets/20260531-074258-003/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-074258-tui-move-view-mode-state/thread.md rename to .yoi/tickets/20260531-074258-003/thread.md diff --git a/.yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/artifacts/.gitkeep b/.yoi/tickets/20260531-082646-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/artifacts/.gitkeep rename to .yoi/tickets/20260531-082646-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-082646-document-env-var-policy/item.md b/.yoi/tickets/20260531-082646-001/item.md similarity index 85% rename from .yoi/tickets/closed/20260531-082646-document-env-var-policy/item.md rename to .yoi/tickets/20260531-082646-001/item.md index e57b107a..12b3ad59 100644 --- a/.yoi/tickets/closed/20260531-082646-document-env-var-policy/item.md +++ b/.yoi/tickets/20260531-082646-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-082646-document-env-var-policy -slug: document-env-var-policy -title: 'Docs: document environment variable policy' -status: closed -kind: task -priority: P2 -labels: [docs, config, security] -created_at: 2026-05-31T08:26:46Z -updated_at: 2026-05-31T08:29:40Z -assignee: null +title: "Docs: document environment variable policy" +state: "closed" +created_at: "2026-05-31T08:26:46Z" +updated_at: "2026-05-31T08:29:40Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-082646-document-env-var-policy/resolution.md b/.yoi/tickets/20260531-082646-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-082646-document-env-var-policy/resolution.md rename to .yoi/tickets/20260531-082646-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-082646-document-env-var-policy/thread.md b/.yoi/tickets/20260531-082646-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-082646-document-env-var-policy/thread.md rename to .yoi/tickets/20260531-082646-001/thread.md diff --git a/.yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/artifacts/.gitkeep b/.yoi/tickets/20260531-085959-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/artifacts/.gitkeep rename to .yoi/tickets/20260531-085959-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-085959-eliminate-test-only-env-vars/item.md b/.yoi/tickets/20260531-085959-001/item.md similarity index 88% rename from .yoi/tickets/closed/20260531-085959-eliminate-test-only-env-vars/item.md rename to .yoi/tickets/20260531-085959-001/item.md index 8586b10d..a0a11fa4 100644 --- a/.yoi/tickets/closed/20260531-085959-eliminate-test-only-env-vars/item.md +++ b/.yoi/tickets/20260531-085959-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-085959-eliminate-test-only-env-vars -slug: eliminate-test-only-env-vars -title: 'Tests: eliminate test-only environment variables' -status: closed -kind: task -priority: P2 -labels: [test, env, cleanup] -created_at: 2026-05-31T08:59:59Z -updated_at: 2026-05-31T10:04:28Z -assignee: null +title: "Tests: eliminate test-only environment variables" +state: "closed" +created_at: "2026-05-31T08:59:59Z" +updated_at: "2026-05-31T10:04:28Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-085959-eliminate-test-only-env-vars/resolution.md b/.yoi/tickets/20260531-085959-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-085959-eliminate-test-only-env-vars/resolution.md rename to .yoi/tickets/20260531-085959-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-085959-eliminate-test-only-env-vars/thread.md b/.yoi/tickets/20260531-085959-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-085959-eliminate-test-only-env-vars/thread.md rename to .yoi/tickets/20260531-085959-001/thread.md diff --git a/.yoi/tickets/closed/20260601-110026-crate-readme-boundaries/artifacts/.gitkeep b/.yoi/tickets/20260531-085959-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260601-110026-crate-readme-boundaries/artifacts/.gitkeep rename to .yoi/tickets/20260531-085959-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-085959-remove-insomnia-pod-command-env/item.md b/.yoi/tickets/20260531-085959-002/item.md similarity index 85% rename from .yoi/tickets/closed/20260531-085959-remove-insomnia-pod-command-env/item.md rename to .yoi/tickets/20260531-085959-002/item.md index 7262e898..47d771ba 100644 --- a/.yoi/tickets/closed/20260531-085959-remove-insomnia-pod-command-env/item.md +++ b/.yoi/tickets/20260531-085959-002/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-085959-remove-insomnia-pod-command-env -slug: remove-insomnia-pod-command-env -title: 'CLI: remove INSOMNIA_POD_COMMAND override' -status: closed -kind: task -priority: P2 -labels: [cli, pod, env] -created_at: 2026-05-31T08:59:59Z -updated_at: 2026-05-31T10:12:03Z -assignee: null +title: "CLI: remove INSOMNIA_POD_COMMAND override" +state: "closed" +created_at: "2026-05-31T08:59:59Z" +updated_at: "2026-05-31T10:12:03Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-085959-remove-insomnia-pod-command-env/resolution.md b/.yoi/tickets/20260531-085959-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-085959-remove-insomnia-pod-command-env/resolution.md rename to .yoi/tickets/20260531-085959-002/resolution.md diff --git a/.yoi/tickets/closed/20260531-085959-remove-insomnia-pod-command-env/thread.md b/.yoi/tickets/20260531-085959-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-085959-remove-insomnia-pod-command-env/thread.md rename to .yoi/tickets/20260531-085959-002/thread.md diff --git a/.yoi/tickets/closed/20260601-110026-docs-information-architecture/artifacts/.gitkeep b/.yoi/tickets/20260531-104614-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260601-110026-docs-information-architecture/artifacts/.gitkeep rename to .yoi/tickets/20260531-104614-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-104614-pure-path-fallback-tests/item.md b/.yoi/tickets/20260531-104614-001/item.md similarity index 90% rename from .yoi/tickets/closed/20260531-104614-pure-path-fallback-tests/item.md rename to .yoi/tickets/20260531-104614-001/item.md index 5c7f4b68..beadad06 100644 --- a/.yoi/tickets/closed/20260531-104614-pure-path-fallback-tests/item.md +++ b/.yoi/tickets/20260531-104614-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-104614-pure-path-fallback-tests -slug: pure-path-fallback-tests -title: 'Tests: make path fallback tests independent from process env' -status: closed -kind: task -priority: P2 -labels: [test, env, manifest, cleanup] -created_at: 2026-05-31T10:46:14Z -updated_at: 2026-05-31T10:54:49Z -assignee: null +title: "Tests: make path fallback tests independent from process env" +state: "closed" +created_at: "2026-05-31T10:46:14Z" +updated_at: "2026-05-31T10:54:49Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-104614-pure-path-fallback-tests/resolution.md b/.yoi/tickets/20260531-104614-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-104614-pure-path-fallback-tests/resolution.md rename to .yoi/tickets/20260531-104614-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-104614-pure-path-fallback-tests/thread.md b/.yoi/tickets/20260531-104614-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-104614-pure-path-fallback-tests/thread.md rename to .yoi/tickets/20260531-104614-001/thread.md diff --git a/.yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/artifacts/.gitkeep b/.yoi/tickets/20260531-110818-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/artifacts/.gitkeep rename to .yoi/tickets/20260531-110818-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-110818-remove-resource-dir/item.md b/.yoi/tickets/20260531-110818-001/item.md similarity index 90% rename from .yoi/tickets/closed/20260531-110818-remove-resource-dir/item.md rename to .yoi/tickets/20260531-110818-001/item.md index 70580509..7c2bc672 100644 --- a/.yoi/tickets/closed/20260531-110818-remove-resource-dir/item.md +++ b/.yoi/tickets/20260531-110818-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-110818-remove-resource-dir -slug: remove-resource-dir -title: 'Manifest: remove filesystem resource_dir dependency' -status: closed -kind: task -priority: P2 -labels: [manifest, profile, nix, env, cleanup] -created_at: 2026-05-31T11:08:18Z -updated_at: 2026-05-31T11:58:28Z -assignee: null +title: "Manifest: remove filesystem resource_dir dependency" +state: "closed" +created_at: "2026-05-31T11:08:18Z" +updated_at: "2026-05-31T11:58:28Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-110818-remove-resource-dir/resolution.md b/.yoi/tickets/20260531-110818-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-110818-remove-resource-dir/resolution.md rename to .yoi/tickets/20260531-110818-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-110818-remove-resource-dir/thread.md b/.yoi/tickets/20260531-110818-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-110818-remove-resource-dir/thread.md rename to .yoi/tickets/20260531-110818-001/thread.md diff --git a/.yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/.gitkeep b/.yoi/tickets/20260531-111956-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/.gitkeep rename to .yoi/tickets/20260531-111956-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-111956-insomnia-crate-cli-owner/item.md b/.yoi/tickets/20260531-111956-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260531-111956-insomnia-crate-cli-owner/item.md rename to .yoi/tickets/20260531-111956-001/item.md index 56551cff..1c82459e 100644 --- a/.yoi/tickets/closed/20260531-111956-insomnia-crate-cli-owner/item.md +++ b/.yoi/tickets/20260531-111956-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-111956-insomnia-crate-cli-owner -slug: insomnia-crate-cli-owner -title: 'CLI: make insomnia crate own binary entrypoint and CLI dispatch' -status: closed -kind: task -priority: P2 -labels: [cli, tui, pod, architecture] -created_at: 2026-05-31T11:19:56Z -updated_at: 2026-05-31T13:20:02Z -assignee: null +title: "CLI: make insomnia crate own binary entrypoint and CLI dispatch" +state: "closed" +created_at: "2026-05-31T11:19:56Z" +updated_at: "2026-05-31T13:20:02Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-111956-insomnia-crate-cli-owner/resolution.md b/.yoi/tickets/20260531-111956-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-111956-insomnia-crate-cli-owner/resolution.md rename to .yoi/tickets/20260531-111956-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-111956-insomnia-crate-cli-owner/thread.md b/.yoi/tickets/20260531-111956-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-111956-insomnia-crate-cli-owner/thread.md rename to .yoi/tickets/20260531-111956-001/thread.md diff --git a/.yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/artifacts/.gitkeep b/.yoi/tickets/20260531-124040-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/artifacts/.gitkeep rename to .yoi/tickets/20260531-124040-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-124040-dev-pod-runtime-command-env/item.md b/.yoi/tickets/20260531-124040-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260531-124040-dev-pod-runtime-command-env/item.md rename to .yoi/tickets/20260531-124040-001/item.md index 6f8fec32..90e78944 100644 --- a/.yoi/tickets/closed/20260531-124040-dev-pod-runtime-command-env/item.md +++ b/.yoi/tickets/20260531-124040-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-124040-dev-pod-runtime-command-env -slug: dev-pod-runtime-command-env -title: 'Dev: add Pod runtime executable override env' -status: closed -kind: task -priority: P2 -labels: [cli, pod, env, dev] -created_at: 2026-05-31T12:40:40Z -updated_at: 2026-05-31T20:41:56Z -assignee: null +title: "Dev: add Pod runtime executable override env" +state: "closed" +created_at: "2026-05-31T12:40:40Z" +updated_at: "2026-05-31T20:41:56Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-124040-dev-pod-runtime-command-env/resolution.md b/.yoi/tickets/20260531-124040-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260531-124040-dev-pod-runtime-command-env/resolution.md rename to .yoi/tickets/20260531-124040-001/resolution.md diff --git a/.yoi/tickets/closed/20260531-124040-dev-pod-runtime-command-env/thread.md b/.yoi/tickets/20260531-124040-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-124040-dev-pod-runtime-command-env/thread.md rename to .yoi/tickets/20260531-124040-001/thread.md diff --git a/.yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/artifacts/.gitkeep b/.yoi/tickets/20260531-223506-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/artifacts/.gitkeep rename to .yoi/tickets/20260531-223506-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260531-223506-memory-prompt-conditional-lookup/artifacts/resolution-20260531.md b/.yoi/tickets/20260531-223506-001/artifacts/resolution-20260531.md similarity index 100% rename from .yoi/tickets/closed/20260531-223506-memory-prompt-conditional-lookup/artifacts/resolution-20260531.md rename to .yoi/tickets/20260531-223506-001/artifacts/resolution-20260531.md diff --git a/.yoi/tickets/closed/20260531-223506-memory-prompt-conditional-lookup/artifacts/review-20260531-memory-prompt.md b/.yoi/tickets/20260531-223506-001/artifacts/review-20260531-memory-prompt.md similarity index 100% rename from .yoi/tickets/closed/20260531-223506-memory-prompt-conditional-lookup/artifacts/review-20260531-memory-prompt.md rename to .yoi/tickets/20260531-223506-001/artifacts/review-20260531-memory-prompt.md diff --git a/.yoi/tickets/closed/20260531-223506-memory-prompt-conditional-lookup/item.md b/.yoi/tickets/20260531-223506-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260531-223506-memory-prompt-conditional-lookup/item.md rename to .yoi/tickets/20260531-223506-001/item.md index 65d109df..f2feda03 100644 --- a/.yoi/tickets/closed/20260531-223506-memory-prompt-conditional-lookup/item.md +++ b/.yoi/tickets/20260531-223506-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260531-223506-memory-prompt-conditional-lookup -slug: memory-prompt-conditional-lookup -title: 'Memory prompt: conditional guidance and proactive lookup' -status: closed -kind: task -priority: P2 -labels: [memory, prompts, tools] -created_at: 2026-05-31T22:35:06Z -updated_at: 2026-05-31T22:52:35Z -assignee: null +title: "Memory prompt: conditional guidance and proactive lookup" +state: "closed" +created_at: "2026-05-31T22:35:06Z" +updated_at: "2026-05-31T22:52:35Z" --- ## Background diff --git a/.yoi/tickets/closed/20260531-223506-memory-prompt-conditional-lookup/thread.md b/.yoi/tickets/20260531-223506-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260531-223506-memory-prompt-conditional-lookup/thread.md rename to .yoi/tickets/20260531-223506-001/thread.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/.gitkeep b/.yoi/tickets/20260601-001616-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/.gitkeep rename to .yoi/tickets/20260601-001616-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260601-001616-prompt-occupancy-token-estimator/item.md b/.yoi/tickets/20260601-001616-001/item.md similarity index 85% rename from .yoi/tickets/closed/20260601-001616-prompt-occupancy-token-estimator/item.md rename to .yoi/tickets/20260601-001616-001/item.md index 1351fac6..797117a8 100644 --- a/.yoi/tickets/closed/20260601-001616-prompt-occupancy-token-estimator/item.md +++ b/.yoi/tickets/20260601-001616-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260601-001616-prompt-occupancy-token-estimator -slug: prompt-occupancy-token-estimator -title: Token estimator must keep prompt occupancy accounting whole -status: closed -kind: task -priority: P1 -labels: [compaction, token-accounting] -created_at: 2026-06-01T00:16:16Z -updated_at: 2026-06-01T01:10:06Z -assignee: null +title: "Token estimator must keep prompt occupancy accounting whole" +state: "closed" +created_at: "2026-06-01T00:16:16Z" +updated_at: "2026-06-01T01:10:06Z" --- ## Background diff --git a/.yoi/tickets/closed/20260601-001616-prompt-occupancy-token-estimator/resolution.md b/.yoi/tickets/20260601-001616-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260601-001616-prompt-occupancy-token-estimator/resolution.md rename to .yoi/tickets/20260601-001616-001/resolution.md diff --git a/.yoi/tickets/closed/20260601-001616-prompt-occupancy-token-estimator/thread.md b/.yoi/tickets/20260601-001616-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260601-001616-prompt-occupancy-token-estimator/thread.md rename to .yoi/tickets/20260601-001616-001/thread.md diff --git a/.yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/artifacts/.gitkeep b/.yoi/tickets/20260601-013132-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/artifacts/.gitkeep rename to .yoi/tickets/20260601-013132-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/artifacts/investigation-20260601.md b/.yoi/tickets/20260601-013132-001/artifacts/investigation-20260601.md similarity index 100% rename from .yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/artifacts/investigation-20260601.md rename to .yoi/tickets/20260601-013132-001/artifacts/investigation-20260601.md diff --git a/.yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/artifacts/review-20260601.md b/.yoi/tickets/20260601-013132-001/artifacts/review-20260601.md similarity index 100% rename from .yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/artifacts/review-20260601.md rename to .yoi/tickets/20260601-013132-001/artifacts/review-20260601.md diff --git a/.yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/item.md b/.yoi/tickets/20260601-013132-001/item.md similarity index 83% rename from .yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/item.md rename to .yoi/tickets/20260601-013132-001/item.md index bb7148c2..a4a26f4b 100644 --- a/.yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/item.md +++ b/.yoi/tickets/20260601-013132-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260601-013132-tui-new-session-first-message-missing -slug: tui-new-session-first-message-missing -title: 'TUI: first message missing when starting a new session' -status: closed -kind: bug -priority: P1 -labels: [tui, session, display] -created_at: 2026-06-01T01:31:32Z -updated_at: 2026-06-01T02:23:11Z -assignee: null +title: "TUI: first message missing when starting a new session" +state: "closed" +created_at: "2026-06-01T01:31:32Z" +updated_at: "2026-06-01T02:23:11Z" --- ## Issue diff --git a/.yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/resolution.md b/.yoi/tickets/20260601-013132-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/resolution.md rename to .yoi/tickets/20260601-013132-001/resolution.md diff --git a/.yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/thread.md b/.yoi/tickets/20260601-013132-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260601-013132-tui-new-session-first-message-missing/thread.md rename to .yoi/tickets/20260601-013132-001/thread.md diff --git a/.yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/.gitkeep b/.yoi/tickets/20260601-020202-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/.gitkeep rename to .yoi/tickets/20260601-020202-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260601-020202-tui-keys-inline-viewport-ui/artifacts/review-20260601.md b/.yoi/tickets/20260601-020202-001/artifacts/review-20260601.md similarity index 100% rename from .yoi/tickets/closed/20260601-020202-tui-keys-inline-viewport-ui/artifacts/review-20260601.md rename to .yoi/tickets/20260601-020202-001/artifacts/review-20260601.md diff --git a/.yoi/tickets/closed/20260601-020202-tui-keys-inline-viewport-ui/item.md b/.yoi/tickets/20260601-020202-001/item.md similarity index 88% rename from .yoi/tickets/closed/20260601-020202-tui-keys-inline-viewport-ui/item.md rename to .yoi/tickets/20260601-020202-001/item.md index 35450dbc..1a36b0d5 100644 --- a/.yoi/tickets/closed/20260601-020202-tui-keys-inline-viewport-ui/item.md +++ b/.yoi/tickets/20260601-020202-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260601-020202-tui-keys-inline-viewport-ui -slug: tui-keys-inline-viewport-ui -title: 'TUI: align insomnia keys UI with inline viewport style' -status: closed -kind: task -priority: P2 -labels: [tui, keys, ui] -created_at: 2026-06-01T02:02:02Z -updated_at: 2026-06-01T02:23:12Z -assignee: null +title: "TUI: align insomnia keys UI with inline viewport style" +state: "closed" +created_at: "2026-06-01T02:02:02Z" +updated_at: "2026-06-01T02:23:12Z" --- ## Issue diff --git a/.yoi/tickets/closed/20260601-020202-tui-keys-inline-viewport-ui/resolution.md b/.yoi/tickets/20260601-020202-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260601-020202-tui-keys-inline-viewport-ui/resolution.md rename to .yoi/tickets/20260601-020202-001/resolution.md diff --git a/.yoi/tickets/closed/20260601-020202-tui-keys-inline-viewport-ui/thread.md b/.yoi/tickets/20260601-020202-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260601-020202-tui-keys-inline-viewport-ui/thread.md rename to .yoi/tickets/20260601-020202-001/thread.md diff --git a/.yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/artifacts/.gitkeep b/.yoi/tickets/20260601-021104-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/artifacts/.gitkeep rename to .yoi/tickets/20260601-021104-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260601-021104-tui-composer-history-persistence/item.md b/.yoi/tickets/20260601-021104-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260601-021104-tui-composer-history-persistence/item.md rename to .yoi/tickets/20260601-021104-001/item.md index e40afb17..c8dc71bd 100644 --- a/.yoi/tickets/closed/20260601-021104-tui-composer-history-persistence/item.md +++ b/.yoi/tickets/20260601-021104-001/item.md @@ -1,17 +1,10 @@ --- -id: 20260601-021104-tui-composer-history-persistence -slug: tui-composer-history-persistence -title: 'TUI: persist composer input recall history per workspace' -status: 'closed' -kind: task -priority: P2 -labels: [tui, composer, history, persistence] -workflow_state: 'done' -created_at: 2026-06-01T02:11:04Z -updated_at: '2026-06-09T00:05:13Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T13:19:06Z' +title: "TUI: persist composer input recall history per workspace" +state: "closed" +created_at: "2026-06-01T02:11:04Z" +updated_at: "2026-06-09T00:05:13Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T13:19:06Z" --- ## Issue diff --git a/.yoi/tickets/closed/20260601-021104-tui-composer-history-persistence/resolution.md b/.yoi/tickets/20260601-021104-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260601-021104-tui-composer-history-persistence/resolution.md rename to .yoi/tickets/20260601-021104-001/resolution.md diff --git a/.yoi/tickets/closed/20260601-021104-tui-composer-history-persistence/thread.md b/.yoi/tickets/20260601-021104-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260601-021104-tui-composer-history-persistence/thread.md rename to .yoi/tickets/20260601-021104-001/thread.md diff --git a/.yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/artifacts/.gitkeep b/.yoi/tickets/20260601-031252-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/artifacts/.gitkeep rename to .yoi/tickets/20260601-031252-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/artifacts/ticket-definition-and-api-shape-20260605.md b/.yoi/tickets/20260601-031252-001/artifacts/ticket-definition-and-api-shape-20260605.md similarity index 100% rename from .yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/artifacts/ticket-definition-and-api-shape-20260605.md rename to .yoi/tickets/20260601-031252-001/artifacts/ticket-definition-and-api-shape-20260605.md diff --git a/.yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/artifacts/workitem-definition-and-api-shape-20260601.md b/.yoi/tickets/20260601-031252-001/artifacts/workitem-definition-and-api-shape-20260601.md similarity index 100% rename from .yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/artifacts/workitem-definition-and-api-shape-20260601.md rename to .yoi/tickets/20260601-031252-001/artifacts/workitem-definition-and-api-shape-20260601.md diff --git a/.yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/item.md b/.yoi/tickets/20260601-031252-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/item.md rename to .yoi/tickets/20260601-031252-001/item.md index 309722bf..7f93279a 100644 --- a/.yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/item.md +++ b/.yoi/tickets/20260601-031252-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260601-031252-builtin-work-item-intake-routing -slug: builtin-work-item-intake-routing -title: Built-in Ticket intake and orchestration routing -status: closed -kind: task -priority: P1 -labels: [ticket, intake, orchestration] -created_at: 2026-06-01T03:12:52Z -updated_at: 2026-06-05T06:42:40Z -assignee: null +title: "Built-in Ticket intake and orchestration routing" +state: "closed" +created_at: "2026-06-01T03:12:52Z" +updated_at: "2026-06-05T06:42:40Z" --- ## Background diff --git a/.yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/resolution.md b/.yoi/tickets/20260601-031252-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/resolution.md rename to .yoi/tickets/20260601-031252-001/resolution.md diff --git a/.yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/thread.md b/.yoi/tickets/20260601-031252-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260601-031252-builtin-work-item-intake-routing/thread.md rename to .yoi/tickets/20260601-031252-001/thread.md diff --git a/.yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/artifacts/.gitkeep b/.yoi/tickets/20260601-064953-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/artifacts/.gitkeep rename to .yoi/tickets/20260601-064953-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260601-064953-plugin-distribution-package-format/item.md b/.yoi/tickets/20260601-064953-001/item.md similarity index 94% rename from .yoi/tickets/open/20260601-064953-plugin-distribution-package-format/item.md rename to .yoi/tickets/20260601-064953-001/item.md index 574ac9ed..64bdffa3 100644 --- a/.yoi/tickets/open/20260601-064953-plugin-distribution-package-format/item.md +++ b/.yoi/tickets/20260601-064953-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260601-064953-plugin-distribution-package-format -slug: plugin-distribution-package-format -title: Plugin distribution package format and discovery -status: open -kind: feature -priority: P2 -labels: [plugin, distribution, workspace, user] -workflow_state: planning -created_at: 2026-06-01T06:49:53Z -updated_at: 2026-06-01T06:50:33Z -assignee: null +title: "Plugin distribution package format and discovery" +state: "planning" +created_at: "2026-06-01T06:49:53Z" +updated_at: "2026-06-01T06:50:33Z" --- ## Background diff --git a/.yoi/tickets/open/20260601-064953-plugin-distribution-package-format/thread.md b/.yoi/tickets/20260601-064953-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260601-064953-plugin-distribution-package-format/thread.md rename to .yoi/tickets/20260601-064953-001/thread.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/artifacts/.gitkeep b/.yoi/tickets/20260601-080614-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/artifacts/.gitkeep rename to .yoi/tickets/20260601-080614-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/artifacts/implementation-report.md b/.yoi/tickets/20260601-080614-001/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/artifacts/implementation-report.md rename to .yoi/tickets/20260601-080614-001/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/artifacts/yoi-rename-survey.md b/.yoi/tickets/20260601-080614-001/artifacts/yoi-rename-survey.md similarity index 100% rename from .yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/artifacts/yoi-rename-survey.md rename to .yoi/tickets/20260601-080614-001/artifacts/yoi-rename-survey.md diff --git a/.yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/item.md b/.yoi/tickets/20260601-080614-001/item.md similarity index 88% rename from .yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/item.md rename to .yoi/tickets/20260601-080614-001/item.md index b91b5378..f6d9064b 100644 --- a/.yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/item.md +++ b/.yoi/tickets/20260601-080614-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260601-080614-rename-insomnia-to-yoi -slug: rename-insomnia-to-yoi -title: Rename project from Insomnia to Yoi -status: closed -kind: task -priority: P1 -labels: [branding, rename, release-hygiene] -created_at: 2026-06-01T08:06:14Z -updated_at: 2026-06-01T09:49:11Z -assignee: null +title: "Rename project from Insomnia to Yoi" +state: "closed" +created_at: "2026-06-01T08:06:14Z" +updated_at: "2026-06-01T09:49:11Z" --- ## Background diff --git a/.yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/resolution.md b/.yoi/tickets/20260601-080614-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/resolution.md rename to .yoi/tickets/20260601-080614-001/resolution.md diff --git a/.yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/thread.md b/.yoi/tickets/20260601-080614-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260601-080614-rename-insomnia-to-yoi/thread.md rename to .yoi/tickets/20260601-080614-001/thread.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-intake-workflow/artifacts/.gitkeep b/.yoi/tickets/20260601-110026-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-intake-workflow/artifacts/.gitkeep rename to .yoi/tickets/20260601-110026-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260601-110026-crate-readme-boundaries/artifacts/implementation-report.md b/.yoi/tickets/20260601-110026-001/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260601-110026-crate-readme-boundaries/artifacts/implementation-report.md rename to .yoi/tickets/20260601-110026-001/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260601-110026-crate-readme-boundaries/item.md b/.yoi/tickets/20260601-110026-001/item.md similarity index 80% rename from .yoi/tickets/closed/20260601-110026-crate-readme-boundaries/item.md rename to .yoi/tickets/20260601-110026-001/item.md index bb359200..edf0356c 100644 --- a/.yoi/tickets/closed/20260601-110026-crate-readme-boundaries/item.md +++ b/.yoi/tickets/20260601-110026-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260601-110026-crate-readme-boundaries -slug: crate-readme-boundaries -title: Standardize crate README responsibility boundaries -status: closed -kind: task -priority: P2 -labels: [docs] -created_at: 2026-06-01T11:00:26Z -updated_at: 2026-06-01T13:22:51Z -assignee: null +title: "Standardize crate README responsibility boundaries" +state: "closed" +created_at: "2026-06-01T11:00:26Z" +updated_at: "2026-06-01T13:22:51Z" --- ## Background diff --git a/.yoi/tickets/closed/20260601-110026-crate-readme-boundaries/resolution.md b/.yoi/tickets/20260601-110026-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260601-110026-crate-readme-boundaries/resolution.md rename to .yoi/tickets/20260601-110026-001/resolution.md diff --git a/.yoi/tickets/closed/20260601-110026-crate-readme-boundaries/thread.md b/.yoi/tickets/20260601-110026-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260601-110026-crate-readme-boundaries/thread.md rename to .yoi/tickets/20260601-110026-001/thread.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-local-files-backend/artifacts/.gitkeep b/.yoi/tickets/20260601-110026-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-local-files-backend/artifacts/.gitkeep rename to .yoi/tickets/20260601-110026-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260601-110026-docs-information-architecture/artifacts/implementation-report.md b/.yoi/tickets/20260601-110026-002/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260601-110026-docs-information-architecture/artifacts/implementation-report.md rename to .yoi/tickets/20260601-110026-002/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260601-110026-docs-information-architecture/item.md b/.yoi/tickets/20260601-110026-002/item.md similarity index 83% rename from .yoi/tickets/closed/20260601-110026-docs-information-architecture/item.md rename to .yoi/tickets/20260601-110026-002/item.md index f68f807d..b33627b6 100644 --- a/.yoi/tickets/closed/20260601-110026-docs-information-architecture/item.md +++ b/.yoi/tickets/20260601-110026-002/item.md @@ -1,14 +1,8 @@ --- -id: 20260601-110026-docs-information-architecture -slug: docs-information-architecture -title: Reorganize documentation information architecture -status: closed -kind: task -priority: P2 -labels: [docs] -created_at: 2026-06-01T11:00:26Z -updated_at: 2026-06-01T13:22:50Z -assignee: null +title: "Reorganize documentation information architecture" +state: "closed" +created_at: "2026-06-01T11:00:26Z" +updated_at: "2026-06-01T13:22:50Z" --- ## Background diff --git a/.yoi/tickets/closed/20260601-110026-docs-information-architecture/resolution.md b/.yoi/tickets/20260601-110026-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260601-110026-docs-information-architecture/resolution.md rename to .yoi/tickets/20260601-110026-002/resolution.md diff --git a/.yoi/tickets/closed/20260601-110026-docs-information-architecture/thread.md b/.yoi/tickets/20260601-110026-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260601-110026-docs-information-architecture/thread.md rename to .yoi/tickets/20260601-110026-002/thread.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/artifacts/.gitkeep b/.yoi/tickets/20260601-123641-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/artifacts/.gitkeep rename to .yoi/tickets/20260601-123641-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260601-123641-dependency-license-audit/artifacts/audit-report.md b/.yoi/tickets/20260601-123641-001/artifacts/audit-report.md similarity index 100% rename from .yoi/tickets/open/20260601-123641-dependency-license-audit/artifacts/audit-report.md rename to .yoi/tickets/20260601-123641-001/artifacts/audit-report.md diff --git a/.yoi/tickets/open/20260601-123641-dependency-license-audit/artifacts/delegation-intent.md b/.yoi/tickets/20260601-123641-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/open/20260601-123641-dependency-license-audit/artifacts/delegation-intent.md rename to .yoi/tickets/20260601-123641-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/open/20260601-123641-dependency-license-audit/item.md b/.yoi/tickets/20260601-123641-001/item.md similarity index 84% rename from .yoi/tickets/open/20260601-123641-dependency-license-audit/item.md rename to .yoi/tickets/20260601-123641-001/item.md index 755ed5ab..1072c0c4 100644 --- a/.yoi/tickets/open/20260601-123641-dependency-license-audit/item.md +++ b/.yoi/tickets/20260601-123641-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260601-123641-dependency-license-audit -slug: dependency-license-audit -title: Audit external dependencies and license posture -status: open -kind: task -priority: P2 -labels: [audit, dependencies, license] -workflow_state: planning -created_at: 2026-06-01T12:36:41Z -updated_at: 2026-06-01T13:08:45Z -assignee: null +title: "Audit external dependencies and license posture" +state: "planning" +created_at: "2026-06-01T12:36:41Z" +updated_at: "2026-06-01T13:08:45Z" --- ## Background diff --git a/.yoi/tickets/open/20260601-123641-dependency-license-audit/thread.md b/.yoi/tickets/20260601-123641-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260601-123641-dependency-license-audit/thread.md rename to .yoi/tickets/20260601-123641-001/thread.md diff --git a/.yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/artifacts/.gitkeep b/.yoi/tickets/20260601-125240-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/artifacts/.gitkeep rename to .yoi/tickets/20260601-125240-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/artifacts/delegation-intent.md b/.yoi/tickets/20260601-125240-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/artifacts/delegation-intent.md rename to .yoi/tickets/20260601-125240-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/artifacts/implementation-report.md b/.yoi/tickets/20260601-125240-001/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/artifacts/implementation-report.md rename to .yoi/tickets/20260601-125240-001/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/artifacts/review.md b/.yoi/tickets/20260601-125240-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/artifacts/review.md rename to .yoi/tickets/20260601-125240-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/item.md b/.yoi/tickets/20260601-125240-001/item.md similarity index 89% rename from .yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/item.md rename to .yoi/tickets/20260601-125240-001/item.md index bba4c6e3..920f9107 100644 --- a/.yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/item.md +++ b/.yoi/tickets/20260601-125240-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260601-125240-workspace-local-manifest-override -slug: workspace-local-manifest-override -title: Support workspace-local manifest override layer -status: closed -kind: task -priority: P2 -labels: [profile, manifest, config] -created_at: 2026-06-01T12:52:40Z -updated_at: 2026-06-01T13:19:36Z -assignee: null +title: "Support workspace-local manifest override layer" +state: "closed" +created_at: "2026-06-01T12:52:40Z" +updated_at: "2026-06-01T13:19:36Z" --- ## Background diff --git a/.yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/resolution.md b/.yoi/tickets/20260601-125240-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/resolution.md rename to .yoi/tickets/20260601-125240-001/resolution.md diff --git a/.yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/thread.md b/.yoi/tickets/20260601-125240-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260601-125240-workspace-local-manifest-override/thread.md rename to .yoi/tickets/20260601-125240-001/thread.md diff --git a/.yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/artifacts/.gitkeep b/.yoi/tickets/20260601-132955-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/artifacts/.gitkeep rename to .yoi/tickets/20260601-132955-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/clarification.md b/.yoi/tickets/20260601-132955-001/artifacts/clarification.md similarity index 100% rename from .yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/clarification.md rename to .yoi/tickets/20260601-132955-001/artifacts/clarification.md diff --git a/.yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/delegation-intent.md b/.yoi/tickets/20260601-132955-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/delegation-intent.md rename to .yoi/tickets/20260601-132955-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/implementation-report.md b/.yoi/tickets/20260601-132955-001/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/implementation-report.md rename to .yoi/tickets/20260601-132955-001/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/investigation-summary.md b/.yoi/tickets/20260601-132955-001/artifacts/investigation-summary.md similarity index 100% rename from .yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/investigation-summary.md rename to .yoi/tickets/20260601-132955-001/artifacts/investigation-summary.md diff --git a/.yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/review.md b/.yoi/tickets/20260601-132955-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/artifacts/review.md rename to .yoi/tickets/20260601-132955-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/item.md b/.yoi/tickets/20260601-132955-001/item.md similarity index 94% rename from .yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/item.md rename to .yoi/tickets/20260601-132955-001/item.md index 570adc8f..e5ac07db 100644 --- a/.yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/item.md +++ b/.yoi/tickets/20260601-132955-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260601-132955-tui-peer-pod-handshake-command -slug: tui-peer-pod-handshake-command -title: 'TUI: add peer Pod handshake and messaging command' -status: closed -kind: task -priority: P2 -labels: [tui, pod, command, orchestration] -created_at: 2026-06-01T13:29:55Z -updated_at: 2026-06-02T13:54:50Z -assignee: null +title: "TUI: add peer Pod handshake and messaging command" +state: "closed" +created_at: "2026-06-01T13:29:55Z" +updated_at: "2026-06-02T13:54:50Z" --- ## Background diff --git a/.yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/resolution.md b/.yoi/tickets/20260601-132955-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/resolution.md rename to .yoi/tickets/20260601-132955-001/resolution.md diff --git a/.yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/thread.md b/.yoi/tickets/20260601-132955-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260601-132955-tui-peer-pod-handshake-command/thread.md rename to .yoi/tickets/20260601-132955-001/thread.md diff --git a/.yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/artifacts/.gitkeep b/.yoi/tickets/20260603-001124-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/artifacts/.gitkeep rename to .yoi/tickets/20260603-001124-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/artifacts/delegation-intent.md b/.yoi/tickets/20260603-001124-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/artifacts/delegation-intent.md rename to .yoi/tickets/20260603-001124-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/artifacts/implementation-report.md b/.yoi/tickets/20260603-001124-001/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/artifacts/implementation-report.md rename to .yoi/tickets/20260603-001124-001/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/artifacts/review.md b/.yoi/tickets/20260603-001124-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/artifacts/review.md rename to .yoi/tickets/20260603-001124-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/item.md b/.yoi/tickets/20260603-001124-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/item.md rename to .yoi/tickets/20260603-001124-001/item.md index 2a401822..7d6bcc40 100644 --- a/.yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/item.md +++ b/.yoi/tickets/20260603-001124-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260603-001124-unify-reasoning-block-lifecycle -slug: unify-reasoning-block-lifecycle -title: Unify reasoning persistence with block lifecycle -status: closed -kind: task -priority: P2 -labels: [llm-worker, reasoning, timeline] -created_at: 2026-06-03T00:11:24Z -updated_at: 2026-06-03T02:15:02Z -assignee: null +title: "Unify reasoning persistence with block lifecycle" +state: "closed" +created_at: "2026-06-03T00:11:24Z" +updated_at: "2026-06-03T02:15:02Z" --- ## Background diff --git a/.yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/resolution.md b/.yoi/tickets/20260603-001124-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/resolution.md rename to .yoi/tickets/20260603-001124-001/resolution.md diff --git a/.yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/thread.md b/.yoi/tickets/20260603-001124-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260603-001124-unify-reasoning-block-lifecycle/thread.md rename to .yoi/tickets/20260603-001124-001/thread.md diff --git a/.yoi/tickets/closed/20260605-203006-builtin-yoi-local-ticket-backend-config/artifacts/.gitkeep b/.yoi/tickets/20260603-122317-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-203006-builtin-yoi-local-ticket-backend-config/artifacts/.gitkeep rename to .yoi/tickets/20260603-122317-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/artifacts/delegation-intent.md b/.yoi/tickets/20260603-122317-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/artifacts/delegation-intent.md rename to .yoi/tickets/20260603-122317-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/artifacts/rereview.md b/.yoi/tickets/20260603-122317-001/artifacts/rereview.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/artifacts/rereview.md rename to .yoi/tickets/20260603-122317-001/artifacts/rereview.md diff --git a/.yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/artifacts/review.md b/.yoi/tickets/20260603-122317-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/artifacts/review.md rename to .yoi/tickets/20260603-122317-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/item.md b/.yoi/tickets/20260603-122317-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/item.md rename to .yoi/tickets/20260603-122317-001/item.md index 342d4c83..ac35579d 100644 --- a/.yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/item.md +++ b/.yoi/tickets/20260603-122317-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260603-122317-hook-public-surface-hardening -slug: hook-public-surface-hardening -title: 'Hook: harden public hook surface before plugin exposure' -status: closed -kind: task -priority: P1 -labels: [hooks, plugin, safety, tests] -created_at: 2026-06-03T12:23:17Z -updated_at: 2026-06-03T17:07:44Z -assignee: null +title: "Hook: harden public hook surface before plugin exposure" +state: "closed" +created_at: "2026-06-03T12:23:17Z" +updated_at: "2026-06-03T17:07:44Z" --- ## Issue diff --git a/.yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/resolution.md b/.yoi/tickets/20260603-122317-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/resolution.md rename to .yoi/tickets/20260603-122317-001/resolution.md diff --git a/.yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/thread.md b/.yoi/tickets/20260603-122317-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-hook-public-surface-hardening/thread.md rename to .yoi/tickets/20260603-122317-001/thread.md diff --git a/.yoi/tickets/closed/20260605-203006-migrate-ticket-storage-to-yoi-tickets/artifacts/.gitkeep b/.yoi/tickets/20260603-122317-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-203006-migrate-ticket-storage-to-yoi-tickets/artifacts/.gitkeep rename to .yoi/tickets/20260603-122317-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/delegation-intent.md b/.yoi/tickets/20260603-122317-002/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/delegation-intent.md rename to .yoi/tickets/20260603-122317-002/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/notification-background-task-revision.md b/.yoi/tickets/20260603-122317-002/artifacts/notification-background-task-revision.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/notification-background-task-revision.md rename to .yoi/tickets/20260603-122317-002/artifacts/notification-background-task-revision.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/permission-boundary-revision.md b/.yoi/tickets/20260603-122317-002/artifacts/permission-boundary-revision.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/permission-boundary-revision.md rename to .yoi/tickets/20260603-122317-002/artifacts/permission-boundary-revision.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/pod-api-design-delegation.md b/.yoi/tickets/20260603-122317-002/artifacts/pod-api-design-delegation.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/pod-api-design-delegation.md rename to .yoi/tickets/20260603-122317-002/artifacts/pod-api-design-delegation.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/pod-api-design.md b/.yoi/tickets/20260603-122317-002/artifacts/pod-api-design.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/pod-api-design.md rename to .yoi/tickets/20260603-122317-002/artifacts/pod-api-design.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/rereview-2.md b/.yoi/tickets/20260603-122317-002/artifacts/rereview-2.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/rereview-2.md rename to .yoi/tickets/20260603-122317-002/artifacts/rereview-2.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/rereview-3.md b/.yoi/tickets/20260603-122317-002/artifacts/rereview-3.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/rereview-3.md rename to .yoi/tickets/20260603-122317-002/artifacts/rereview-3.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/rereview.md b/.yoi/tickets/20260603-122317-002/artifacts/rereview.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/rereview.md rename to .yoi/tickets/20260603-122317-002/artifacts/rereview.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/review.md b/.yoi/tickets/20260603-122317-002/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/review.md rename to .yoi/tickets/20260603-122317-002/artifacts/review.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/service-registry-revision.md b/.yoi/tickets/20260603-122317-002/artifacts/service-registry-revision.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/artifacts/service-registry-revision.md rename to .yoi/tickets/20260603-122317-002/artifacts/service-registry-revision.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/item.md b/.yoi/tickets/20260603-122317-002/item.md similarity index 94% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/item.md rename to .yoi/tickets/20260603-122317-002/item.md index 927cc4a0..17bc5077 100644 --- a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/item.md +++ b/.yoi/tickets/20260603-122317-002/item.md @@ -1,14 +1,8 @@ --- -id: 20260603-122317-plugin-feature-contribution-registry -slug: plugin-feature-contribution-registry -title: 'Plugin: feature contribution registry for built-in and external capabilities' -status: closed -kind: feature -priority: P1 -labels: [plugin, registry, tools, hooks, orchestration] -created_at: 2026-06-03T12:23:17Z -updated_at: 2026-06-04T22:26:37Z -assignee: null +title: "Plugin: feature contribution registry for built-in and external capabilities" +state: "closed" +created_at: "2026-06-03T12:23:17Z" +updated_at: "2026-06-04T22:26:37Z" --- ## Issue diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/resolution.md b/.yoi/tickets/20260603-122317-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/resolution.md rename to .yoi/tickets/20260603-122317-002/resolution.md diff --git a/.yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/thread.md b/.yoi/tickets/20260603-122317-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260603-122317-plugin-feature-contribution-registry/thread.md rename to .yoi/tickets/20260603-122317-002/thread.md diff --git a/.yoi/tickets/closed/20260605-203006-remove-tickets-sh/artifacts/.gitkeep b/.yoi/tickets/20260604-223500-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-203006-remove-tickets-sh/artifacts/.gitkeep rename to .yoi/tickets/20260604-223500-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/artifacts/decision.md b/.yoi/tickets/20260604-223500-001/artifacts/decision.md similarity index 100% rename from .yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/artifacts/decision.md rename to .yoi/tickets/20260604-223500-001/artifacts/decision.md diff --git a/.yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/artifacts/delegation-intent.md b/.yoi/tickets/20260604-223500-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/artifacts/delegation-intent.md rename to .yoi/tickets/20260604-223500-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/artifacts/review.md b/.yoi/tickets/20260604-223500-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/artifacts/review.md rename to .yoi/tickets/20260604-223500-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/item.md b/.yoi/tickets/20260604-223500-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/item.md rename to .yoi/tickets/20260604-223500-001/item.md index 1b726413..e00e950b 100644 --- a/.yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/item.md +++ b/.yoi/tickets/20260604-223500-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260604-223500-task-tools-builtin-plugin -slug: task-tools-builtin-plugin -title: 'Feature: extract Task tools as builtin module' -status: closed -kind: task -priority: P1 -labels: [plugin, feature-registry, tasks] -created_at: 2026-06-04T22:35:00Z -updated_at: 2026-06-05T00:05:55Z -assignee: null +title: "Feature: extract Task tools as builtin module" +state: "closed" +created_at: "2026-06-04T22:35:00Z" +updated_at: "2026-06-05T00:05:55Z" --- ## Issue diff --git a/.yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/resolution.md b/.yoi/tickets/20260604-223500-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/resolution.md rename to .yoi/tickets/20260604-223500-001/resolution.md diff --git a/.yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/thread.md b/.yoi/tickets/20260604-223500-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260604-223500-task-tools-builtin-plugin/thread.md rename to .yoi/tickets/20260604-223500-001/thread.md diff --git a/.yoi/tickets/closed/20260605-203006-yoi-local-ticket-backend-migration/artifacts/.gitkeep b/.yoi/tickets/20260604-234844-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-203006-yoi-local-ticket-backend-migration/artifacts/.gitkeep rename to .yoi/tickets/20260604-234844-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/decision.md b/.yoi/tickets/20260604-234844-001/artifacts/decision.md similarity index 100% rename from .yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/decision.md rename to .yoi/tickets/20260604-234844-001/artifacts/decision.md diff --git a/.yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/delegation-intent.md b/.yoi/tickets/20260604-234844-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/delegation-intent.md rename to .yoi/tickets/20260604-234844-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/hook-context-authority-handles.md b/.yoi/tickets/20260604-234844-001/artifacts/hook-context-authority-handles.md similarity index 100% rename from .yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/hook-context-authority-handles.md rename to .yoi/tickets/20260604-234844-001/artifacts/hook-context-authority-handles.md diff --git a/.yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/implementation-report.md b/.yoi/tickets/20260604-234844-001/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/implementation-report.md rename to .yoi/tickets/20260604-234844-001/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/review.md b/.yoi/tickets/20260604-234844-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260604-234844-feature-api-authority-separation/artifacts/review.md rename to .yoi/tickets/20260604-234844-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260604-234844-feature-api-authority-separation/item.md b/.yoi/tickets/20260604-234844-001/item.md similarity index 90% rename from .yoi/tickets/closed/20260604-234844-feature-api-authority-separation/item.md rename to .yoi/tickets/20260604-234844-001/item.md index 0cd0e4fa..91700397 100644 --- a/.yoi/tickets/closed/20260604-234844-feature-api-authority-separation/item.md +++ b/.yoi/tickets/20260604-234844-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260604-234844-feature-api-authority-separation -slug: feature-api-authority-separation -title: 'Feature API: separate internal modules from external-plugin authority model' -status: closed -kind: task -priority: P1 -labels: [plugin, feature-registry, permissions, architecture] -created_at: 2026-06-04T23:48:44Z -updated_at: 2026-06-05T05:11:56Z -assignee: null +title: "Feature API: separate internal modules from external-plugin authority model" +state: "closed" +created_at: "2026-06-04T23:48:44Z" +updated_at: "2026-06-05T05:11:56Z" --- ## Issue diff --git a/.yoi/tickets/closed/20260604-234844-feature-api-authority-separation/resolution.md b/.yoi/tickets/20260604-234844-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260604-234844-feature-api-authority-separation/resolution.md rename to .yoi/tickets/20260604-234844-001/resolution.md diff --git a/.yoi/tickets/closed/20260604-234844-feature-api-authority-separation/thread.md b/.yoi/tickets/20260604-234844-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260604-234844-feature-api-authority-separation/thread.md rename to .yoi/tickets/20260604-234844-001/thread.md diff --git a/.yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/artifacts/.gitkeep b/.yoi/tickets/20260605-004807-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/artifacts/.gitkeep rename to .yoi/tickets/20260605-004807-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/artifacts/delegation-intent.md b/.yoi/tickets/20260605-004807-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-004807-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/artifacts/review.md b/.yoi/tickets/20260605-004807-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/artifacts/review.md rename to .yoi/tickets/20260605-004807-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/artifacts/task-hook-investigation.md b/.yoi/tickets/20260605-004807-001/artifacts/task-hook-investigation.md similarity index 100% rename from .yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/artifacts/task-hook-investigation.md rename to .yoi/tickets/20260605-004807-001/artifacts/task-hook-investigation.md diff --git a/.yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/item.md b/.yoi/tickets/20260605-004807-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/item.md rename to .yoi/tickets/20260605-004807-001/item.md index a1a45565..f143d439 100644 --- a/.yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/item.md +++ b/.yoi/tickets/20260605-004807-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-004807-hook-context-system-item-sink -slug: hook-context-system-item-sink -title: 'Hook: add context handles for host-mediated SystemItem append' -status: closed -kind: feature -priority: P1 -labels: [hooks, feature-registry, history, task-reminder] -created_at: 2026-06-05T00:48:07Z -updated_at: 2026-06-05T01:26:06Z -assignee: null +title: "Hook: add context handles for host-mediated SystemItem append" +state: "closed" +created_at: "2026-06-05T00:48:07Z" +updated_at: "2026-06-05T01:26:06Z" --- ## Issue diff --git a/.yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/resolution.md b/.yoi/tickets/20260605-004807-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/resolution.md rename to .yoi/tickets/20260605-004807-001/resolution.md diff --git a/.yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/thread.md b/.yoi/tickets/20260605-004807-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-004807-hook-context-system-item-sink/thread.md rename to .yoi/tickets/20260605-004807-001/thread.md diff --git a/.yoi/tickets/closed/20260605-210703-workspace-orchestration-panel/artifacts/.gitkeep b/.yoi/tickets/20260605-004807-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-210703-workspace-orchestration-panel/artifacts/.gitkeep rename to .yoi/tickets/20260605-004807-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/artifacts/delegation-intent.md b/.yoi/tickets/20260605-004807-002/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-004807-002/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/artifacts/rereview.md b/.yoi/tickets/20260605-004807-002/artifacts/rereview.md similarity index 100% rename from .yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/artifacts/rereview.md rename to .yoi/tickets/20260605-004807-002/artifacts/rereview.md diff --git a/.yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/artifacts/review.md b/.yoi/tickets/20260605-004807-002/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/artifacts/review.md rename to .yoi/tickets/20260605-004807-002/artifacts/review.md diff --git a/.yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/item.md b/.yoi/tickets/20260605-004807-002/item.md similarity index 93% rename from .yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/item.md rename to .yoi/tickets/20260605-004807-002/item.md index e7d9394d..f063207d 100644 --- a/.yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/item.md +++ b/.yoi/tickets/20260605-004807-002/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-004807-task-feature-own-store-reminder-hooks -slug: task-feature-own-store-reminder-hooks -title: 'Task: move TaskStore and reminders into Task feature' -status: closed -kind: task -priority: P1 -labels: [tasks, hooks, feature-registry, history] -created_at: 2026-06-05T00:48:07Z -updated_at: 2026-06-05T02:24:23Z -assignee: null +title: "Task: move TaskStore and reminders into Task feature" +state: "closed" +created_at: "2026-06-05T00:48:07Z" +updated_at: "2026-06-05T02:24:23Z" --- ## Issue diff --git a/.yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/resolution.md b/.yoi/tickets/20260605-004807-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/resolution.md rename to .yoi/tickets/20260605-004807-002/resolution.md diff --git a/.yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/thread.md b/.yoi/tickets/20260605-004807-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-004807-task-feature-own-store-reminder-hooks/thread.md rename to .yoi/tickets/20260605-004807-002/thread.md diff --git a/.yoi/tickets/closed/20260605-210704-ticket-intake-orchestrator-handoff/artifacts/.gitkeep b/.yoi/tickets/20260605-025100-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-210704-ticket-intake-orchestrator-handoff/artifacts/.gitkeep rename to .yoi/tickets/20260605-025100-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/artifacts/decision.md b/.yoi/tickets/20260605-025100-001/artifacts/decision.md similarity index 100% rename from .yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/artifacts/decision.md rename to .yoi/tickets/20260605-025100-001/artifacts/decision.md diff --git a/.yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/artifacts/delegation-intent.md b/.yoi/tickets/20260605-025100-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-025100-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/artifacts/implementation-report.md b/.yoi/tickets/20260605-025100-001/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/artifacts/implementation-report.md rename to .yoi/tickets/20260605-025100-001/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/artifacts/review.md b/.yoi/tickets/20260605-025100-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/artifacts/review.md rename to .yoi/tickets/20260605-025100-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/item.md b/.yoi/tickets/20260605-025100-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/item.md rename to .yoi/tickets/20260605-025100-001/item.md index 833683d0..e3ee35cb 100644 --- a/.yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/item.md +++ b/.yoi/tickets/20260605-025100-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-025100-task-domain-in-pod-feature -slug: task-domain-in-pod-feature -title: 'Task: move Task domain out of tools into pod built-in feature' -status: closed -kind: task -priority: P1 -labels: [tasks, feature-registry, crate-boundary, tools] -created_at: 2026-06-05T02:51:00Z -updated_at: 2026-06-05T03:26:31Z -assignee: null +title: "Task: move Task domain out of tools into pod built-in feature" +state: "closed" +created_at: "2026-06-05T02:51:00Z" +updated_at: "2026-06-05T03:26:31Z" --- ## Issue diff --git a/.yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/resolution.md b/.yoi/tickets/20260605-025100-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/resolution.md rename to .yoi/tickets/20260605-025100-001/resolution.md diff --git a/.yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/thread.md b/.yoi/tickets/20260605-025100-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-025100-task-domain-in-pod-feature/thread.md rename to .yoi/tickets/20260605-025100-001/thread.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/artifacts/.gitkeep b/.yoi/tickets/20260605-040104-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/artifacts/.gitkeep rename to .yoi/tickets/20260605-040104-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/artifacts/delegation-intent.md b/.yoi/tickets/20260605-040104-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-040104-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/artifacts/implementation-report.md b/.yoi/tickets/20260605-040104-001/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/artifacts/implementation-report.md rename to .yoi/tickets/20260605-040104-001/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/artifacts/review.md b/.yoi/tickets/20260605-040104-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/artifacts/review.md rename to .yoi/tickets/20260605-040104-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/item.md b/.yoi/tickets/20260605-040104-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/item.md rename to .yoi/tickets/20260605-040104-001/item.md index a40ee4ab..d494af71 100644 --- a/.yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/item.md +++ b/.yoi/tickets/20260605-040104-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-040104-ticket-built-in-feature-tools -slug: ticket-built-in-feature-tools -title: Ticket built-in feature tools -status: closed -kind: task -priority: P1 -labels: [ticket, feature, tool, orchestration] -created_at: 2026-06-05T04:01:04Z -updated_at: 2026-06-05T06:00:22Z -assignee: null +title: "Ticket built-in feature tools" +state: "closed" +created_at: "2026-06-05T04:01:04Z" +updated_at: "2026-06-05T06:00:22Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/resolution.md b/.yoi/tickets/20260605-040104-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/resolution.md rename to .yoi/tickets/20260605-040104-001/resolution.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/thread.md b/.yoi/tickets/20260605-040104-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-built-in-feature-tools/thread.md rename to .yoi/tickets/20260605-040104-001/thread.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-action-model/artifacts/.gitkeep b/.yoi/tickets/20260605-040104-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-action-model/artifacts/.gitkeep rename to .yoi/tickets/20260605-040104-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-040104-ticket-intake-workflow/artifacts/implementation-report.md b/.yoi/tickets/20260605-040104-002/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-intake-workflow/artifacts/implementation-report.md rename to .yoi/tickets/20260605-040104-002/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-intake-workflow/artifacts/review.md b/.yoi/tickets/20260605-040104-002/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-intake-workflow/artifacts/review.md rename to .yoi/tickets/20260605-040104-002/artifacts/review.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-intake-workflow/item.md b/.yoi/tickets/20260605-040104-002/item.md similarity index 93% rename from .yoi/tickets/closed/20260605-040104-ticket-intake-workflow/item.md rename to .yoi/tickets/20260605-040104-002/item.md index 46f390c3..e8556935 100644 --- a/.yoi/tickets/closed/20260605-040104-ticket-intake-workflow/item.md +++ b/.yoi/tickets/20260605-040104-002/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-040104-ticket-intake-workflow -slug: ticket-intake-workflow -title: Ticket intake workflow -status: closed -kind: task -priority: P1 -labels: [ticket, intake, workflow, orchestration] -created_at: 2026-06-05T04:01:04Z -updated_at: 2026-06-05T06:10:56Z -assignee: null +title: "Ticket intake workflow" +state: "closed" +created_at: "2026-06-05T04:01:04Z" +updated_at: "2026-06-05T06:10:56Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-040104-ticket-intake-workflow/resolution.md b/.yoi/tickets/20260605-040104-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-intake-workflow/resolution.md rename to .yoi/tickets/20260605-040104-002/resolution.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-intake-workflow/thread.md b/.yoi/tickets/20260605-040104-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-intake-workflow/thread.md rename to .yoi/tickets/20260605-040104-002/thread.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-composer-targets/artifacts/.gitkeep b/.yoi/tickets/20260605-040104-003/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-composer-targets/artifacts/.gitkeep rename to .yoi/tickets/20260605-040104-003/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-040104-ticket-local-files-backend/artifacts/delegation-intent.md b/.yoi/tickets/20260605-040104-003/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-local-files-backend/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-040104-003/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-local-files-backend/artifacts/implementation-report.md b/.yoi/tickets/20260605-040104-003/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-local-files-backend/artifacts/implementation-report.md rename to .yoi/tickets/20260605-040104-003/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-local-files-backend/artifacts/review.md b/.yoi/tickets/20260605-040104-003/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-local-files-backend/artifacts/review.md rename to .yoi/tickets/20260605-040104-003/artifacts/review.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-local-files-backend/item.md b/.yoi/tickets/20260605-040104-003/item.md similarity index 94% rename from .yoi/tickets/closed/20260605-040104-ticket-local-files-backend/item.md rename to .yoi/tickets/20260605-040104-003/item.md index 073509b9..804c3fab 100644 --- a/.yoi/tickets/closed/20260605-040104-ticket-local-files-backend/item.md +++ b/.yoi/tickets/20260605-040104-003/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-040104-ticket-local-files-backend -slug: ticket-local-files-backend -title: Ticket local files backend -status: closed -kind: task -priority: P1 -labels: [ticket, backend, orchestration] -created_at: 2026-06-05T04:01:04Z -updated_at: 2026-06-05T04:45:46Z -assignee: null +title: "Ticket local files backend" +state: "closed" +created_at: "2026-06-05T04:01:04Z" +updated_at: "2026-06-05T04:45:46Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-040104-ticket-local-files-backend/resolution.md b/.yoi/tickets/20260605-040104-003/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-local-files-backend/resolution.md rename to .yoi/tickets/20260605-040104-003/resolution.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-local-files-backend/thread.md b/.yoi/tickets/20260605-040104-003/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-local-files-backend/thread.md rename to .yoi/tickets/20260605-040104-003/thread.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-orchestrator-lifecycle/artifacts/.gitkeep b/.yoi/tickets/20260605-040104-004/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-orchestrator-lifecycle/artifacts/.gitkeep rename to .yoi/tickets/20260605-040104-004/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/artifacts/implementation-report.md b/.yoi/tickets/20260605-040104-004/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/artifacts/implementation-report.md rename to .yoi/tickets/20260605-040104-004/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/artifacts/review.md b/.yoi/tickets/20260605-040104-004/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/artifacts/review.md rename to .yoi/tickets/20260605-040104-004/artifacts/review.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/item.md b/.yoi/tickets/20260605-040104-004/item.md similarity index 93% rename from .yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/item.md rename to .yoi/tickets/20260605-040104-004/item.md index e043833b..17dd5d63 100644 --- a/.yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/item.md +++ b/.yoi/tickets/20260605-040104-004/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-040104-ticket-orchestrator-routing -slug: ticket-orchestrator-routing -title: Ticket orchestrator routing -status: closed -kind: task -priority: P1 -labels: [ticket, orchestrator, routing, orchestration] -created_at: 2026-06-05T04:01:04Z -updated_at: 2026-06-05T06:42:00Z -assignee: null +title: "Ticket orchestrator routing" +state: "closed" +created_at: "2026-06-05T04:01:04Z" +updated_at: "2026-06-05T06:42:00Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/resolution.md b/.yoi/tickets/20260605-040104-004/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/resolution.md rename to .yoi/tickets/20260605-040104-004/resolution.md diff --git a/.yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/thread.md b/.yoi/tickets/20260605-040104-004/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-040104-ticket-orchestrator-routing/thread.md rename to .yoi/tickets/20260605-040104-004/thread.md diff --git a/.yoi/tickets/closed/20260606-052903-workspace-panel-ticket-action-dispatch/artifacts/.gitkeep b/.yoi/tickets/20260605-173322-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260606-052903-workspace-panel-ticket-action-dispatch/artifacts/.gitkeep rename to .yoi/tickets/20260605-173322-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/artifacts/implementation-report.md b/.yoi/tickets/20260605-173322-001/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/artifacts/implementation-report.md rename to .yoi/tickets/20260605-173322-001/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/artifacts/investigation-plan.md b/.yoi/tickets/20260605-173322-001/artifacts/investigation-plan.md similarity index 100% rename from .yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/artifacts/investigation-plan.md rename to .yoi/tickets/20260605-173322-001/artifacts/investigation-plan.md diff --git a/.yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/artifacts/review.md b/.yoi/tickets/20260605-173322-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/artifacts/review.md rename to .yoi/tickets/20260605-173322-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/item.md b/.yoi/tickets/20260605-173322-001/item.md similarity index 94% rename from .yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/item.md rename to .yoi/tickets/20260605-173322-001/item.md index bc9eea37..3ee5afa7 100644 --- a/.yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/item.md +++ b/.yoi/tickets/20260605-173322-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-173322-ticket-config-role-profile-mapping -slug: ticket-config-role-profile-mapping -title: Ticket config role profile mapping -status: closed -kind: task -priority: P1 -labels: [ticket, config, profile, orchestration] -created_at: 2026-06-05T17:33:22Z -updated_at: 2026-06-05T18:48:15Z -assignee: null +title: "Ticket config role profile mapping" +state: "closed" +created_at: "2026-06-05T17:33:22Z" +updated_at: "2026-06-05T18:48:15Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/resolution.md b/.yoi/tickets/20260605-173322-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/resolution.md rename to .yoi/tickets/20260605-173322-001/resolution.md diff --git a/.yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/thread.md b/.yoi/tickets/20260605-173322-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-173322-ticket-config-role-profile-mapping/thread.md rename to .yoi/tickets/20260605-173322-001/thread.md diff --git a/.yoi/tickets/closed/20260606-060548-workspace-panel-layout-display-tuning/artifacts/.gitkeep b/.yoi/tickets/20260605-190330-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260606-060548-workspace-panel-layout-display-tuning/artifacts/.gitkeep rename to .yoi/tickets/20260605-190330-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/artifacts/delegation-intent.md b/.yoi/tickets/20260605-190330-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-190330-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/artifacts/implementation-report.md b/.yoi/tickets/20260605-190330-001/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/artifacts/implementation-report.md rename to .yoi/tickets/20260605-190330-001/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/artifacts/review.md b/.yoi/tickets/20260605-190330-001/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/artifacts/review.md rename to .yoi/tickets/20260605-190330-001/artifacts/review.md diff --git a/.yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/item.md b/.yoi/tickets/20260605-190330-001/item.md similarity index 94% rename from .yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/item.md rename to .yoi/tickets/20260605-190330-001/item.md index 92aea562..dd43613c 100644 --- a/.yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/item.md +++ b/.yoi/tickets/20260605-190330-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-190330-ticket-role-pod-launcher -slug: ticket-role-pod-launcher -title: Ticket role Pod launcher -status: closed -kind: task -priority: P1 -labels: [ticket, pod, role, orchestration] -created_at: 2026-06-05T19:03:30Z -updated_at: 2026-06-05T19:34:06Z -assignee: null +title: "Ticket role Pod launcher" +state: "closed" +created_at: "2026-06-05T19:03:30Z" +updated_at: "2026-06-05T19:34:06Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/resolution.md b/.yoi/tickets/20260605-190330-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/resolution.md rename to .yoi/tickets/20260605-190330-001/resolution.md diff --git a/.yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/thread.md b/.yoi/tickets/20260605-190330-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-190330-ticket-role-pod-launcher/thread.md rename to .yoi/tickets/20260605-190330-001/thread.md diff --git a/.yoi/tickets/closed/20260606-210832-remove-tui-ticket-commands/artifacts/.gitkeep b/.yoi/tickets/20260605-190330-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260606-210832-remove-tui-ticket-commands/artifacts/.gitkeep rename to .yoi/tickets/20260605-190330-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/artifacts/delegation-intent.md b/.yoi/tickets/20260605-190330-002/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-190330-002/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/artifacts/implementation-report.md b/.yoi/tickets/20260605-190330-002/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/artifacts/implementation-report.md rename to .yoi/tickets/20260605-190330-002/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/artifacts/review.md b/.yoi/tickets/20260605-190330-002/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/artifacts/review.md rename to .yoi/tickets/20260605-190330-002/artifacts/review.md diff --git a/.yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/item.md b/.yoi/tickets/20260605-190330-002/item.md similarity index 92% rename from .yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/item.md rename to .yoi/tickets/20260605-190330-002/item.md index 6c445082..134c0ac3 100644 --- a/.yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/item.md +++ b/.yoi/tickets/20260605-190330-002/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-190330-tui-ticket-role-actions -slug: tui-ticket-role-actions -title: TUI Ticket role actions -status: closed -kind: task -priority: P1 -labels: [tui, ticket, role, orchestration] -created_at: 2026-06-05T19:03:30Z -updated_at: 2026-06-05T20:09:50Z -assignee: null +title: "TUI Ticket role actions" +state: "closed" +created_at: "2026-06-05T19:03:30Z" +updated_at: "2026-06-05T20:09:50Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/resolution.md b/.yoi/tickets/20260605-190330-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/resolution.md rename to .yoi/tickets/20260605-190330-002/resolution.md diff --git a/.yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/thread.md b/.yoi/tickets/20260605-190330-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-190330-tui-ticket-role-actions/thread.md rename to .yoi/tickets/20260605-190330-002/thread.md diff --git a/.yoi/tickets/closed/20260606-215403-explicit-ticket-workflow-state/artifacts/.gitkeep b/.yoi/tickets/20260605-203006-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260606-215403-explicit-ticket-workflow-state/artifacts/.gitkeep rename to .yoi/tickets/20260605-203006-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-203006-builtin-yoi-local-ticket-backend-config/artifacts/delegation-intent.md b/.yoi/tickets/20260605-203006-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-builtin-yoi-local-ticket-backend-config/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-203006-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-203006-builtin-yoi-local-ticket-backend-config/item.md b/.yoi/tickets/20260605-203006-001/item.md similarity index 87% rename from .yoi/tickets/closed/20260605-203006-builtin-yoi-local-ticket-backend-config/item.md rename to .yoi/tickets/20260605-203006-001/item.md index ec6c9d37..a9704beb 100644 --- a/.yoi/tickets/closed/20260605-203006-builtin-yoi-local-ticket-backend-config/item.md +++ b/.yoi/tickets/20260605-203006-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-203006-builtin-yoi-local-ticket-backend-config -slug: builtin-yoi-local-ticket-backend-config -title: Builtin yoi_local Ticket backend config -status: closed -kind: task -priority: P1 -labels: [ticket, backend, config] -created_at: 2026-06-05T20:30:06Z -updated_at: 2026-06-05T21:26:56Z -assignee: null +title: "Builtin yoi_local Ticket backend config" +state: "closed" +created_at: "2026-06-05T20:30:06Z" +updated_at: "2026-06-05T21:26:56Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-203006-builtin-yoi-local-ticket-backend-config/resolution.md b/.yoi/tickets/20260605-203006-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-builtin-yoi-local-ticket-backend-config/resolution.md rename to .yoi/tickets/20260605-203006-001/resolution.md diff --git a/.yoi/tickets/closed/20260605-203006-builtin-yoi-local-ticket-backend-config/thread.md b/.yoi/tickets/20260605-203006-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-builtin-yoi-local-ticket-backend-config/thread.md rename to .yoi/tickets/20260605-203006-001/thread.md diff --git a/.yoi/tickets/closed/20260606-221301-typed-ticket-thread-event-log/artifacts/.gitkeep b/.yoi/tickets/20260605-203006-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260606-221301-typed-ticket-thread-event-log/artifacts/.gitkeep rename to .yoi/tickets/20260605-203006-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-203006-migrate-ticket-storage-to-yoi-tickets/artifacts/delegation-intent.md b/.yoi/tickets/20260605-203006-002/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-migrate-ticket-storage-to-yoi-tickets/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-203006-002/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-203006-migrate-ticket-storage-to-yoi-tickets/item.md b/.yoi/tickets/20260605-203006-002/item.md similarity index 88% rename from .yoi/tickets/closed/20260605-203006-migrate-ticket-storage-to-yoi-tickets/item.md rename to .yoi/tickets/20260605-203006-002/item.md index b7451c1e..dd7b83bb 100644 --- a/.yoi/tickets/closed/20260605-203006-migrate-ticket-storage-to-yoi-tickets/item.md +++ b/.yoi/tickets/20260605-203006-002/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-203006-migrate-ticket-storage-to-yoi-tickets -slug: migrate-ticket-storage-to-yoi-tickets -title: Migrate Ticket storage to .yoi/tickets -status: closed -kind: task -priority: P1 -labels: [ticket, migration, storage] -created_at: 2026-06-05T20:30:06Z -updated_at: 2026-06-05T21:51:58Z -assignee: null +title: "Migrate Ticket storage to .yoi/tickets" +state: "closed" +created_at: "2026-06-05T20:30:06Z" +updated_at: "2026-06-05T21:51:58Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-203006-migrate-ticket-storage-to-yoi-tickets/resolution.md b/.yoi/tickets/20260605-203006-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-migrate-ticket-storage-to-yoi-tickets/resolution.md rename to .yoi/tickets/20260605-203006-002/resolution.md diff --git a/.yoi/tickets/closed/20260605-203006-migrate-ticket-storage-to-yoi-tickets/thread.md b/.yoi/tickets/20260605-203006-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-migrate-ticket-storage-to-yoi-tickets/thread.md rename to .yoi/tickets/20260605-203006-002/thread.md diff --git a/.yoi/tickets/closed/20260606-233520-workspace-panel-nonblocking-transitions/artifacts/.gitkeep b/.yoi/tickets/20260605-203006-003/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260606-233520-workspace-panel-nonblocking-transitions/artifacts/.gitkeep rename to .yoi/tickets/20260605-203006-003/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-203006-remove-tickets-sh/artifacts/delegation-intent.md b/.yoi/tickets/20260605-203006-003/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-remove-tickets-sh/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-203006-003/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-203006-remove-tickets-sh/item.md b/.yoi/tickets/20260605-203006-003/item.md similarity index 86% rename from .yoi/tickets/closed/20260605-203006-remove-tickets-sh/item.md rename to .yoi/tickets/20260605-203006-003/item.md index 9fd50054..0827bb6d 100644 --- a/.yoi/tickets/closed/20260605-203006-remove-tickets-sh/item.md +++ b/.yoi/tickets/20260605-203006-003/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-203006-remove-tickets-sh -slug: remove-tickets-sh -title: Remove tickets.sh compatibility CLI -status: closed -kind: task -priority: P1 -labels: [ticket, cleanup, cli] -created_at: 2026-06-05T20:30:06Z -updated_at: 2026-06-05T22:13:36Z -assignee: null +title: "Remove tickets.sh compatibility CLI" +state: "closed" +created_at: "2026-06-05T20:30:06Z" +updated_at: "2026-06-05T22:13:36Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-203006-remove-tickets-sh/resolution.md b/.yoi/tickets/20260605-203006-003/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-remove-tickets-sh/resolution.md rename to .yoi/tickets/20260605-203006-003/resolution.md diff --git a/.yoi/tickets/closed/20260605-203006-remove-tickets-sh/thread.md b/.yoi/tickets/20260605-203006-003/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-remove-tickets-sh/thread.md rename to .yoi/tickets/20260605-203006-003/thread.md diff --git a/.yoi/tickets/closed/20260607-001651-workspace-panel-companion-pod-lifecycle/artifacts/.gitkeep b/.yoi/tickets/20260605-203006-004/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-001651-workspace-panel-companion-pod-lifecycle/artifacts/.gitkeep rename to .yoi/tickets/20260605-203006-004/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-203006-yoi-local-ticket-backend-migration/item.md b/.yoi/tickets/20260605-203006-004/item.md similarity index 90% rename from .yoi/tickets/closed/20260605-203006-yoi-local-ticket-backend-migration/item.md rename to .yoi/tickets/20260605-203006-004/item.md index a12bb315..19a5669d 100644 --- a/.yoi/tickets/closed/20260605-203006-yoi-local-ticket-backend-migration/item.md +++ b/.yoi/tickets/20260605-203006-004/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-203006-yoi-local-ticket-backend-migration -slug: yoi-local-ticket-backend-migration -title: Yoi-local Ticket backend migration -status: closed -kind: task -priority: P1 -labels: [ticket, backend, migration, cli] -created_at: 2026-06-05T20:30:06Z -updated_at: 2026-06-05T22:13:53Z -assignee: null +title: "Yoi-local Ticket backend migration" +state: "closed" +created_at: "2026-06-05T20:30:06Z" +updated_at: "2026-06-05T22:13:53Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-203006-yoi-local-ticket-backend-migration/resolution.md b/.yoi/tickets/20260605-203006-004/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-yoi-local-ticket-backend-migration/resolution.md rename to .yoi/tickets/20260605-203006-004/resolution.md diff --git a/.yoi/tickets/closed/20260605-203006-yoi-local-ticket-backend-migration/thread.md b/.yoi/tickets/20260605-203006-004/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-yoi-local-ticket-backend-migration/thread.md rename to .yoi/tickets/20260605-203006-004/thread.md diff --git a/.yoi/tickets/closed/20260607-001651-workspace-panel-remove-direct-pod-send/artifacts/.gitkeep b/.yoi/tickets/20260605-203006-005/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-001651-workspace-panel-remove-direct-pod-send/artifacts/.gitkeep rename to .yoi/tickets/20260605-203006-005/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/artifacts/delegation-intent.md b/.yoi/tickets/20260605-203006-005/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-203006-005/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/artifacts/implementation-report.md b/.yoi/tickets/20260605-203006-005/artifacts/implementation-report.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/artifacts/implementation-report.md rename to .yoi/tickets/20260605-203006-005/artifacts/implementation-report.md diff --git a/.yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/artifacts/review.md b/.yoi/tickets/20260605-203006-005/artifacts/review.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/artifacts/review.md rename to .yoi/tickets/20260605-203006-005/artifacts/review.md diff --git a/.yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/item.md b/.yoi/tickets/20260605-203006-005/item.md similarity index 90% rename from .yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/item.md rename to .yoi/tickets/20260605-203006-005/item.md index 92c00c0e..c4f1b3e5 100644 --- a/.yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/item.md +++ b/.yoi/tickets/20260605-203006-005/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-203006-yoi-ticket-cli-parity -slug: yoi-ticket-cli-parity -title: Yoi ticket CLI parity -status: closed -kind: task -priority: P1 -labels: [ticket, cli, backend] -created_at: 2026-06-05T20:30:06Z -updated_at: 2026-06-05T20:58:21Z -assignee: null +title: "Yoi ticket CLI parity" +state: "closed" +created_at: "2026-06-05T20:30:06Z" +updated_at: "2026-06-05T20:58:21Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/resolution.md b/.yoi/tickets/20260605-203006-005/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/resolution.md rename to .yoi/tickets/20260605-203006-005/resolution.md diff --git a/.yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/thread.md b/.yoi/tickets/20260605-203006-005/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-203006-yoi-ticket-cli-parity/thread.md rename to .yoi/tickets/20260605-203006-005/thread.md diff --git a/.yoi/tickets/closed/20260607-012131-workspace-panel-local-role-session-registry/artifacts/.gitkeep b/.yoi/tickets/20260605-210703-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-012131-workspace-panel-local-role-session-registry/artifacts/.gitkeep rename to .yoi/tickets/20260605-210703-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-210703-workspace-orchestration-panel/item.md b/.yoi/tickets/20260605-210703-001/item.md similarity index 90% rename from .yoi/tickets/closed/20260605-210703-workspace-orchestration-panel/item.md rename to .yoi/tickets/20260605-210703-001/item.md index 58cd9316..713acfd5 100644 --- a/.yoi/tickets/closed/20260605-210703-workspace-orchestration-panel/item.md +++ b/.yoi/tickets/20260605-210703-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-210703-workspace-orchestration-panel -slug: workspace-orchestration-panel -title: Workspace orchestration panel -status: closed -kind: task -priority: P1 -labels: [tui, ticket, orchestration, panel] -created_at: 2026-06-05T21:07:03Z -updated_at: 2026-06-06T06:05:38Z -assignee: null +title: "Workspace orchestration panel" +state: "closed" +created_at: "2026-06-05T21:07:03Z" +updated_at: "2026-06-06T06:05:38Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-210703-workspace-orchestration-panel/resolution.md b/.yoi/tickets/20260605-210703-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-210703-workspace-orchestration-panel/resolution.md rename to .yoi/tickets/20260605-210703-001/resolution.md diff --git a/.yoi/tickets/closed/20260605-210703-workspace-orchestration-panel/thread.md b/.yoi/tickets/20260605-210703-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-210703-workspace-orchestration-panel/thread.md rename to .yoi/tickets/20260605-210703-001/thread.md diff --git a/.yoi/tickets/closed/20260607-020215-workspace-panel-orchestrator-queue-automation/artifacts/.gitkeep b/.yoi/tickets/20260605-210704-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-020215-workspace-panel-orchestrator-queue-automation/artifacts/.gitkeep rename to .yoi/tickets/20260605-210704-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-210704-ticket-intake-orchestrator-handoff/artifacts/delegation-intent.md b/.yoi/tickets/20260605-210704-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-ticket-intake-orchestrator-handoff/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-210704-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-210704-ticket-intake-orchestrator-handoff/item.md b/.yoi/tickets/20260605-210704-001/item.md similarity index 82% rename from .yoi/tickets/closed/20260605-210704-ticket-intake-orchestrator-handoff/item.md rename to .yoi/tickets/20260605-210704-001/item.md index 673bcdd3..8a7602d8 100644 --- a/.yoi/tickets/closed/20260605-210704-ticket-intake-orchestrator-handoff/item.md +++ b/.yoi/tickets/20260605-210704-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-210704-ticket-intake-orchestrator-handoff -slug: ticket-intake-orchestrator-handoff -title: Ticket intake to orchestrator handoff -status: closed -kind: task -priority: P1 -labels: [ticket, intake, orchestrator, handoff] -created_at: 2026-06-05T21:07:04Z -updated_at: 2026-06-06T05:27:40Z -assignee: null +title: "Ticket intake to orchestrator handoff" +state: "closed" +created_at: "2026-06-05T21:07:04Z" +updated_at: "2026-06-06T05:27:40Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-210704-ticket-intake-orchestrator-handoff/resolution.md b/.yoi/tickets/20260605-210704-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-ticket-intake-orchestrator-handoff/resolution.md rename to .yoi/tickets/20260605-210704-001/resolution.md diff --git a/.yoi/tickets/closed/20260605-210704-ticket-intake-orchestrator-handoff/thread.md b/.yoi/tickets/20260605-210704-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-ticket-intake-orchestrator-handoff/thread.md rename to .yoi/tickets/20260605-210704-001/thread.md diff --git a/.yoi/tickets/closed/20260607-031439-ticket-init-role-profile-scaffold/artifacts/.gitkeep b/.yoi/tickets/20260605-210704-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-031439-ticket-init-role-profile-scaffold/artifacts/.gitkeep rename to .yoi/tickets/20260605-210704-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/artifacts/workspace-panel-ui-design.md b/.yoi/tickets/20260605-210704-002/artifacts/workspace-panel-ui-design.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/artifacts/workspace-panel-ui-design.md rename to .yoi/tickets/20260605-210704-002/artifacts/workspace-panel-ui-design.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/item.md b/.yoi/tickets/20260605-210704-002/item.md similarity index 87% rename from .yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/item.md rename to .yoi/tickets/20260605-210704-002/item.md index 94da8be7..52866d78 100644 --- a/.yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/item.md +++ b/.yoi/tickets/20260605-210704-002/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-210704-workspace-orchestration-panel-design -slug: workspace-orchestration-panel-design -title: Workspace orchestration panel design -status: closed -kind: task -priority: P1 -labels: [tui, design, orchestration, panel] -created_at: 2026-06-05T21:07:04Z -updated_at: 2026-06-05T22:35:18Z -assignee: null +title: "Workspace orchestration panel design" +state: "closed" +created_at: "2026-06-05T21:07:04Z" +updated_at: "2026-06-05T22:35:18Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/resolution.md b/.yoi/tickets/20260605-210704-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/resolution.md rename to .yoi/tickets/20260605-210704-002/resolution.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/thread.md b/.yoi/tickets/20260605-210704-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/thread.md rename to .yoi/tickets/20260605-210704-002/thread.md diff --git a/.yoi/tickets/closed/20260607-031439-ticket-role-launch-config-strict-validation/artifacts/.gitkeep b/.yoi/tickets/20260605-210704-003/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-031439-ticket-role-launch-config-strict-validation/artifacts/.gitkeep rename to .yoi/tickets/20260605-210704-003/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-action-model/artifacts/delegation-intent.md b/.yoi/tickets/20260605-210704-003/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-action-model/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-210704-003/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-action-model/item.md b/.yoi/tickets/20260605-210704-003/item.md similarity index 83% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-action-model/item.md rename to .yoi/tickets/20260605-210704-003/item.md index 774248d1..3386bc01 100644 --- a/.yoi/tickets/closed/20260605-210704-workspace-panel-action-model/item.md +++ b/.yoi/tickets/20260605-210704-003/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-210704-workspace-panel-action-model -slug: workspace-panel-action-model -title: Workspace panel action model -status: closed -kind: task -priority: P1 -labels: [tui, ticket, orchestration, panel] -created_at: 2026-06-05T21:07:04Z -updated_at: 2026-06-05T23:31:28Z -assignee: null +title: "Workspace panel action model" +state: "closed" +created_at: "2026-06-05T21:07:04Z" +updated_at: "2026-06-05T23:31:28Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-action-model/resolution.md b/.yoi/tickets/20260605-210704-003/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-action-model/resolution.md rename to .yoi/tickets/20260605-210704-003/resolution.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-action-model/thread.md b/.yoi/tickets/20260605-210704-003/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-action-model/thread.md rename to .yoi/tickets/20260605-210704-003/thread.md diff --git a/.yoi/tickets/closed/20260607-033536-ticket-lifecycle-pod-feature/artifacts/.gitkeep b/.yoi/tickets/20260605-210704-004/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-033536-ticket-lifecycle-pod-feature/artifacts/.gitkeep rename to .yoi/tickets/20260605-210704-004/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-composer-targets/artifacts/delegation-intent.md b/.yoi/tickets/20260605-210704-004/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-composer-targets/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-210704-004/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-composer-targets/item.md b/.yoi/tickets/20260605-210704-004/item.md similarity index 82% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-composer-targets/item.md rename to .yoi/tickets/20260605-210704-004/item.md index 5b7b1f2b..26fb0988 100644 --- a/.yoi/tickets/closed/20260605-210704-workspace-panel-composer-targets/item.md +++ b/.yoi/tickets/20260605-210704-004/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-210704-workspace-panel-composer-targets -slug: workspace-panel-composer-targets -title: Workspace panel composer targets -status: closed -kind: task -priority: P1 -labels: [tui, composer, intake, panel] -created_at: 2026-06-05T21:07:04Z -updated_at: 2026-06-06T04:47:31Z -assignee: null +title: "Workspace panel composer targets" +state: "closed" +created_at: "2026-06-05T21:07:04Z" +updated_at: "2026-06-06T04:47:31Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-composer-targets/resolution.md b/.yoi/tickets/20260605-210704-004/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-composer-targets/resolution.md rename to .yoi/tickets/20260605-210704-004/resolution.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-composer-targets/thread.md b/.yoi/tickets/20260605-210704-004/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-composer-targets/thread.md rename to .yoi/tickets/20260605-210704-004/thread.md diff --git a/.yoi/tickets/closed/20260607-035143-orchestrator-queued-ticket-routing/artifacts/.gitkeep b/.yoi/tickets/20260605-210704-005/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-035143-orchestrator-queued-ticket-routing/artifacts/.gitkeep rename to .yoi/tickets/20260605-210704-005/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-orchestrator-lifecycle/artifacts/delegation-intent.md b/.yoi/tickets/20260605-210704-005/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-orchestrator-lifecycle/artifacts/delegation-intent.md rename to .yoi/tickets/20260605-210704-005/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-orchestrator-lifecycle/item.md b/.yoi/tickets/20260605-210704-005/item.md similarity index 78% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-orchestrator-lifecycle/item.md rename to .yoi/tickets/20260605-210704-005/item.md index f9ee50cd..4517d901 100644 --- a/.yoi/tickets/closed/20260605-210704-workspace-panel-orchestrator-lifecycle/item.md +++ b/.yoi/tickets/20260605-210704-005/item.md @@ -1,14 +1,8 @@ --- -id: 20260605-210704-workspace-panel-orchestrator-lifecycle -slug: workspace-panel-orchestrator-lifecycle -title: Workspace panel orchestrator lifecycle -status: closed -kind: task -priority: P1 -labels: [tui, pod, orchestrator, panel] -created_at: 2026-06-05T21:07:04Z -updated_at: 2026-06-06T04:23:48Z -assignee: null +title: "Workspace panel orchestrator lifecycle" +state: "closed" +created_at: "2026-06-05T21:07:04Z" +updated_at: "2026-06-06T04:23:48Z" --- ## Background diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-orchestrator-lifecycle/resolution.md b/.yoi/tickets/20260605-210704-005/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-orchestrator-lifecycle/resolution.md rename to .yoi/tickets/20260605-210704-005/resolution.md diff --git a/.yoi/tickets/closed/20260605-210704-workspace-panel-orchestrator-lifecycle/thread.md b/.yoi/tickets/20260605-210704-005/thread.md similarity index 100% rename from .yoi/tickets/closed/20260605-210704-workspace-panel-orchestrator-lifecycle/thread.md rename to .yoi/tickets/20260605-210704-005/thread.md diff --git a/.yoi/tickets/closed/20260607-035201-orchestrator-worktree-agent-routing/artifacts/.gitkeep b/.yoi/tickets/20260606-052903-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-035201-orchestrator-worktree-agent-routing/artifacts/.gitkeep rename to .yoi/tickets/20260606-052903-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260606-052903-workspace-panel-ticket-action-dispatch/artifacts/delegation-intent.md b/.yoi/tickets/20260606-052903-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260606-052903-workspace-panel-ticket-action-dispatch/artifacts/delegation-intent.md rename to .yoi/tickets/20260606-052903-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260606-052903-workspace-panel-ticket-action-dispatch/item.md b/.yoi/tickets/20260606-052903-001/item.md similarity index 89% rename from .yoi/tickets/closed/20260606-052903-workspace-panel-ticket-action-dispatch/item.md rename to .yoi/tickets/20260606-052903-001/item.md index beed8aee..280c955b 100644 --- a/.yoi/tickets/closed/20260606-052903-workspace-panel-ticket-action-dispatch/item.md +++ b/.yoi/tickets/20260606-052903-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260606-052903-workspace-panel-ticket-action-dispatch -slug: workspace-panel-ticket-action-dispatch -title: Workspace panel Ticket action dispatch -status: closed -kind: task -priority: P1 -labels: [tui, ticket, orchestration, panel] -created_at: 2026-06-06T05:29:03Z -updated_at: 2026-06-06T06:04:40Z -assignee: null +title: "Workspace panel Ticket action dispatch" +state: "closed" +created_at: "2026-06-06T05:29:03Z" +updated_at: "2026-06-06T06:04:40Z" --- ## Background diff --git a/.yoi/tickets/closed/20260606-052903-workspace-panel-ticket-action-dispatch/resolution.md b/.yoi/tickets/20260606-052903-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260606-052903-workspace-panel-ticket-action-dispatch/resolution.md rename to .yoi/tickets/20260606-052903-001/resolution.md diff --git a/.yoi/tickets/closed/20260606-052903-workspace-panel-ticket-action-dispatch/thread.md b/.yoi/tickets/20260606-052903-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260606-052903-workspace-panel-ticket-action-dispatch/thread.md rename to .yoi/tickets/20260606-052903-001/thread.md diff --git a/.yoi/tickets/closed/20260607-035231-orchestrator-merge-completion/artifacts/.gitkeep b/.yoi/tickets/20260606-060548-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-035231-orchestrator-merge-completion/artifacts/.gitkeep rename to .yoi/tickets/20260606-060548-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260606-060548-workspace-panel-layout-display-tuning/artifacts/delegation-intent.md b/.yoi/tickets/20260606-060548-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260606-060548-workspace-panel-layout-display-tuning/artifacts/delegation-intent.md rename to .yoi/tickets/20260606-060548-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260606-060548-workspace-panel-layout-display-tuning/item.md b/.yoi/tickets/20260606-060548-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260606-060548-workspace-panel-layout-display-tuning/item.md rename to .yoi/tickets/20260606-060548-001/item.md index c9638d75..e56ad8d6 100644 --- a/.yoi/tickets/closed/20260606-060548-workspace-panel-layout-display-tuning/item.md +++ b/.yoi/tickets/20260606-060548-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260606-060548-workspace-panel-layout-display-tuning -slug: workspace-panel-layout-display-tuning -title: Workspace panel layout and display tuning -status: closed -kind: task -priority: P2 -labels: [tui, ticket, orchestration, panel, ux] -created_at: 2026-06-06T06:05:48Z -updated_at: 2026-06-06T21:16:52Z -assignee: null +title: "Workspace panel layout and display tuning" +state: "closed" +created_at: "2026-06-06T06:05:48Z" +updated_at: "2026-06-06T21:16:52Z" --- ## Background diff --git a/.yoi/tickets/closed/20260606-060548-workspace-panel-layout-display-tuning/resolution.md b/.yoi/tickets/20260606-060548-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260606-060548-workspace-panel-layout-display-tuning/resolution.md rename to .yoi/tickets/20260606-060548-001/resolution.md diff --git a/.yoi/tickets/closed/20260606-060548-workspace-panel-layout-display-tuning/thread.md b/.yoi/tickets/20260606-060548-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260606-060548-workspace-panel-layout-display-tuning/thread.md rename to .yoi/tickets/20260606-060548-001/thread.md diff --git a/.yoi/tickets/closed/20260607-035710-ticket-orchestration-plan-tool/artifacts/.gitkeep b/.yoi/tickets/20260606-210832-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-035710-ticket-orchestration-plan-tool/artifacts/.gitkeep rename to .yoi/tickets/20260606-210832-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260606-210832-remove-tui-ticket-commands/artifacts/delegation-intent.md b/.yoi/tickets/20260606-210832-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260606-210832-remove-tui-ticket-commands/artifacts/delegation-intent.md rename to .yoi/tickets/20260606-210832-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260606-210832-remove-tui-ticket-commands/item.md b/.yoi/tickets/20260606-210832-001/item.md similarity index 89% rename from .yoi/tickets/closed/20260606-210832-remove-tui-ticket-commands/item.md rename to .yoi/tickets/20260606-210832-001/item.md index 7249d6b4..dd68754d 100644 --- a/.yoi/tickets/closed/20260606-210832-remove-tui-ticket-commands/item.md +++ b/.yoi/tickets/20260606-210832-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260606-210832-remove-tui-ticket-commands -slug: remove-tui-ticket-commands -title: 'Remove obsolete TUI :ticket commands' -status: closed -kind: task -priority: P2 -labels: [tui, ticket, cleanup, panel] -created_at: 2026-06-06T21:08:32Z -updated_at: 2026-06-06T21:28:39Z -assignee: null +title: "Remove obsolete TUI :ticket commands" +state: "closed" +created_at: "2026-06-06T21:08:32Z" +updated_at: "2026-06-06T21:28:39Z" --- ## Background diff --git a/.yoi/tickets/closed/20260606-210832-remove-tui-ticket-commands/resolution.md b/.yoi/tickets/20260606-210832-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260606-210832-remove-tui-ticket-commands/resolution.md rename to .yoi/tickets/20260606-210832-001/resolution.md diff --git a/.yoi/tickets/closed/20260606-210832-remove-tui-ticket-commands/thread.md b/.yoi/tickets/20260606-210832-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260606-210832-remove-tui-ticket-commands/thread.md rename to .yoi/tickets/20260606-210832-001/thread.md diff --git a/.yoi/tickets/closed/20260607-062902-memory-root-uses-yoi-memory-marker/artifacts/.gitkeep b/.yoi/tickets/20260606-215403-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-062902-memory-root-uses-yoi-memory-marker/artifacts/.gitkeep rename to .yoi/tickets/20260606-215403-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260606-215403-explicit-ticket-workflow-state/artifacts/delegation-intent.md b/.yoi/tickets/20260606-215403-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260606-215403-explicit-ticket-workflow-state/artifacts/delegation-intent.md rename to .yoi/tickets/20260606-215403-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260606-215403-explicit-ticket-workflow-state/item.md b/.yoi/tickets/20260606-215403-001/item.md similarity index 95% rename from .yoi/tickets/closed/20260606-215403-explicit-ticket-workflow-state/item.md rename to .yoi/tickets/20260606-215403-001/item.md index c72bb607..334d1d94 100644 --- a/.yoi/tickets/closed/20260606-215403-explicit-ticket-workflow-state/item.md +++ b/.yoi/tickets/20260606-215403-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260606-215403-explicit-ticket-workflow-state -slug: explicit-ticket-workflow-state -title: Replace inferred panel Ticket state with explicit workflow state -status: closed -kind: task -priority: P1 -labels: [ticket, tui, orchestration, panel, state] -created_at: 2026-06-06T21:54:03Z -updated_at: 2026-06-07T00:08:04Z -assignee: null -workflow_state: done +title: "Replace inferred panel Ticket state with explicit workflow state" +state: "closed" +created_at: "2026-06-06T21:54:03Z" +updated_at: "2026-06-07T00:08:04Z" --- ## Background diff --git a/.yoi/tickets/closed/20260606-215403-explicit-ticket-workflow-state/resolution.md b/.yoi/tickets/20260606-215403-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260606-215403-explicit-ticket-workflow-state/resolution.md rename to .yoi/tickets/20260606-215403-001/resolution.md diff --git a/.yoi/tickets/closed/20260606-215403-explicit-ticket-workflow-state/thread.md b/.yoi/tickets/20260606-215403-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260606-215403-explicit-ticket-workflow-state/thread.md rename to .yoi/tickets/20260606-215403-001/thread.md diff --git a/.yoi/tickets/closed/20260607-062902-narrow-yoi-worktree-sparse-exclusions/artifacts/.gitkeep b/.yoi/tickets/20260606-221301-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-062902-narrow-yoi-worktree-sparse-exclusions/artifacts/.gitkeep rename to .yoi/tickets/20260606-221301-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260606-221301-typed-ticket-thread-event-log/artifacts/delegation-intent.md b/.yoi/tickets/20260606-221301-001/artifacts/delegation-intent.md similarity index 100% rename from .yoi/tickets/closed/20260606-221301-typed-ticket-thread-event-log/artifacts/delegation-intent.md rename to .yoi/tickets/20260606-221301-001/artifacts/delegation-intent.md diff --git a/.yoi/tickets/closed/20260606-221301-typed-ticket-thread-event-log/item.md b/.yoi/tickets/20260606-221301-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260606-221301-typed-ticket-thread-event-log/item.md rename to .yoi/tickets/20260606-221301-001/item.md index 18c30cc0..4734dddc 100644 --- a/.yoi/tickets/closed/20260606-221301-typed-ticket-thread-event-log/item.md +++ b/.yoi/tickets/20260606-221301-001/item.md @@ -1,14 +1,8 @@ --- -id: 20260606-221301-typed-ticket-thread-event-log -slug: typed-ticket-thread-event-log -title: Typed Ticket thread event log for workflow state changes -status: closed -kind: task -priority: P1 -labels: [ticket, orchestration, state, audit] -created_at: 2026-06-06T22:13:01Z -updated_at: 2026-06-06T22:48:18Z -assignee: null +title: "Typed Ticket thread event log for workflow state changes" +state: "closed" +created_at: "2026-06-06T22:13:01Z" +updated_at: "2026-06-06T22:48:18Z" --- ## Background diff --git a/.yoi/tickets/closed/20260606-221301-typed-ticket-thread-event-log/resolution.md b/.yoi/tickets/20260606-221301-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260606-221301-typed-ticket-thread-event-log/resolution.md rename to .yoi/tickets/20260606-221301-001/resolution.md diff --git a/.yoi/tickets/closed/20260606-221301-typed-ticket-thread-event-log/thread.md b/.yoi/tickets/20260606-221301-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260606-221301-typed-ticket-thread-event-log/thread.md rename to .yoi/tickets/20260606-221301-001/thread.md diff --git a/.yoi/tickets/closed/20260607-084344-remove-fixed-investigator-ticket-role/artifacts/.gitkeep b/.yoi/tickets/20260606-233520-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-084344-remove-fixed-investigator-ticket-role/artifacts/.gitkeep rename to .yoi/tickets/20260606-233520-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260606-233520-workspace-panel-nonblocking-transitions/item.md b/.yoi/tickets/20260606-233520-001/item.md similarity index 89% rename from .yoi/tickets/closed/20260606-233520-workspace-panel-nonblocking-transitions/item.md rename to .yoi/tickets/20260606-233520-001/item.md index a1c46053..fce075c9 100644 --- a/.yoi/tickets/closed/20260606-233520-workspace-panel-nonblocking-transitions/item.md +++ b/.yoi/tickets/20260606-233520-001/item.md @@ -1,17 +1,10 @@ --- -id: 20260606-233520-workspace-panel-nonblocking-transitions -slug: workspace-panel-nonblocking-transitions -title: Make workspace panel transitions non-blocking -status: 'closed' -kind: task -priority: P2 -labels: [tui, panel, ux, performance] -created_at: 2026-06-06T23:35:20Z -updated_at: '2026-06-08T02:29:21Z' -assignee: null -workflow_state: 'done' -queued_by: 'workspace-panel' -queued_at: '2026-06-08T00:02:21Z' +title: "Make workspace panel transitions non-blocking" +state: "closed" +created_at: "2026-06-06T23:35:20Z" +updated_at: "2026-06-08T02:29:21Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T00:02:21Z" --- ## Background diff --git a/.yoi/tickets/closed/20260606-233520-workspace-panel-nonblocking-transitions/resolution.md b/.yoi/tickets/20260606-233520-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260606-233520-workspace-panel-nonblocking-transitions/resolution.md rename to .yoi/tickets/20260606-233520-001/resolution.md diff --git a/.yoi/tickets/closed/20260606-233520-workspace-panel-nonblocking-transitions/thread.md b/.yoi/tickets/20260606-233520-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260606-233520-workspace-panel-nonblocking-transitions/thread.md rename to .yoi/tickets/20260606-233520-001/thread.md diff --git a/.yoi/tickets/closed/20260607-095142-workspace-orchestrator-spawn-diagnostic-persistence/artifacts/.gitkeep b/.yoi/tickets/20260607-001651-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-095142-workspace-orchestrator-spawn-diagnostic-persistence/artifacts/.gitkeep rename to .yoi/tickets/20260607-001651-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260607-001651-companion-status-context-tool-policy/item.md b/.yoi/tickets/20260607-001651-001/item.md similarity index 88% rename from .yoi/tickets/open/20260607-001651-companion-status-context-tool-policy/item.md rename to .yoi/tickets/20260607-001651-001/item.md index 79d319e4..e3f12101 100644 --- a/.yoi/tickets/open/20260607-001651-companion-status-context-tool-policy/item.md +++ b/.yoi/tickets/20260607-001651-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-001651-companion-status-context-tool-policy -slug: companion-status-context-tool-policy -title: Companion status context and tool policy -status: open -kind: task -priority: P2 -labels: [companion, profile, prompt, tools, panel] -workflow_state: planning -created_at: 2026-06-07T00:16:51Z -updated_at: 2026-06-07T02:45:32Z -assignee: null +title: "Companion status context and tool policy" +state: "planning" +created_at: "2026-06-07T00:16:51Z" +updated_at: "2026-06-07T02:45:32Z" --- ## Background diff --git a/.yoi/tickets/open/20260607-001651-companion-status-context-tool-policy/thread.md b/.yoi/tickets/20260607-001651-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260607-001651-companion-status-context-tool-policy/thread.md rename to .yoi/tickets/20260607-001651-001/thread.md diff --git a/.yoi/tickets/closed/20260607-220225-commit-intake-claims-after-launch-success/artifacts/.gitkeep b/.yoi/tickets/20260607-001651-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-220225-commit-intake-claims-after-launch-success/artifacts/.gitkeep rename to .yoi/tickets/20260607-001651-002/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260607-001651-workspace-panel-companion-interface/item.md b/.yoi/tickets/20260607-001651-002/item.md similarity index 89% rename from .yoi/tickets/open/20260607-001651-workspace-panel-companion-interface/item.md rename to .yoi/tickets/20260607-001651-002/item.md index 0474deff..77535e7b 100644 --- a/.yoi/tickets/open/20260607-001651-workspace-panel-companion-interface/item.md +++ b/.yoi/tickets/20260607-001651-002/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-001651-workspace-panel-companion-interface -slug: workspace-panel-companion-interface -title: Workspace panel Companion interface -status: open -kind: task -priority: P2 -labels: [tui, panel, companion, orchestration] -workflow_state: planning -created_at: 2026-06-07T00:16:51Z -updated_at: 2026-06-07T03:13:01Z -assignee: null +title: "Workspace panel Companion interface" +state: "planning" +created_at: "2026-06-07T00:16:51Z" +updated_at: "2026-06-07T03:13:01Z" --- ## Background diff --git a/.yoi/tickets/open/20260607-001651-workspace-panel-companion-interface/thread.md b/.yoi/tickets/20260607-001651-002/thread.md similarity index 100% rename from .yoi/tickets/open/20260607-001651-workspace-panel-companion-interface/thread.md rename to .yoi/tickets/20260607-001651-002/thread.md diff --git a/.yoi/tickets/closed/20260607-225448-replace-intake-state-with-planning/artifacts/.gitkeep b/.yoi/tickets/20260607-001651-003/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-225448-replace-intake-state-with-planning/artifacts/.gitkeep rename to .yoi/tickets/20260607-001651-003/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-001651-workspace-panel-companion-pod-lifecycle/item.md b/.yoi/tickets/20260607-001651-003/item.md similarity index 89% rename from .yoi/tickets/closed/20260607-001651-workspace-panel-companion-pod-lifecycle/item.md rename to .yoi/tickets/20260607-001651-003/item.md index e208cf72..dbda12bd 100644 --- a/.yoi/tickets/closed/20260607-001651-workspace-panel-companion-pod-lifecycle/item.md +++ b/.yoi/tickets/20260607-001651-003/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-001651-workspace-panel-companion-pod-lifecycle -slug: workspace-panel-companion-pod-lifecycle -title: Workspace panel Companion Pod lifecycle -status: closed -kind: task -priority: P2 -labels: [tui, panel, companion, pod] -workflow_state: done -created_at: 2026-06-07T00:16:51Z -updated_at: 2026-06-07T20:45:36Z -assignee: null +title: "Workspace panel Companion Pod lifecycle" +state: "closed" +created_at: "2026-06-07T00:16:51Z" +updated_at: "2026-06-07T20:45:36Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-001651-workspace-panel-companion-pod-lifecycle/resolution.md b/.yoi/tickets/20260607-001651-003/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-001651-workspace-panel-companion-pod-lifecycle/resolution.md rename to .yoi/tickets/20260607-001651-003/resolution.md diff --git a/.yoi/tickets/closed/20260607-001651-workspace-panel-companion-pod-lifecycle/thread.md b/.yoi/tickets/20260607-001651-003/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-001651-workspace-panel-companion-pod-lifecycle/thread.md rename to .yoi/tickets/20260607-001651-003/thread.md diff --git a/.yoi/tickets/closed/20260607-235442-remove-profile-derived-pod-names/artifacts/.gitkeep b/.yoi/tickets/20260607-001651-004/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-235442-remove-profile-derived-pod-names/artifacts/.gitkeep rename to .yoi/tickets/20260607-001651-004/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-001651-workspace-panel-remove-direct-pod-send/item.md b/.yoi/tickets/20260607-001651-004/item.md similarity index 84% rename from .yoi/tickets/closed/20260607-001651-workspace-panel-remove-direct-pod-send/item.md rename to .yoi/tickets/20260607-001651-004/item.md index 21f0c605..54605aee 100644 --- a/.yoi/tickets/closed/20260607-001651-workspace-panel-remove-direct-pod-send/item.md +++ b/.yoi/tickets/20260607-001651-004/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-001651-workspace-panel-remove-direct-pod-send -slug: workspace-panel-remove-direct-pod-send -title: Remove workspace panel direct Pod send -status: closed -kind: task -priority: P1 -labels: [tui, panel, companion, cleanup] -workflow_state: done -created_at: 2026-06-07T00:16:51Z -updated_at: 2026-06-07T02:00:58Z -assignee: null +title: "Remove workspace panel direct Pod send" +state: "closed" +created_at: "2026-06-07T00:16:51Z" +updated_at: "2026-06-07T02:00:58Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-001651-workspace-panel-remove-direct-pod-send/resolution.md b/.yoi/tickets/20260607-001651-004/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-001651-workspace-panel-remove-direct-pod-send/resolution.md rename to .yoi/tickets/20260607-001651-004/resolution.md diff --git a/.yoi/tickets/closed/20260607-001651-workspace-panel-remove-direct-pod-send/thread.md b/.yoi/tickets/20260607-001651-004/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-001651-workspace-panel-remove-direct-pod-send/thread.md rename to .yoi/tickets/20260607-001651-004/thread.md diff --git a/.yoi/tickets/closed/20260607-235505-use-workspace-basename-for-default-pod-name/artifacts/.gitkeep b/.yoi/tickets/20260607-012131-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260607-235505-use-workspace-basename-for-default-pod-name/artifacts/.gitkeep rename to .yoi/tickets/20260607-012131-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-012131-workspace-panel-local-role-session-registry/item.md b/.yoi/tickets/20260607-012131-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260607-012131-workspace-panel-local-role-session-registry/item.md rename to .yoi/tickets/20260607-012131-001/item.md index 3446031b..3321298c 100644 --- a/.yoi/tickets/closed/20260607-012131-workspace-panel-local-role-session-registry/item.md +++ b/.yoi/tickets/20260607-012131-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-012131-workspace-panel-local-role-session-registry -slug: workspace-panel-local-role-session-registry -title: Workspace panel local role session registry -status: closed -kind: task -priority: P1 -labels: [tui, panel, ticket, pod, orchestration] -workflow_state: done -created_at: 2026-06-07T01:21:31Z -updated_at: 2026-06-07T02:34:48Z -assignee: null +title: "Workspace panel local role session registry" +state: "closed" +created_at: "2026-06-07T01:21:31Z" +updated_at: "2026-06-07T02:34:48Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-012131-workspace-panel-local-role-session-registry/resolution.md b/.yoi/tickets/20260607-012131-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-012131-workspace-panel-local-role-session-registry/resolution.md rename to .yoi/tickets/20260607-012131-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-012131-workspace-panel-local-role-session-registry/thread.md b/.yoi/tickets/20260607-012131-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-012131-workspace-panel-local-role-session-registry/thread.md rename to .yoi/tickets/20260607-012131-001/thread.md diff --git a/.yoi/tickets/closed/20260608-000047-introduce-runtime-workspace-root-context/artifacts/.gitkeep b/.yoi/tickets/20260607-020215-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-000047-introduce-runtime-workspace-root-context/artifacts/.gitkeep rename to .yoi/tickets/20260607-020215-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-020215-workspace-panel-orchestrator-queue-automation/item.md b/.yoi/tickets/20260607-020215-001/item.md similarity index 94% rename from .yoi/tickets/closed/20260607-020215-workspace-panel-orchestrator-queue-automation/item.md rename to .yoi/tickets/20260607-020215-001/item.md index b45db57c..f38b63a8 100644 --- a/.yoi/tickets/closed/20260607-020215-workspace-panel-orchestrator-queue-automation/item.md +++ b/.yoi/tickets/20260607-020215-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-020215-workspace-panel-orchestrator-queue-automation -slug: workspace-panel-orchestrator-queue-automation -title: Workspace panel Orchestrator queue automation -status: 'closed' -kind: task -priority: P1 -labels: [panel, orchestrator, ticket, automation, workflow] -workflow_state: 'done' -created_at: 2026-06-07T02:02:15Z -updated_at: '2026-06-09T04:44:35Z' -assignee: null +title: "Workspace panel Orchestrator queue automation" +state: "closed" +created_at: "2026-06-07T02:02:15Z" +updated_at: "2026-06-09T04:44:35Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-020215-workspace-panel-orchestrator-queue-automation/resolution.md b/.yoi/tickets/20260607-020215-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-020215-workspace-panel-orchestrator-queue-automation/resolution.md rename to .yoi/tickets/20260607-020215-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-020215-workspace-panel-orchestrator-queue-automation/thread.md b/.yoi/tickets/20260607-020215-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-020215-workspace-panel-orchestrator-queue-automation/thread.md rename to .yoi/tickets/20260607-020215-001/thread.md diff --git a/.yoi/tickets/closed/20260608-010442-split-direct-and-delegation-authority/artifacts/.gitkeep b/.yoi/tickets/20260607-022328-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-010442-split-direct-and-delegation-authority/artifacts/.gitkeep rename to .yoi/tickets/20260607-022328-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260607-022328-preserve-active-workflows-across-compaction/item.md b/.yoi/tickets/20260607-022328-001/item.md similarity index 88% rename from .yoi/tickets/open/20260607-022328-preserve-active-workflows-across-compaction/item.md rename to .yoi/tickets/20260607-022328-001/item.md index 302a6563..d5555e1b 100644 --- a/.yoi/tickets/open/20260607-022328-preserve-active-workflows-across-compaction/item.md +++ b/.yoi/tickets/20260607-022328-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-022328-preserve-active-workflows-across-compaction -slug: preserve-active-workflows-across-compaction -title: Preserve active workflows across compaction -status: open -kind: task -priority: P1 -labels: [workflow, compaction, history, orchestration] -workflow_state: planning -created_at: 2026-06-07T02:23:28Z -updated_at: 2026-06-07T02:23:28Z -assignee: null +title: "Preserve active workflows across compaction" +state: "planning" +created_at: "2026-06-07T02:23:28Z" +updated_at: "2026-06-07T02:23:28Z" --- ## Background diff --git a/.yoi/tickets/open/20260607-022328-preserve-active-workflows-across-compaction/thread.md b/.yoi/tickets/20260607-022328-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260607-022328-preserve-active-workflows-across-compaction/thread.md rename to .yoi/tickets/20260607-022328-001/thread.md diff --git a/.yoi/tickets/closed/20260608-011036-allow-spawnpod-child-workspace-cwd/artifacts/.gitkeep b/.yoi/tickets/20260607-031439-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-011036-allow-spawnpod-child-workspace-cwd/artifacts/.gitkeep rename to .yoi/tickets/20260607-031439-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-031439-ticket-init-role-profile-scaffold/item.md b/.yoi/tickets/20260607-031439-001/item.md similarity index 89% rename from .yoi/tickets/closed/20260607-031439-ticket-init-role-profile-scaffold/item.md rename to .yoi/tickets/20260607-031439-001/item.md index 12149d77..a9b00022 100644 --- a/.yoi/tickets/closed/20260607-031439-ticket-init-role-profile-scaffold/item.md +++ b/.yoi/tickets/20260607-031439-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-031439-ticket-init-role-profile-scaffold -slug: ticket-init-role-profile-scaffold -title: Scaffold explicit Ticket role profiles in init config -status: closed -kind: task -priority: P1 -labels: [ticket, config, init, profiles, panel] -workflow_state: done -created_at: 2026-06-07T03:14:39Z -updated_at: 2026-06-07T04:05:15Z -assignee: null +title: "Scaffold explicit Ticket role profiles in init config" +state: "closed" +created_at: "2026-06-07T03:14:39Z" +updated_at: "2026-06-07T04:05:15Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-031439-ticket-init-role-profile-scaffold/resolution.md b/.yoi/tickets/20260607-031439-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-031439-ticket-init-role-profile-scaffold/resolution.md rename to .yoi/tickets/20260607-031439-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-031439-ticket-init-role-profile-scaffold/thread.md b/.yoi/tickets/20260607-031439-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-031439-ticket-init-role-profile-scaffold/thread.md rename to .yoi/tickets/20260607-031439-001/thread.md diff --git a/.yoi/tickets/closed/20260608-014602-remove-non-goals-from-workflow-templates/artifacts/.gitkeep b/.yoi/tickets/20260607-031439-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-014602-remove-non-goals-from-workflow-templates/artifacts/.gitkeep rename to .yoi/tickets/20260607-031439-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-031439-ticket-role-launch-config-strict-validation/item.md b/.yoi/tickets/20260607-031439-002/item.md similarity index 88% rename from .yoi/tickets/closed/20260607-031439-ticket-role-launch-config-strict-validation/item.md rename to .yoi/tickets/20260607-031439-002/item.md index 03578f17..55975102 100644 --- a/.yoi/tickets/closed/20260607-031439-ticket-role-launch-config-strict-validation/item.md +++ b/.yoi/tickets/20260607-031439-002/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-031439-ticket-role-launch-config-strict-validation -slug: ticket-role-launch-config-strict-validation -title: Strictly validate Ticket role launch config -status: closed -kind: task -priority: P1 -labels: [ticket, config, validation, panel, profiles] -workflow_state: done -created_at: 2026-06-07T03:14:39Z -updated_at: 2026-06-07T03:42:39Z -assignee: null +title: "Strictly validate Ticket role launch config" +state: "closed" +created_at: "2026-06-07T03:14:39Z" +updated_at: "2026-06-07T03:42:39Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-031439-ticket-role-launch-config-strict-validation/resolution.md b/.yoi/tickets/20260607-031439-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-031439-ticket-role-launch-config-strict-validation/resolution.md rename to .yoi/tickets/20260607-031439-002/resolution.md diff --git a/.yoi/tickets/closed/20260607-031439-ticket-role-launch-config-strict-validation/thread.md b/.yoi/tickets/20260607-031439-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-031439-ticket-role-launch-config-strict-validation/thread.md rename to .yoi/tickets/20260607-031439-002/thread.md diff --git a/.yoi/tickets/closed/20260608-015630-abort-podclient-reader-task-on-drop/artifacts/.gitkeep b/.yoi/tickets/20260607-033536-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-015630-abort-podclient-reader-task-on-drop/artifacts/.gitkeep rename to .yoi/tickets/20260607-033536-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-033536-ticket-lifecycle-pod-feature/item.md b/.yoi/tickets/20260607-033536-001/item.md similarity index 93% rename from .yoi/tickets/closed/20260607-033536-ticket-lifecycle-pod-feature/item.md rename to .yoi/tickets/20260607-033536-001/item.md index 6cd4d80b..e85d5d3d 100644 --- a/.yoi/tickets/closed/20260607-033536-ticket-lifecycle-pod-feature/item.md +++ b/.yoi/tickets/20260607-033536-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-033536-ticket-lifecycle-pod-feature -slug: ticket-lifecycle-pod-feature -title: Ticket lifecycle pod feature -status: closed -kind: task -priority: P1 -labels: [ticket, pod-feature, tools, orchestration, workflow] -workflow_state: done -created_at: 2026-06-07T03:35:36Z -updated_at: 2026-06-07T04:03:33Z -assignee: null +title: "Ticket lifecycle pod feature" +state: "closed" +created_at: "2026-06-07T03:35:36Z" +updated_at: "2026-06-07T04:03:33Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-033536-ticket-lifecycle-pod-feature/resolution.md b/.yoi/tickets/20260607-033536-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-033536-ticket-lifecycle-pod-feature/resolution.md rename to .yoi/tickets/20260607-033536-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-033536-ticket-lifecycle-pod-feature/thread.md b/.yoi/tickets/20260607-033536-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-033536-ticket-lifecycle-pod-feature/thread.md rename to .yoi/tickets/20260607-033536-001/thread.md diff --git a/.yoi/tickets/closed/20260608-032200-panel-close-done-tickets/artifacts/.gitkeep b/.yoi/tickets/20260607-035143-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-032200-panel-close-done-tickets/artifacts/.gitkeep rename to .yoi/tickets/20260607-035143-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-035143-orchestrator-queued-ticket-routing/item.md b/.yoi/tickets/20260607-035143-001/item.md similarity index 90% rename from .yoi/tickets/closed/20260607-035143-orchestrator-queued-ticket-routing/item.md rename to .yoi/tickets/20260607-035143-001/item.md index 679a2b6e..f9e0674e 100644 --- a/.yoi/tickets/closed/20260607-035143-orchestrator-queued-ticket-routing/item.md +++ b/.yoi/tickets/20260607-035143-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-035143-orchestrator-queued-ticket-routing -slug: orchestrator-queued-ticket-routing -title: Orchestrator queued Ticket routing -status: closed -kind: task -priority: P1 -labels: [panel, orchestrator, ticket, routing, workflow] -workflow_state: done -created_at: 2026-06-07T03:51:43Z -updated_at: 2026-06-07T05:13:36Z -assignee: null +title: "Orchestrator queued Ticket routing" +state: "closed" +created_at: "2026-06-07T03:51:43Z" +updated_at: "2026-06-07T05:13:36Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-035143-orchestrator-queued-ticket-routing/resolution.md b/.yoi/tickets/20260607-035143-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-035143-orchestrator-queued-ticket-routing/resolution.md rename to .yoi/tickets/20260607-035143-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-035143-orchestrator-queued-ticket-routing/thread.md b/.yoi/tickets/20260607-035143-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-035143-orchestrator-queued-ticket-routing/thread.md rename to .yoi/tickets/20260607-035143-001/thread.md diff --git a/.yoi/tickets/closed/20260608-032911-separate-ticket-record-language-from-worker-language/artifacts/.gitkeep b/.yoi/tickets/20260607-035201-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-032911-separate-ticket-record-language-from-worker-language/artifacts/.gitkeep rename to .yoi/tickets/20260607-035201-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-035201-orchestrator-worktree-agent-routing/item.md b/.yoi/tickets/20260607-035201-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260607-035201-orchestrator-worktree-agent-routing/item.md rename to .yoi/tickets/20260607-035201-001/item.md index 2e063d4d..efba16d6 100644 --- a/.yoi/tickets/closed/20260607-035201-orchestrator-worktree-agent-routing/item.md +++ b/.yoi/tickets/20260607-035201-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-035201-orchestrator-worktree-agent-routing -slug: orchestrator-worktree-agent-routing -title: Orchestrator worktree agent routing -status: closed -kind: task -priority: P1 -labels: [orchestrator, worktree, pod, review, workflow] -workflow_state: done -created_at: 2026-06-07T03:52:01Z -updated_at: 2026-06-07T05:55:57Z -assignee: null +title: "Orchestrator worktree agent routing" +state: "closed" +created_at: "2026-06-07T03:52:01Z" +updated_at: "2026-06-07T05:55:57Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-035201-orchestrator-worktree-agent-routing/resolution.md b/.yoi/tickets/20260607-035201-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-035201-orchestrator-worktree-agent-routing/resolution.md rename to .yoi/tickets/20260607-035201-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-035201-orchestrator-worktree-agent-routing/thread.md b/.yoi/tickets/20260607-035201-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-035201-orchestrator-worktree-agent-routing/thread.md rename to .yoi/tickets/20260607-035201-001/thread.md diff --git a/.yoi/tickets/closed/20260608-054546-shutdown-intake-pod-after-ready-idle/artifacts/.gitkeep b/.yoi/tickets/20260607-035231-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-054546-shutdown-intake-pod-after-ready-idle/artifacts/.gitkeep rename to .yoi/tickets/20260607-035231-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-035231-orchestrator-merge-completion/item.md b/.yoi/tickets/20260607-035231-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260607-035231-orchestrator-merge-completion/item.md rename to .yoi/tickets/20260607-035231-001/item.md index aaddcb3f..97aee535 100644 --- a/.yoi/tickets/closed/20260607-035231-orchestrator-merge-completion/item.md +++ b/.yoi/tickets/20260607-035231-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-035231-orchestrator-merge-completion -slug: orchestrator-merge-completion -title: Orchestrator merge completion -status: closed -kind: task -priority: P1 -labels: [orchestrator, merge, ticket, workflow, validation] -workflow_state: done -created_at: 2026-06-07T03:52:31Z -updated_at: 2026-06-07T06:47:03Z -assignee: null +title: "Orchestrator merge completion" +state: "closed" +created_at: "2026-06-07T03:52:31Z" +updated_at: "2026-06-07T06:47:03Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-035231-orchestrator-merge-completion/resolution.md b/.yoi/tickets/20260607-035231-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-035231-orchestrator-merge-completion/resolution.md rename to .yoi/tickets/20260607-035231-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-035231-orchestrator-merge-completion/thread.md b/.yoi/tickets/20260607-035231-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-035231-orchestrator-merge-completion/thread.md rename to .yoi/tickets/20260607-035231-001/thread.md diff --git a/.yoi/tickets/closed/20260608-071722-orchestrator-return-to-planning-context-policy/artifacts/.gitkeep b/.yoi/tickets/20260607-035710-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-071722-orchestrator-return-to-planning-context-policy/artifacts/.gitkeep rename to .yoi/tickets/20260607-035710-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-035710-ticket-orchestration-plan-tool/item.md b/.yoi/tickets/20260607-035710-001/item.md similarity index 89% rename from .yoi/tickets/closed/20260607-035710-ticket-orchestration-plan-tool/item.md rename to .yoi/tickets/20260607-035710-001/item.md index 8ef95bb3..e69cceb9 100644 --- a/.yoi/tickets/closed/20260607-035710-ticket-orchestration-plan-tool/item.md +++ b/.yoi/tickets/20260607-035710-001/item.md @@ -1,17 +1,10 @@ --- -id: 20260607-035710-ticket-orchestration-plan-tool -slug: ticket-orchestration-plan-tool -title: Ticket orchestration plan tool -status: 'closed' -kind: task -priority: P1 -labels: [ticket, orchestrator, planning, workflow, tools] -workflow_state: 'done' -created_at: 2026-06-07T03:57:10Z -updated_at: '2026-06-08T23:36:49Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T11:21:13Z' +title: "Ticket orchestration plan tool" +state: "closed" +created_at: "2026-06-07T03:57:10Z" +updated_at: "2026-06-08T23:36:49Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T11:21:13Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-035710-ticket-orchestration-plan-tool/resolution.md b/.yoi/tickets/20260607-035710-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-035710-ticket-orchestration-plan-tool/resolution.md rename to .yoi/tickets/20260607-035710-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-035710-ticket-orchestration-plan-tool/thread.md b/.yoi/tickets/20260607-035710-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-035710-ticket-orchestration-plan-tool/thread.md rename to .yoi/tickets/20260607-035710-001/thread.md diff --git a/.yoi/tickets/closed/20260608-103133-tui-chat-markdown-table-rendering/artifacts/.gitkeep b/.yoi/tickets/20260607-062902-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-103133-tui-chat-markdown-table-rendering/artifacts/.gitkeep rename to .yoi/tickets/20260607-062902-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-062902-memory-root-uses-yoi-memory-marker/item.md b/.yoi/tickets/20260607-062902-001/item.md similarity index 89% rename from .yoi/tickets/closed/20260607-062902-memory-root-uses-yoi-memory-marker/item.md rename to .yoi/tickets/20260607-062902-001/item.md index 4cc3d9f7..7f2c43c8 100644 --- a/.yoi/tickets/closed/20260607-062902-memory-root-uses-yoi-memory-marker/item.md +++ b/.yoi/tickets/20260607-062902-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-062902-memory-root-uses-yoi-memory-marker -slug: memory-root-uses-yoi-memory-marker -title: Use .yoi/memory marker for repo-local memory root -status: closed -kind: task -priority: P1 -labels: [memory, workspace, worktree, config] -workflow_state: done -created_at: 2026-06-07T06:29:02Z -updated_at: 2026-06-07T07:59:04Z -assignee: null +title: "Use .yoi/memory marker for repo-local memory root" +state: "closed" +created_at: "2026-06-07T06:29:02Z" +updated_at: "2026-06-07T07:59:04Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-062902-memory-root-uses-yoi-memory-marker/resolution.md b/.yoi/tickets/20260607-062902-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-062902-memory-root-uses-yoi-memory-marker/resolution.md rename to .yoi/tickets/20260607-062902-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-062902-memory-root-uses-yoi-memory-marker/thread.md b/.yoi/tickets/20260607-062902-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-062902-memory-root-uses-yoi-memory-marker/thread.md rename to .yoi/tickets/20260607-062902-001/thread.md diff --git a/.yoi/tickets/closed/20260608-103842-remove-legacy-ticket-schema-fields/artifacts/.gitkeep b/.yoi/tickets/20260607-062902-002/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-103842-remove-legacy-ticket-schema-fields/artifacts/.gitkeep rename to .yoi/tickets/20260607-062902-002/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-062902-narrow-yoi-worktree-sparse-exclusions/item.md b/.yoi/tickets/20260607-062902-002/item.md similarity index 88% rename from .yoi/tickets/closed/20260607-062902-narrow-yoi-worktree-sparse-exclusions/item.md rename to .yoi/tickets/20260607-062902-002/item.md index ab8b2b8b..9cd9ff6b 100644 --- a/.yoi/tickets/closed/20260607-062902-narrow-yoi-worktree-sparse-exclusions/item.md +++ b/.yoi/tickets/20260607-062902-002/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-062902-narrow-yoi-worktree-sparse-exclusions -slug: narrow-yoi-worktree-sparse-exclusions -title: Narrow child worktree .yoi sparse exclusions -status: closed -kind: task -priority: P1 -labels: [worktree, workflow, memory, ticket, orchestration] -workflow_state: done -created_at: 2026-06-07T06:29:02Z -updated_at: 2026-06-07T07:38:29Z -assignee: null +title: "Narrow child worktree .yoi sparse exclusions" +state: "closed" +created_at: "2026-06-07T06:29:02Z" +updated_at: "2026-06-07T07:38:29Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-062902-narrow-yoi-worktree-sparse-exclusions/resolution.md b/.yoi/tickets/20260607-062902-002/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-062902-narrow-yoi-worktree-sparse-exclusions/resolution.md rename to .yoi/tickets/20260607-062902-002/resolution.md diff --git a/.yoi/tickets/closed/20260607-062902-narrow-yoi-worktree-sparse-exclusions/thread.md b/.yoi/tickets/20260607-062902-002/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-062902-narrow-yoi-worktree-sparse-exclusions/thread.md rename to .yoi/tickets/20260607-062902-002/thread.md diff --git a/.yoi/tickets/closed/20260608-132230-deprecate-umbrella-tickets/artifacts/.gitkeep b/.yoi/tickets/20260607-072708-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/closed/20260608-132230-deprecate-umbrella-tickets/artifacts/.gitkeep rename to .yoi/tickets/20260607-072708-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260607-072708-builtin-workflow-knowledge-resources/item.md b/.yoi/tickets/20260607-072708-001/item.md similarity index 85% rename from .yoi/tickets/open/20260607-072708-builtin-workflow-knowledge-resources/item.md rename to .yoi/tickets/20260607-072708-001/item.md index 466e76e4..5b4bea2d 100644 --- a/.yoi/tickets/open/20260607-072708-builtin-workflow-knowledge-resources/item.md +++ b/.yoi/tickets/20260607-072708-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-072708-builtin-workflow-knowledge-resources -slug: builtin-workflow-knowledge-resources -title: Builtin Workflow and Knowledge resources -status: open -kind: task -priority: P2 -labels: [workflow, knowledge, resources, builtin] -workflow_state: planning -created_at: 2026-06-07T07:27:08Z -updated_at: 2026-06-07T07:27:08Z -assignee: null +title: "Builtin Workflow and Knowledge resources" +state: "planning" +created_at: "2026-06-07T07:27:08Z" +updated_at: "2026-06-07T07:27:08Z" --- ## Background diff --git a/.yoi/tickets/open/20260607-072708-builtin-workflow-knowledge-resources/thread.md b/.yoi/tickets/20260607-072708-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260607-072708-builtin-workflow-knowledge-resources/thread.md rename to .yoi/tickets/20260607-072708-001/thread.md diff --git a/.yoi/tickets/open/20260527-000002-e2e-harness/artifacts/.gitkeep b/.yoi/tickets/20260607-073313-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260527-000002-e2e-harness/artifacts/.gitkeep rename to .yoi/tickets/20260607-073313-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260607-073313-pod-notification-injection-guidance/item.md b/.yoi/tickets/20260607-073313-001/item.md similarity index 87% rename from .yoi/tickets/open/20260607-073313-pod-notification-injection-guidance/item.md rename to .yoi/tickets/20260607-073313-001/item.md index 698e9f92..327ccf0c 100644 --- a/.yoi/tickets/open/20260607-073313-pod-notification-injection-guidance/item.md +++ b/.yoi/tickets/20260607-073313-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-073313-pod-notification-injection-guidance -slug: pod-notification-injection-guidance -title: Improve Pod notification injection guidance -status: open -kind: task -priority: P2 -labels: [pod, notification, prompt, orchestration, ux] -workflow_state: planning -created_at: 2026-06-07T07:33:13Z -updated_at: 2026-06-07T07:33:13Z -assignee: null +title: "Improve Pod notification injection guidance" +state: "planning" +created_at: "2026-06-07T07:33:13Z" +updated_at: "2026-06-07T07:33:13Z" --- ## Background diff --git a/.yoi/tickets/open/20260607-073313-pod-notification-injection-guidance/thread.md b/.yoi/tickets/20260607-073313-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260607-073313-pod-notification-injection-guidance/thread.md rename to .yoi/tickets/20260607-073313-001/thread.md diff --git a/.yoi/tickets/open/20260527-000003-internal-worker-workflow/artifacts/.gitkeep b/.yoi/tickets/20260607-084344-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260527-000003-internal-worker-workflow/artifacts/.gitkeep rename to .yoi/tickets/20260607-084344-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-084344-remove-fixed-investigator-ticket-role/item.md b/.yoi/tickets/20260607-084344-001/item.md similarity index 85% rename from .yoi/tickets/closed/20260607-084344-remove-fixed-investigator-ticket-role/item.md rename to .yoi/tickets/20260607-084344-001/item.md index eaabeba2..7a23ca1b 100644 --- a/.yoi/tickets/closed/20260607-084344-remove-fixed-investigator-ticket-role/item.md +++ b/.yoi/tickets/20260607-084344-001/item.md @@ -1,17 +1,10 @@ --- -id: 20260607-084344-remove-fixed-investigator-ticket-role -slug: remove-fixed-investigator-ticket-role -title: Remove fixed investigator Ticket role -status: 'closed' -kind: task -priority: P2 -labels: [ticket, orchestration, role, cleanup] -workflow_state: 'done' -created_at: 2026-06-07T08:43:44Z -updated_at: '2026-06-08T11:55:21Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T11:15:16Z' +title: "Remove fixed investigator Ticket role" +state: "closed" +created_at: "2026-06-07T08:43:44Z" +updated_at: "2026-06-08T11:55:21Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T11:15:16Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-084344-remove-fixed-investigator-ticket-role/resolution.md b/.yoi/tickets/20260607-084344-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-084344-remove-fixed-investigator-ticket-role/resolution.md rename to .yoi/tickets/20260607-084344-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-084344-remove-fixed-investigator-ticket-role/thread.md b/.yoi/tickets/20260607-084344-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-084344-remove-fixed-investigator-ticket-role/thread.md rename to .yoi/tickets/20260607-084344-001/thread.md diff --git a/.yoi/tickets/open/20260527-000006-permission-default-policy/artifacts/.gitkeep b/.yoi/tickets/20260607-095142-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260527-000006-permission-default-policy/artifacts/.gitkeep rename to .yoi/tickets/20260607-095142-001/artifacts/.gitkeep diff --git a/.yoi/tickets/20260607-095142-001/item.md b/.yoi/tickets/20260607-095142-001/item.md new file mode 100644 index 00000000..d655a42a --- /dev/null +++ b/.yoi/tickets/20260607-095142-001/item.md @@ -0,0 +1,14 @@ +--- +title: "Keep workspace Orchestrator spawn diagnostics visible" +state: "closed" +created_at: "2026-06-07T09:51:42Z" +updated_at: "2026-06-07T10:16:08Z" +--- + +## Background + +Created by LocalTicketBackend. + +## Acceptance criteria + +- TBD diff --git a/.yoi/tickets/closed/20260607-095142-workspace-orchestrator-spawn-diagnostic-persistence/resolution.md b/.yoi/tickets/20260607-095142-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-095142-workspace-orchestrator-spawn-diagnostic-persistence/resolution.md rename to .yoi/tickets/20260607-095142-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-095142-workspace-orchestrator-spawn-diagnostic-persistence/thread.md b/.yoi/tickets/20260607-095142-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-095142-workspace-orchestrator-spawn-diagnostic-persistence/thread.md rename to .yoi/tickets/20260607-095142-001/thread.md diff --git a/.yoi/tickets/open/20260527-000009-pod-session-fork/artifacts/.gitkeep b/.yoi/tickets/20260607-213808-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260527-000009-pod-session-fork/artifacts/.gitkeep rename to .yoi/tickets/20260607-213808-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260607-213808-remove-workspace-panel-bare-letter-shortcuts/item.md b/.yoi/tickets/20260607-213808-001/item.md similarity index 84% rename from .yoi/tickets/open/20260607-213808-remove-workspace-panel-bare-letter-shortcuts/item.md rename to .yoi/tickets/20260607-213808-001/item.md index 34b3192b..9dc00fde 100644 --- a/.yoi/tickets/open/20260607-213808-remove-workspace-panel-bare-letter-shortcuts/item.md +++ b/.yoi/tickets/20260607-213808-001/item.md @@ -1,17 +1,10 @@ --- -id: 20260607-213808-remove-workspace-panel-bare-letter-shortcuts -slug: remove-workspace-panel-bare-letter-shortcuts -title: Remove bare letter shortcuts from workspace panel -status: open -kind: task -priority: P2 -labels: [tui, panel, ux, keyboard] -workflow_state: done -created_at: 2026-06-07T21:38:08Z -updated_at: 2026-06-07T22:26:19Z -assignee: null -queued_by: workspace-panel -queued_at: 2026-06-07T22:04:20Z +title: "Remove bare letter shortcuts from workspace panel" +state: "done" +created_at: "2026-06-07T21:38:08Z" +updated_at: "2026-06-07T22:26:19Z" +queued_by: "workspace-panel" +queued_at: "2026-06-07T22:04:20Z" --- ## Background diff --git a/.yoi/tickets/open/20260607-213808-remove-workspace-panel-bare-letter-shortcuts/thread.md b/.yoi/tickets/20260607-213808-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260607-213808-remove-workspace-panel-bare-letter-shortcuts/thread.md rename to .yoi/tickets/20260607-213808-001/thread.md diff --git a/.yoi/tickets/open/20260527-000010-prompt-eval-metrics/artifacts/.gitkeep b/.yoi/tickets/20260607-220225-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260527-000010-prompt-eval-metrics/artifacts/.gitkeep rename to .yoi/tickets/20260607-220225-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-220225-commit-intake-claims-after-launch-success/item.md b/.yoi/tickets/20260607-220225-001/item.md similarity index 86% rename from .yoi/tickets/closed/20260607-220225-commit-intake-claims-after-launch-success/item.md rename to .yoi/tickets/20260607-220225-001/item.md index 00ec2675..b5844ce3 100644 --- a/.yoi/tickets/closed/20260607-220225-commit-intake-claims-after-launch-success/item.md +++ b/.yoi/tickets/20260607-220225-001/item.md @@ -1,17 +1,10 @@ --- -id: 20260607-220225-commit-intake-claims-after-launch-success -slug: commit-intake-claims-after-launch-success -title: Commit Intake ticket claims only after successful launch -status: 'closed' -kind: task -priority: P1 -labels: [tui, panel, ticket, intake, bug] -workflow_state: 'done' -created_at: 2026-06-07T22:02:25Z -updated_at: '2026-06-08T03:32:46Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T03:06:07Z' +title: "Commit Intake ticket claims only after successful launch" +state: "closed" +created_at: "2026-06-07T22:02:25Z" +updated_at: "2026-06-08T03:32:46Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T03:06:07Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-220225-commit-intake-claims-after-launch-success/resolution.md b/.yoi/tickets/20260607-220225-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-220225-commit-intake-claims-after-launch-success/resolution.md rename to .yoi/tickets/20260607-220225-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-220225-commit-intake-claims-after-launch-success/thread.md b/.yoi/tickets/20260607-220225-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-220225-commit-intake-claims-after-launch-success/thread.md rename to .yoi/tickets/20260607-220225-001/thread.md diff --git a/.yoi/tickets/open/20260527-000015-tui-navigation-mode-design/artifacts/.gitkeep b/.yoi/tickets/20260607-220606-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260527-000015-tui-navigation-mode-design/artifacts/.gitkeep rename to .yoi/tickets/20260607-220606-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260607-220606-define-ticket-action-commit-policy/item.md b/.yoi/tickets/20260607-220606-001/item.md similarity index 88% rename from .yoi/tickets/open/20260607-220606-define-ticket-action-commit-policy/item.md rename to .yoi/tickets/20260607-220606-001/item.md index b325b09c..a4e89074 100644 --- a/.yoi/tickets/open/20260607-220606-define-ticket-action-commit-policy/item.md +++ b/.yoi/tickets/20260607-220606-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-220606-define-ticket-action-commit-policy -slug: define-ticket-action-commit-policy -title: Define commit policy for Ticket state changes from Intake and Panel -status: open -kind: task -priority: P2 -labels: [ticket, intake, panel, git, workflow] -workflow_state: planning -created_at: 2026-06-07T22:06:06Z -updated_at: 2026-06-07T22:06:06Z -assignee: null +title: "Define commit policy for Ticket state changes from Intake and Panel" +state: "planning" +created_at: "2026-06-07T22:06:06Z" +updated_at: "2026-06-07T22:06:06Z" --- ## Background diff --git a/.yoi/tickets/open/20260607-220606-define-ticket-action-commit-policy/thread.md b/.yoi/tickets/20260607-220606-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260607-220606-define-ticket-action-commit-policy/thread.md rename to .yoi/tickets/20260607-220606-001/thread.md diff --git a/.yoi/tickets/open/20260527-000018-tui-user-model-setup/artifacts/.gitkeep b/.yoi/tickets/20260607-223233-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260527-000018-tui-user-model-setup/artifacts/.gitkeep rename to .yoi/tickets/20260607-223233-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/item.md b/.yoi/tickets/20260607-223233-001/item.md similarity index 88% rename from .yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/item.md rename to .yoi/tickets/20260607-223233-001/item.md index 3fbc8739..92c1a825 100644 --- a/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/item.md +++ b/.yoi/tickets/20260607-223233-001/item.md @@ -1,17 +1,10 @@ --- -id: 20260607-223233-parse-ticket-frontmatter-as-yaml -slug: parse-ticket-frontmatter-as-yaml -title: Parse Ticket frontmatter as YAML -status: open -kind: task -priority: P1 -labels: [ticket, yaml, parser, bug, panel] -workflow_state: done -created_at: 2026-06-07T22:32:33Z -updated_at: 2026-06-07T23:38:32Z -assignee: null -queued_by: workspace-panel -queued_at: 2026-06-07T22:43:03Z +title: "Parse Ticket frontmatter as YAML" +state: "done" +created_at: "2026-06-07T22:32:33Z" +updated_at: "2026-06-07T23:38:32Z" +queued_by: "workspace-panel" +queued_at: "2026-06-07T22:43:03Z" --- ## Background diff --git a/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/thread.md b/.yoi/tickets/20260607-223233-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/thread.md rename to .yoi/tickets/20260607-223233-001/thread.md diff --git a/.yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/.gitkeep b/.yoi/tickets/20260607-224309-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260528-131317-crate-boundary-audit/artifacts/.gitkeep rename to .yoi/tickets/20260607-224309-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260607-224309-reduce-ticket-lifecycle-commit-noise/item.md b/.yoi/tickets/20260607-224309-001/item.md similarity index 89% rename from .yoi/tickets/open/20260607-224309-reduce-ticket-lifecycle-commit-noise/item.md rename to .yoi/tickets/20260607-224309-001/item.md index a054c006..0c79436c 100644 --- a/.yoi/tickets/open/20260607-224309-reduce-ticket-lifecycle-commit-noise/item.md +++ b/.yoi/tickets/20260607-224309-001/item.md @@ -1,15 +1,8 @@ --- -id: 20260607-224309-reduce-ticket-lifecycle-commit-noise -slug: reduce-ticket-lifecycle-commit-noise -title: Reduce Ticket lifecycle commit noise -status: open -kind: task -priority: P2 -labels: [ticket, workflow, git, process, cleanup] -workflow_state: planning -created_at: 2026-06-07T22:43:09Z -updated_at: 2026-06-07T22:43:09Z -assignee: null +title: "Reduce Ticket lifecycle commit noise" +state: "planning" +created_at: "2026-06-07T22:43:09Z" +updated_at: "2026-06-07T22:43:09Z" --- ## Background diff --git a/.yoi/tickets/open/20260607-224309-reduce-ticket-lifecycle-commit-noise/thread.md b/.yoi/tickets/20260607-224309-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260607-224309-reduce-ticket-lifecycle-commit-noise/thread.md rename to .yoi/tickets/20260607-224309-001/thread.md diff --git a/.yoi/tickets/open/20260529-041911-llm-worker-standalone-publication-audit/artifacts/.gitkeep b/.yoi/tickets/20260607-225448-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260529-041911-llm-worker-standalone-publication-audit/artifacts/.gitkeep rename to .yoi/tickets/20260607-225448-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-225448-replace-intake-state-with-planning/item.md b/.yoi/tickets/20260607-225448-001/item.md similarity index 92% rename from .yoi/tickets/closed/20260607-225448-replace-intake-state-with-planning/item.md rename to .yoi/tickets/20260607-225448-001/item.md index 0734ea96..0ed1f6f7 100644 --- a/.yoi/tickets/closed/20260607-225448-replace-intake-state-with-planning/item.md +++ b/.yoi/tickets/20260607-225448-001/item.md @@ -1,17 +1,10 @@ --- -id: 20260607-225448-replace-intake-state-with-planning -slug: replace-intake-state-with-planning -title: Replace Ticket intake state with planning state -status: 'closed' -kind: task -priority: P1 -labels: [ticket, workflow-state, orchestrator, panel, intake, planning] -workflow_state: 'done' -created_at: 2026-06-07T22:54:48Z -updated_at: '2026-06-08T10:19:05Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T08:35:07Z' +title: "Replace Ticket intake state with planning state" +state: "closed" +created_at: "2026-06-07T22:54:48Z" +updated_at: "2026-06-08T10:19:05Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T08:35:07Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-225448-replace-intake-state-with-planning/resolution.md b/.yoi/tickets/20260607-225448-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-225448-replace-intake-state-with-planning/resolution.md rename to .yoi/tickets/20260607-225448-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-225448-replace-intake-state-with-planning/thread.md b/.yoi/tickets/20260607-225448-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-225448-replace-intake-state-with-planning/thread.md rename to .yoi/tickets/20260607-225448-001/thread.md diff --git a/.yoi/tickets/open/20260529-161928-mcp-integration/artifacts/.gitkeep b/.yoi/tickets/20260607-230044-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260529-161928-mcp-integration/artifacts/.gitkeep rename to .yoi/tickets/20260607-230044-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/item.md b/.yoi/tickets/20260607-230044-001/item.md similarity index 92% rename from .yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/item.md rename to .yoi/tickets/20260607-230044-001/item.md index 11e8f271..8cba1864 100644 --- a/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/item.md +++ b/.yoi/tickets/20260607-230044-001/item.md @@ -1,17 +1,10 @@ --- -id: 20260607-230044-relax-implementation-planning-readiness -slug: relax-implementation-planning-readiness -title: Relax implementation planning readiness toward intent and reviewability -status: open -kind: task -priority: P2 -labels: [workflow, ticket, orchestrator, planning, review] -workflow_state: done -created_at: 2026-06-07T23:00:44Z -updated_at: 2026-06-07T23:38:32Z -assignee: null -queued_by: workspace-panel -queued_at: 2026-06-07T23:03:35Z +title: "Relax implementation planning readiness toward intent and reviewability" +state: "done" +created_at: "2026-06-07T23:00:44Z" +updated_at: "2026-06-07T23:38:32Z" +queued_by: "workspace-panel" +queued_at: "2026-06-07T23:03:35Z" --- ## Background diff --git a/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/thread.md b/.yoi/tickets/20260607-230044-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/thread.md rename to .yoi/tickets/20260607-230044-001/thread.md diff --git a/.yoi/tickets/open/20260530-053721-tui-inflight-composer-injection/artifacts/.gitkeep b/.yoi/tickets/20260607-234530-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260530-053721-tui-inflight-composer-injection/artifacts/.gitkeep rename to .yoi/tickets/20260607-234530-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260607-234530-add-pod-archive-fresh-start-path/item.md b/.yoi/tickets/20260607-234530-001/item.md similarity index 88% rename from .yoi/tickets/open/20260607-234530-add-pod-archive-fresh-start-path/item.md rename to .yoi/tickets/20260607-234530-001/item.md index 5d4d1885..4b235fc1 100644 --- a/.yoi/tickets/open/20260607-234530-add-pod-archive-fresh-start-path/item.md +++ b/.yoi/tickets/20260607-234530-001/item.md @@ -1,17 +1,10 @@ --- -id: 20260607-234530-add-pod-archive-fresh-start-path -slug: add-pod-archive-fresh-start-path -title: Add Pod archive and fresh-start path -status: open -kind: task -priority: P2 -labels: [pod, panel, cli, lifecycle, metadata] -workflow_state: 'planning' -created_at: 2026-06-07T23:45:30Z -updated_at: '2026-06-08T03:49:14Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T03:48:46Z' +title: "Add Pod archive and fresh-start path" +state: "planning" +created_at: "2026-06-07T23:45:30Z" +updated_at: "2026-06-08T03:49:14Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T03:48:46Z" --- ## Background diff --git a/.yoi/tickets/open/20260607-234530-add-pod-archive-fresh-start-path/thread.md b/.yoi/tickets/20260607-234530-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260607-234530-add-pod-archive-fresh-start-path/thread.md rename to .yoi/tickets/20260607-234530-001/thread.md diff --git a/.yoi/tickets/open/20260531-010005-plugin-extension-surface/artifacts/.gitkeep b/.yoi/tickets/20260607-235442-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260531-010005-plugin-extension-surface/artifacts/.gitkeep rename to .yoi/tickets/20260607-235442-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-235442-remove-profile-derived-pod-names/item.md b/.yoi/tickets/20260607-235442-001/item.md similarity index 88% rename from .yoi/tickets/closed/20260607-235442-remove-profile-derived-pod-names/item.md rename to .yoi/tickets/20260607-235442-001/item.md index 79579c3c..2a67ffc3 100644 --- a/.yoi/tickets/closed/20260607-235442-remove-profile-derived-pod-names/item.md +++ b/.yoi/tickets/20260607-235442-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260607-235442-remove-profile-derived-pod-names' -slug: 'remove-profile-derived-pod-names' -title: 'Remove Profile-derived Pod names' -status: 'closed' -kind: 'task' -priority: 'P1' -labels: ['profile', 'pod', 'identity', 'manifest', 'bug'] -workflow_state: 'done' -created_at: '2026-06-07T23:54:42Z' -updated_at: '2026-06-08T02:00:18Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T00:32:56Z' +title: "Remove Profile-derived Pod names" +state: "closed" +created_at: "2026-06-07T23:54:42Z" +updated_at: "2026-06-08T02:00:18Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T00:32:56Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-235442-remove-profile-derived-pod-names/resolution.md b/.yoi/tickets/20260607-235442-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-235442-remove-profile-derived-pod-names/resolution.md rename to .yoi/tickets/20260607-235442-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-235442-remove-profile-derived-pod-names/thread.md b/.yoi/tickets/20260607-235442-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-235442-remove-profile-derived-pod-names/thread.md rename to .yoi/tickets/20260607-235442-001/thread.md diff --git a/.yoi/tickets/open/20260601-064953-plugin-distribution-package-format/artifacts/.gitkeep b/.yoi/tickets/20260607-235505-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260601-064953-plugin-distribution-package-format/artifacts/.gitkeep rename to .yoi/tickets/20260607-235505-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260607-235505-use-workspace-basename-for-default-pod-name/item.md b/.yoi/tickets/20260607-235505-001/item.md similarity index 87% rename from .yoi/tickets/closed/20260607-235505-use-workspace-basename-for-default-pod-name/item.md rename to .yoi/tickets/20260607-235505-001/item.md index 99a80cb5..5ad5bd24 100644 --- a/.yoi/tickets/closed/20260607-235505-use-workspace-basename-for-default-pod-name/item.md +++ b/.yoi/tickets/20260607-235505-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260607-235505-use-workspace-basename-for-default-pod-name' -slug: 'use-workspace-basename-for-default-pod-name' -title: 'Use workspace basename for default Pod name' -status: 'closed' -kind: 'task' -priority: 'P1' -labels: ['pod', 'identity', 'workspace', 'cli', 'panel'] -workflow_state: 'done' -created_at: '2026-06-07T23:55:05Z' -updated_at: '2026-06-08T02:00:18Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T00:33:01Z' +title: "Use workspace basename for default Pod name" +state: "closed" +created_at: "2026-06-07T23:55:05Z" +updated_at: "2026-06-08T02:00:18Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T00:33:01Z" --- ## Background diff --git a/.yoi/tickets/closed/20260607-235505-use-workspace-basename-for-default-pod-name/resolution.md b/.yoi/tickets/20260607-235505-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260607-235505-use-workspace-basename-for-default-pod-name/resolution.md rename to .yoi/tickets/20260607-235505-001/resolution.md diff --git a/.yoi/tickets/closed/20260607-235505-use-workspace-basename-for-default-pod-name/thread.md b/.yoi/tickets/20260607-235505-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260607-235505-use-workspace-basename-for-default-pod-name/thread.md rename to .yoi/tickets/20260607-235505-001/thread.md diff --git a/.yoi/tickets/open/20260601-123641-dependency-license-audit/artifacts/.gitkeep b/.yoi/tickets/20260608-000047-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260601-123641-dependency-license-audit/artifacts/.gitkeep rename to .yoi/tickets/20260608-000047-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-000047-introduce-runtime-workspace-root-context/item.md b/.yoi/tickets/20260608-000047-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260608-000047-introduce-runtime-workspace-root-context/item.md rename to .yoi/tickets/20260608-000047-001/item.md index a5903d0e..da6240a1 100644 --- a/.yoi/tickets/closed/20260608-000047-introduce-runtime-workspace-root-context/item.md +++ b/.yoi/tickets/20260608-000047-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-000047-introduce-runtime-workspace-root-context' -slug: 'introduce-runtime-workspace-root-context' -title: 'Introduce runtime workspace root context' -status: 'closed' -kind: 'task' -priority: 'P1' -labels: ['workspace', 'pod', 'profile', 'cli', 'panel', 'memory'] -workflow_state: 'done' -created_at: '2026-06-08T00:00:47Z' -updated_at: '2026-06-08T02:00:18Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T00:14:09Z' +title: "Introduce runtime workspace root context" +state: "closed" +created_at: "2026-06-08T00:00:47Z" +updated_at: "2026-06-08T02:00:18Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T00:14:09Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-000047-introduce-runtime-workspace-root-context/resolution.md b/.yoi/tickets/20260608-000047-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-000047-introduce-runtime-workspace-root-context/resolution.md rename to .yoi/tickets/20260608-000047-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-000047-introduce-runtime-workspace-root-context/thread.md b/.yoi/tickets/20260608-000047-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-000047-introduce-runtime-workspace-root-context/thread.md rename to .yoi/tickets/20260608-000047-001/thread.md diff --git a/.yoi/tickets/open/20260607-001651-companion-status-context-tool-policy/artifacts/.gitkeep b/.yoi/tickets/20260608-010442-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260607-001651-companion-status-context-tool-policy/artifacts/.gitkeep rename to .yoi/tickets/20260608-010442-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-010442-split-direct-and-delegation-authority/item.md b/.yoi/tickets/20260608-010442-001/item.md similarity index 90% rename from .yoi/tickets/closed/20260608-010442-split-direct-and-delegation-authority/item.md rename to .yoi/tickets/20260608-010442-001/item.md index 6472a530..cf4dd69f 100644 --- a/.yoi/tickets/closed/20260608-010442-split-direct-and-delegation-authority/item.md +++ b/.yoi/tickets/20260608-010442-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-010442-split-direct-and-delegation-authority' -slug: 'split-direct-and-delegation-authority' -title: 'Split direct and delegation authority for Pods' -status: 'closed' -kind: 'task' -priority: 'P1' -labels: ['pod', 'scope', 'delegation', 'orchestrator', 'security', 'profile'] -workflow_state: 'done' -created_at: '2026-06-08T01:04:42Z' -updated_at: '2026-06-08T06:43:52Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T05:45:43Z' +title: "Split direct and delegation authority for Pods" +state: "closed" +created_at: "2026-06-08T01:04:42Z" +updated_at: "2026-06-08T06:43:52Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T05:45:43Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-010442-split-direct-and-delegation-authority/resolution.md b/.yoi/tickets/20260608-010442-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-010442-split-direct-and-delegation-authority/resolution.md rename to .yoi/tickets/20260608-010442-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-010442-split-direct-and-delegation-authority/thread.md b/.yoi/tickets/20260608-010442-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-010442-split-direct-and-delegation-authority/thread.md rename to .yoi/tickets/20260608-010442-001/thread.md diff --git a/.yoi/tickets/open/20260607-001651-workspace-panel-companion-interface/artifacts/.gitkeep b/.yoi/tickets/20260608-011036-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260607-001651-workspace-panel-companion-interface/artifacts/.gitkeep rename to .yoi/tickets/20260608-011036-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-011036-allow-spawnpod-child-workspace-cwd/item.md b/.yoi/tickets/20260608-011036-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260608-011036-allow-spawnpod-child-workspace-cwd/item.md rename to .yoi/tickets/20260608-011036-001/item.md index 3378fa03..4e8e526a 100644 --- a/.yoi/tickets/closed/20260608-011036-allow-spawnpod-child-workspace-cwd/item.md +++ b/.yoi/tickets/20260608-011036-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-011036-allow-spawnpod-child-workspace-cwd' -slug: 'allow-spawnpod-child-workspace-cwd' -title: 'Allow SpawnPod to specify child cwd' -status: 'closed' -kind: 'task' -priority: 'P2' -labels: ['pod', 'spawn', 'cwd', 'worktree', 'orchestration'] -workflow_state: 'done' -created_at: '2026-06-08T01:10:36Z' -updated_at: '2026-06-08T08:17:51Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T03:06:04Z' +title: "Allow SpawnPod to specify child cwd" +state: "closed" +created_at: "2026-06-08T01:10:36Z" +updated_at: "2026-06-08T08:17:51Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T03:06:04Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-011036-allow-spawnpod-child-workspace-cwd/resolution.md b/.yoi/tickets/20260608-011036-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-011036-allow-spawnpod-child-workspace-cwd/resolution.md rename to .yoi/tickets/20260608-011036-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-011036-allow-spawnpod-child-workspace-cwd/thread.md b/.yoi/tickets/20260608-011036-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-011036-allow-spawnpod-child-workspace-cwd/thread.md rename to .yoi/tickets/20260608-011036-001/thread.md diff --git a/.yoi/tickets/open/20260607-022328-preserve-active-workflows-across-compaction/artifacts/.gitkeep b/.yoi/tickets/20260608-014602-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260607-022328-preserve-active-workflows-across-compaction/artifacts/.gitkeep rename to .yoi/tickets/20260608-014602-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-014602-remove-non-goals-from-workflow-templates/item.md b/.yoi/tickets/20260608-014602-001/item.md similarity index 88% rename from .yoi/tickets/closed/20260608-014602-remove-non-goals-from-workflow-templates/item.md rename to .yoi/tickets/20260608-014602-001/item.md index a38d4aad..bca055d4 100644 --- a/.yoi/tickets/closed/20260608-014602-remove-non-goals-from-workflow-templates/item.md +++ b/.yoi/tickets/20260608-014602-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-014602-remove-non-goals-from-workflow-templates' -slug: 'remove-non-goals-from-workflow-templates' -title: 'Remove Non-goals from workflow templates' -status: 'closed' -kind: 'task' -priority: 'P2' -labels: ['workflow', 'prompt', 'ticket', 'orchestration', 'cleanup'] -workflow_state: 'done' -created_at: '2026-06-08T01:46:02Z' -updated_at: '2026-06-08T02:23:16Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T01:48:07Z' +title: "Remove Non-goals from workflow templates" +state: "closed" +created_at: "2026-06-08T01:46:02Z" +updated_at: "2026-06-08T02:23:16Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T01:48:07Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-014602-remove-non-goals-from-workflow-templates/resolution.md b/.yoi/tickets/20260608-014602-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-014602-remove-non-goals-from-workflow-templates/resolution.md rename to .yoi/tickets/20260608-014602-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-014602-remove-non-goals-from-workflow-templates/thread.md b/.yoi/tickets/20260608-014602-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-014602-remove-non-goals-from-workflow-templates/thread.md rename to .yoi/tickets/20260608-014602-001/thread.md diff --git a/.yoi/tickets/open/20260607-072708-builtin-workflow-knowledge-resources/artifacts/.gitkeep b/.yoi/tickets/20260608-015630-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260607-072708-builtin-workflow-knowledge-resources/artifacts/.gitkeep rename to .yoi/tickets/20260608-015630-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-015630-abort-podclient-reader-task-on-drop/item.md b/.yoi/tickets/20260608-015630-001/item.md similarity index 88% rename from .yoi/tickets/closed/20260608-015630-abort-podclient-reader-task-on-drop/item.md rename to .yoi/tickets/20260608-015630-001/item.md index dae51cf7..452c0fce 100644 --- a/.yoi/tickets/closed/20260608-015630-abort-podclient-reader-task-on-drop/item.md +++ b/.yoi/tickets/20260608-015630-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-015630-abort-podclient-reader-task-on-drop' -slug: 'abort-podclient-reader-task-on-drop' -title: 'Abort PodClient reader task on drop' -status: 'closed' -kind: 'task' -priority: 'P1' -labels: ['client', 'pod', 'tui', 'fd-leak', 'bug'] -workflow_state: 'done' -created_at: '2026-06-08T01:56:30Z' -updated_at: '2026-06-08T02:54:31Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T02:40:58Z' +title: "Abort PodClient reader task on drop" +state: "closed" +created_at: "2026-06-08T01:56:30Z" +updated_at: "2026-06-08T02:54:31Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T02:40:58Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-015630-abort-podclient-reader-task-on-drop/resolution.md b/.yoi/tickets/20260608-015630-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-015630-abort-podclient-reader-task-on-drop/resolution.md rename to .yoi/tickets/20260608-015630-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-015630-abort-podclient-reader-task-on-drop/thread.md b/.yoi/tickets/20260608-015630-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-015630-abort-podclient-reader-task-on-drop/thread.md rename to .yoi/tickets/20260608-015630-001/thread.md diff --git a/.yoi/tickets/open/20260607-073313-pod-notification-injection-guidance/artifacts/.gitkeep b/.yoi/tickets/20260608-032200-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260607-073313-pod-notification-injection-guidance/artifacts/.gitkeep rename to .yoi/tickets/20260608-032200-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-032200-panel-close-done-tickets/item.md b/.yoi/tickets/20260608-032200-001/item.md similarity index 88% rename from .yoi/tickets/closed/20260608-032200-panel-close-done-tickets/item.md rename to .yoi/tickets/20260608-032200-001/item.md index 2a83e698..24fe7be3 100644 --- a/.yoi/tickets/closed/20260608-032200-panel-close-done-tickets/item.md +++ b/.yoi/tickets/20260608-032200-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-032200-panel-close-done-tickets' -slug: 'panel-close-done-tickets' -title: 'Close done Tickets from workspace panel' -status: 'closed' -kind: 'task' -priority: 'P2' -labels: ['tui', 'panel', 'ticket', 'close', 'workflow-state'] -workflow_state: 'done' -created_at: '2026-06-08T03:22:00Z' -updated_at: '2026-06-08T06:10:59Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T05:46:20Z' +title: "Close done Tickets from workspace panel" +state: "closed" +created_at: "2026-06-08T03:22:00Z" +updated_at: "2026-06-08T06:10:59Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T05:46:20Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-032200-panel-close-done-tickets/resolution.md b/.yoi/tickets/20260608-032200-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-032200-panel-close-done-tickets/resolution.md rename to .yoi/tickets/20260608-032200-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-032200-panel-close-done-tickets/thread.md b/.yoi/tickets/20260608-032200-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-032200-panel-close-done-tickets/thread.md rename to .yoi/tickets/20260608-032200-001/thread.md diff --git a/.yoi/tickets/open/20260607-213808-remove-workspace-panel-bare-letter-shortcuts/artifacts/.gitkeep b/.yoi/tickets/20260608-032911-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260607-213808-remove-workspace-panel-bare-letter-shortcuts/artifacts/.gitkeep rename to .yoi/tickets/20260608-032911-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-032911-separate-ticket-record-language-from-worker-language/item.md b/.yoi/tickets/20260608-032911-001/item.md similarity index 87% rename from .yoi/tickets/closed/20260608-032911-separate-ticket-record-language-from-worker-language/item.md rename to .yoi/tickets/20260608-032911-001/item.md index dc5533b5..a8d1f99d 100644 --- a/.yoi/tickets/closed/20260608-032911-separate-ticket-record-language-from-worker-language/item.md +++ b/.yoi/tickets/20260608-032911-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-032911-separate-ticket-record-language-from-worker-language' -slug: 'separate-ticket-record-language-from-worker-language' -title: 'Separate Ticket record language from worker response language' -status: 'closed' -kind: 'task' -priority: 'P2' -labels: ['ticket', 'language', 'config', 'profile', 'workflow'] -workflow_state: 'done' -created_at: '2026-06-08T03:29:11Z' -updated_at: '2026-06-08T08:21:55Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T05:51:29Z' +title: "Separate Ticket record language from worker response language" +state: "closed" +created_at: "2026-06-08T03:29:11Z" +updated_at: "2026-06-08T08:21:55Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T05:51:29Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-032911-separate-ticket-record-language-from-worker-language/resolution.md b/.yoi/tickets/20260608-032911-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-032911-separate-ticket-record-language-from-worker-language/resolution.md rename to .yoi/tickets/20260608-032911-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-032911-separate-ticket-record-language-from-worker-language/thread.md b/.yoi/tickets/20260608-032911-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-032911-separate-ticket-record-language-from-worker-language/thread.md rename to .yoi/tickets/20260608-032911-001/thread.md diff --git a/.yoi/tickets/open/20260607-220606-define-ticket-action-commit-policy/artifacts/.gitkeep b/.yoi/tickets/20260608-054546-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260607-220606-define-ticket-action-commit-policy/artifacts/.gitkeep rename to .yoi/tickets/20260608-054546-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-054546-shutdown-intake-pod-after-ready-idle/item.md b/.yoi/tickets/20260608-054546-001/item.md similarity index 88% rename from .yoi/tickets/closed/20260608-054546-shutdown-intake-pod-after-ready-idle/item.md rename to .yoi/tickets/20260608-054546-001/item.md index 9d2a9e97..240e77fd 100644 --- a/.yoi/tickets/closed/20260608-054546-shutdown-intake-pod-after-ready-idle/item.md +++ b/.yoi/tickets/20260608-054546-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-054546-shutdown-intake-pod-after-ready-idle' -slug: 'shutdown-intake-pod-after-ready-idle' -title: 'Shutdown Intake Pod after TicketIntakeReady returns to Idle' -status: 'closed' -kind: 'task' -priority: 'P2' -labels: ['ticket', 'intake', 'pod', 'lifecycle', 'panel'] -workflow_state: 'done' -created_at: '2026-06-08T05:45:46Z' -updated_at: '2026-06-08T08:12:36Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T06:20:43Z' +title: "Shutdown Intake Pod after TicketIntakeReady returns to Idle" +state: "closed" +created_at: "2026-06-08T05:45:46Z" +updated_at: "2026-06-08T08:12:36Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T06:20:43Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-054546-shutdown-intake-pod-after-ready-idle/resolution.md b/.yoi/tickets/20260608-054546-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-054546-shutdown-intake-pod-after-ready-idle/resolution.md rename to .yoi/tickets/20260608-054546-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-054546-shutdown-intake-pod-after-ready-idle/thread.md b/.yoi/tickets/20260608-054546-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-054546-shutdown-intake-pod-after-ready-idle/thread.md rename to .yoi/tickets/20260608-054546-001/thread.md diff --git a/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/artifacts/.gitkeep b/.yoi/tickets/20260608-061235-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/artifacts/.gitkeep rename to .yoi/tickets/20260608-061235-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260608-061235-orchestrator-active-ticket-plan-iteration/item.md b/.yoi/tickets/20260608-061235-001/item.md similarity index 95% rename from .yoi/tickets/open/20260608-061235-orchestrator-active-ticket-plan-iteration/item.md rename to .yoi/tickets/20260608-061235-001/item.md index ebbd92f4..c5443aff 100644 --- a/.yoi/tickets/open/20260608-061235-orchestrator-active-ticket-plan-iteration/item.md +++ b/.yoi/tickets/20260608-061235-001/item.md @@ -1,15 +1,8 @@ --- -id: '20260608-061235-orchestrator-active-ticket-plan-iteration' -slug: 'orchestrator-active-ticket-plan-iteration' -title: 'Prevent idle starvation in Ticket orchestration planning' -status: 'open' -kind: 'task' -priority: 'P1' -labels: ['ticket', 'orchestrator', 'planning', 'panel', 'taskstore', 'queue'] -workflow_state: planning -created_at: '2026-06-08T06:12:35Z' -updated_at: '2026-06-08T06:27:33Z' -assignee: null +title: "Prevent idle starvation in Ticket orchestration planning" +state: "planning" +created_at: "2026-06-08T06:12:35Z" +updated_at: "2026-06-08T06:27:33Z" --- ## Background diff --git a/.yoi/tickets/open/20260608-061235-orchestrator-active-ticket-plan-iteration/thread.md b/.yoi/tickets/20260608-061235-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260608-061235-orchestrator-active-ticket-plan-iteration/thread.md rename to .yoi/tickets/20260608-061235-001/thread.md diff --git a/.yoi/tickets/open/20260607-224309-reduce-ticket-lifecycle-commit-noise/artifacts/.gitkeep b/.yoi/tickets/20260608-071722-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260607-224309-reduce-ticket-lifecycle-commit-noise/artifacts/.gitkeep rename to .yoi/tickets/20260608-071722-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-071722-orchestrator-return-to-planning-context-policy/item.md b/.yoi/tickets/20260608-071722-001/item.md similarity index 90% rename from .yoi/tickets/closed/20260608-071722-orchestrator-return-to-planning-context-policy/item.md rename to .yoi/tickets/20260608-071722-001/item.md index 9b02e2cc..469df263 100644 --- a/.yoi/tickets/closed/20260608-071722-orchestrator-return-to-planning-context-policy/item.md +++ b/.yoi/tickets/20260608-071722-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-071722-orchestrator-return-to-planning-context-policy' -slug: 'orchestrator-return-to-planning-context-policy' -title: 'Require project context before Orchestrator returns Tickets to planning' -status: 'closed' -kind: 'task' -priority: 'P1' -labels: ['ticket', 'orchestrator', 'planning', 'workflow', 'prompt'] -workflow_state: 'done' -created_at: '2026-06-08T07:17:22Z' -updated_at: '2026-06-09T01:18:52Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-09T00:04:21Z' +title: "Require project context before Orchestrator returns Tickets to planning" +state: "closed" +created_at: "2026-06-08T07:17:22Z" +updated_at: "2026-06-09T01:18:52Z" +queued_by: "workspace-panel" +queued_at: "2026-06-09T00:04:21Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-071722-orchestrator-return-to-planning-context-policy/resolution.md b/.yoi/tickets/20260608-071722-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-071722-orchestrator-return-to-planning-context-policy/resolution.md rename to .yoi/tickets/20260608-071722-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-071722-orchestrator-return-to-planning-context-policy/thread.md b/.yoi/tickets/20260608-071722-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-071722-orchestrator-return-to-planning-context-policy/thread.md rename to .yoi/tickets/20260608-071722-001/thread.md diff --git a/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/artifacts/.gitkeep b/.yoi/tickets/20260608-072732-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/artifacts/.gitkeep rename to .yoi/tickets/20260608-072732-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260608-072732-typed-ticket-relation-metadata/item.md b/.yoi/tickets/20260608-072732-001/item.md similarity index 93% rename from .yoi/tickets/open/20260608-072732-typed-ticket-relation-metadata/item.md rename to .yoi/tickets/20260608-072732-001/item.md index 2292e9e1..882051de 100644 --- a/.yoi/tickets/open/20260608-072732-typed-ticket-relation-metadata/item.md +++ b/.yoi/tickets/20260608-072732-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-072732-typed-ticket-relation-metadata' -slug: 'typed-ticket-relation-metadata' -title: 'Add non-hierarchical typed Ticket relations' -status: 'open' -kind: 'task' -priority: 'P1' -labels: ['ticket', 'relations', 'planning', 'panel', 'orchestrator'] -workflow_state: 'queued' -created_at: '2026-06-08T07:27:32Z' -updated_at: '2026-06-09T02:28:14Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-09T02:27:31Z' +title: "Add non-hierarchical typed Ticket relations" +state: "queued" +created_at: "2026-06-08T07:27:32Z" +updated_at: "2026-06-09T02:28:14Z" +queued_by: "workspace-panel" +queued_at: "2026-06-09T02:27:31Z" --- ## Background diff --git a/.yoi/tickets/open/20260608-072732-typed-ticket-relation-metadata/thread.md b/.yoi/tickets/20260608-072732-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260608-072732-typed-ticket-relation-metadata/thread.md rename to .yoi/tickets/20260608-072732-001/thread.md diff --git a/.yoi/tickets/open/20260607-234530-add-pod-archive-fresh-start-path/artifacts/.gitkeep b/.yoi/tickets/20260608-103133-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260607-234530-add-pod-archive-fresh-start-path/artifacts/.gitkeep rename to .yoi/tickets/20260608-103133-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-103133-tui-chat-markdown-table-rendering/item.md b/.yoi/tickets/20260608-103133-001/item.md similarity index 90% rename from .yoi/tickets/closed/20260608-103133-tui-chat-markdown-table-rendering/item.md rename to .yoi/tickets/20260608-103133-001/item.md index 44c560fa..8a12f7c5 100644 --- a/.yoi/tickets/closed/20260608-103133-tui-chat-markdown-table-rendering/item.md +++ b/.yoi/tickets/20260608-103133-001/item.md @@ -1,18 +1,10 @@ --- -id: '20260608-103133-tui-chat-markdown-table-rendering' -slug: 'tui-chat-markdown-table-rendering' -title: 'TUI chat view should render Markdown tables' -status: 'closed' -kind: 'bug' -priority: 'P2' -labels: ['tui', 'chat', 'markdown', 'rendering', 'ux'] -workflow_state: 'done' -created_at: '2026-06-08T10:31:33Z' -updated_at: '2026-06-08T23:36:49Z' -assignee: null -risk_flags: ['tui-rendering', 'markdown'] -queued_by: 'workspace-panel' -queued_at: '2026-06-08T13:13:23Z' +title: "TUI chat view should render Markdown tables" +state: "closed" +created_at: "2026-06-08T10:31:33Z" +updated_at: "2026-06-08T23:36:49Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T13:13:23Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-103133-tui-chat-markdown-table-rendering/resolution.md b/.yoi/tickets/20260608-103133-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-103133-tui-chat-markdown-table-rendering/resolution.md rename to .yoi/tickets/20260608-103133-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-103133-tui-chat-markdown-table-rendering/thread.md b/.yoi/tickets/20260608-103133-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-103133-tui-chat-markdown-table-rendering/thread.md rename to .yoi/tickets/20260608-103133-001/thread.md diff --git a/.yoi/tickets/open/20260608-061235-orchestrator-active-ticket-plan-iteration/artifacts/.gitkeep b/.yoi/tickets/20260608-103842-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260608-061235-orchestrator-active-ticket-plan-iteration/artifacts/.gitkeep rename to .yoi/tickets/20260608-103842-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-103842-remove-legacy-ticket-schema-fields/item.md b/.yoi/tickets/20260608-103842-001/item.md similarity index 89% rename from .yoi/tickets/closed/20260608-103842-remove-legacy-ticket-schema-fields/item.md rename to .yoi/tickets/20260608-103842-001/item.md index 329bba30..c81dbe1f 100644 --- a/.yoi/tickets/closed/20260608-103842-remove-legacy-ticket-schema-fields/item.md +++ b/.yoi/tickets/20260608-103842-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-103842-remove-legacy-ticket-schema-fields' -slug: 'remove-legacy-ticket-schema-fields' -title: 'Remove legacy Ticket schema fields and intake compatibility' -status: 'closed' -kind: 'task' -priority: 'P1' -labels: ['ticket', 'schema', 'migration', 'cleanup'] -workflow_state: 'done' -created_at: '2026-06-08T10:38:42Z' -updated_at: '2026-06-08T12:49:24Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-08T11:21:33Z' +title: "Remove legacy Ticket schema fields and intake compatibility" +state: "closed" +created_at: "2026-06-08T10:38:42Z" +updated_at: "2026-06-08T12:49:24Z" +queued_by: "workspace-panel" +queued_at: "2026-06-08T11:21:33Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-103842-remove-legacy-ticket-schema-fields/resolution.md b/.yoi/tickets/20260608-103842-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-103842-remove-legacy-ticket-schema-fields/resolution.md rename to .yoi/tickets/20260608-103842-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-103842-remove-legacy-ticket-schema-fields/thread.md b/.yoi/tickets/20260608-103842-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-103842-remove-legacy-ticket-schema-fields/thread.md rename to .yoi/tickets/20260608-103842-001/thread.md diff --git a/.yoi/tickets/open/20260608-072732-typed-ticket-relation-metadata/artifacts/.gitkeep b/.yoi/tickets/20260608-110940-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260608-072732-typed-ticket-relation-metadata/artifacts/.gitkeep rename to .yoi/tickets/20260608-110940-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260608-110940-simplify-ticket-identity-fields/item.md b/.yoi/tickets/20260608-110940-001/item.md similarity index 91% rename from .yoi/tickets/open/20260608-110940-simplify-ticket-identity-fields/item.md rename to .yoi/tickets/20260608-110940-001/item.md index defd990e..1af264e1 100644 --- a/.yoi/tickets/open/20260608-110940-simplify-ticket-identity-fields/item.md +++ b/.yoi/tickets/20260608-110940-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-110940-simplify-ticket-identity-fields' -slug: 'simplify-ticket-identity-fields' -title: 'Simplify Ticket identity to timestamp key and title' -status: 'open' -kind: 'task' -priority: 'P1' -labels: ['ticket', 'schema', 'identity', 'migration', 'orchestrator'] -workflow_state: 'inprogress' -created_at: '2026-06-08T11:09:40Z' -updated_at: '2026-06-09T05:04:45Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-09T02:13:30Z' +title: "Simplify Ticket identity to timestamp key and title" +state: "inprogress" +created_at: "2026-06-08T11:09:40Z" +updated_at: "2026-06-09T05:04:45Z" +queued_by: "workspace-panel" +queued_at: "2026-06-09T02:13:30Z" --- ## Background diff --git a/.yoi/tickets/open/20260608-110940-simplify-ticket-identity-fields/thread.md b/.yoi/tickets/20260608-110940-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260608-110940-simplify-ticket-identity-fields/thread.md rename to .yoi/tickets/20260608-110940-001/thread.md diff --git a/.yoi/tickets/open/20260608-110940-simplify-ticket-identity-fields/artifacts/.gitkeep b/.yoi/tickets/20260608-125430-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260608-110940-simplify-ticket-identity-fields/artifacts/.gitkeep rename to .yoi/tickets/20260608-125430-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260608-125430-objective-records-for-medium-term-goals/item.md b/.yoi/tickets/20260608-125430-001/item.md similarity index 88% rename from .yoi/tickets/open/20260608-125430-objective-records-for-medium-term-goals/item.md rename to .yoi/tickets/20260608-125430-001/item.md index 304cb38c..39a09271 100644 --- a/.yoi/tickets/open/20260608-125430-objective-records-for-medium-term-goals/item.md +++ b/.yoi/tickets/20260608-125430-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-125430-objective-records-for-medium-term-goals' -slug: 'objective-records-for-medium-term-goals' -title: 'Define Objective records for medium-term goals' -status: 'open' -kind: 'task' -priority: 'P2' -labels: ['objective', 'ticket', 'planning', 'workflow', 'design'] -workflow_state: 'queued' -created_at: '2026-06-08T12:54:30Z' -updated_at: '2026-06-09T02:28:14Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-09T02:27:33Z' +title: "Define Objective records for medium-term goals" +state: "queued" +created_at: "2026-06-08T12:54:30Z" +updated_at: "2026-06-09T02:28:14Z" +queued_by: "workspace-panel" +queued_at: "2026-06-09T02:27:33Z" --- ## Background diff --git a/.yoi/tickets/open/20260608-125430-objective-records-for-medium-term-goals/thread.md b/.yoi/tickets/20260608-125430-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260608-125430-objective-records-for-medium-term-goals/thread.md rename to .yoi/tickets/20260608-125430-001/thread.md diff --git a/.yoi/tickets/open/20260608-125430-objective-records-for-medium-term-goals/artifacts/.gitkeep b/.yoi/tickets/20260608-132230-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260608-125430-objective-records-for-medium-term-goals/artifacts/.gitkeep rename to .yoi/tickets/20260608-132230-001/artifacts/.gitkeep diff --git a/.yoi/tickets/closed/20260608-132230-deprecate-umbrella-tickets/item.md b/.yoi/tickets/20260608-132230-001/item.md similarity index 91% rename from .yoi/tickets/closed/20260608-132230-deprecate-umbrella-tickets/item.md rename to .yoi/tickets/20260608-132230-001/item.md index 14affa43..6eeadaee 100644 --- a/.yoi/tickets/closed/20260608-132230-deprecate-umbrella-tickets/item.md +++ b/.yoi/tickets/20260608-132230-001/item.md @@ -1,17 +1,10 @@ --- -id: '20260608-132230-deprecate-umbrella-tickets' -slug: 'deprecate-umbrella-tickets' -title: 'Deprecate umbrella Tickets' -status: 'closed' -kind: 'task' -priority: 'P2' -labels: ['ticket', 'workflow', 'documentation', 'planning'] -workflow_state: 'done' -created_at: '2026-06-08T13:22:30Z' -updated_at: '2026-06-09T02:04:40Z' -assignee: null -queued_by: 'workspace-panel' -queued_at: '2026-06-09T01:14:14Z' +title: "Deprecate umbrella Tickets" +state: "closed" +created_at: "2026-06-08T13:22:30Z" +updated_at: "2026-06-09T02:04:40Z" +queued_by: "workspace-panel" +queued_at: "2026-06-09T01:14:14Z" --- ## Background diff --git a/.yoi/tickets/closed/20260608-132230-deprecate-umbrella-tickets/resolution.md b/.yoi/tickets/20260608-132230-001/resolution.md similarity index 100% rename from .yoi/tickets/closed/20260608-132230-deprecate-umbrella-tickets/resolution.md rename to .yoi/tickets/20260608-132230-001/resolution.md diff --git a/.yoi/tickets/closed/20260608-132230-deprecate-umbrella-tickets/thread.md b/.yoi/tickets/20260608-132230-001/thread.md similarity index 100% rename from .yoi/tickets/closed/20260608-132230-deprecate-umbrella-tickets/thread.md rename to .yoi/tickets/20260608-132230-001/thread.md diff --git a/.yoi/tickets/open/20260609-032533-session-analytics-tooling/artifacts/.gitkeep b/.yoi/tickets/20260609-032533-001/artifacts/.gitkeep similarity index 100% rename from .yoi/tickets/open/20260609-032533-session-analytics-tooling/artifacts/.gitkeep rename to .yoi/tickets/20260609-032533-001/artifacts/.gitkeep diff --git a/.yoi/tickets/open/20260609-032533-session-analytics-tooling/item.md b/.yoi/tickets/20260609-032533-001/item.md similarity index 94% rename from .yoi/tickets/open/20260609-032533-session-analytics-tooling/item.md rename to .yoi/tickets/20260609-032533-001/item.md index 7b6ccbcc..ddfd9386 100644 --- a/.yoi/tickets/open/20260609-032533-session-analytics-tooling/item.md +++ b/.yoi/tickets/20260609-032533-001/item.md @@ -1,16 +1,8 @@ --- -id: '20260609-032533-session-analytics-tooling' -slug: 'session-analytics-tooling' -title: 'セッション解析ツールを追加する' -status: 'open' -kind: 'task' -priority: 'P2' -labels: ['session', 'analytics', 'cli', 'tooling', 'dogfooding'] -workflow_state: 'ready' -created_at: '2026-06-09T03:25:33Z' -updated_at: '2026-06-09T04:43:46Z' -assignee: null -legacy_ticket: null +title: "セッション解析ツールを追加する" +state: "ready" +created_at: "2026-06-09T03:25:33Z" +updated_at: "2026-06-09T04:43:46Z" --- ## 背景 diff --git a/.yoi/tickets/open/20260609-032533-session-analytics-tooling/thread.md b/.yoi/tickets/20260609-032533-001/thread.md similarity index 100% rename from .yoi/tickets/open/20260609-032533-session-analytics-tooling/thread.md rename to .yoi/tickets/20260609-032533-001/thread.md diff --git a/.yoi/tickets/closed/20260527-201313-openai-responses-unhandled-sse-observability/item.md b/.yoi/tickets/closed/20260527-201313-openai-responses-unhandled-sse-observability/item.md deleted file mode 100644 index 8d1ae385..00000000 --- a/.yoi/tickets/closed/20260527-201313-openai-responses-unhandled-sse-observability/item.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -id: 20260527-201313-openai-responses-unhandled-sse-observability -slug: openai-responses-unhandled-sse-observability -title: OpenAI Responses 未対応 SSE event を破棄せず観測する -status: closed -kind: feature -priority: P1 -labels: [llm, openai, observability, trace] -created_at: 2026-05-27T20:13:13Z -updated_at: 2026-05-27T20:44:19Z -assignee: null ---- - -## Background - -Created by tickets.sh. - -## Acceptance criteria - -- TBD diff --git a/.yoi/tickets/closed/20260607-095142-workspace-orchestrator-spawn-diagnostic-persistence/item.md b/.yoi/tickets/closed/20260607-095142-workspace-orchestrator-spawn-diagnostic-persistence/item.md deleted file mode 100644 index 09e99b90..00000000 --- a/.yoi/tickets/closed/20260607-095142-workspace-orchestrator-spawn-diagnostic-persistence/item.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -id: 20260607-095142-workspace-orchestrator-spawn-diagnostic-persistence -slug: workspace-orchestrator-spawn-diagnostic-persistence -title: Keep workspace Orchestrator spawn diagnostics visible -status: closed -kind: task -priority: P2 -labels: [tui, panel, orchestrator, diagnostic] -workflow_state: done -created_at: 2026-06-07T09:51:42Z -updated_at: 2026-06-07T10:16:08Z -assignee: null ---- - -## Background - -Created by LocalTicketBackend. - -## Acceptance criteria - -- TBD diff --git a/.yoi/tickets/pending/.gitkeep b/.yoi/tickets/pending/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/.yoi/workflow/multi-agent-workflow.md b/.yoi/workflow/multi-agent-workflow.md index 9575fb42..4d225fb6 100644 --- a/.yoi/workflow/multi-agent-workflow.md +++ b/.yoi/workflow/multi-agent-workflow.md @@ -8,7 +8,7 @@ requires: [] yoi を yoi で開発する際の、worktree + coder Pod + 外部 reviewer Pod + orchestrator Pod の標準フロー。これは **最上位 Pod が細かい code review を抱えず、下位 orchestrator が実装と外部レビューの loop を完了状態まで運ぶためのフロー** である。 -worktree の機械的作成手順は `$user/worktree-workflow`、ユーザー依頼の Ticket 化は `$user/ticket-intake-workflow`、Ticket の next action 分類は `$user/ticket-orchestrator-routing`、実装前の planning/requirements sync は compatibility slug `$user/ticket-preflight-workflow` に分ける。 +worktree の機械的作成手順は `$user/worktree-workflow`、ユーザー依頼の Ticket 化は `$user/ticket-intake-workflow`、Ticket の next action 分類は `$user/ticket-orchestrator-routing`、実装前の planning/requirements sync は compatibility canonical id `$user/ticket-preflight-workflow` に分ける。 この Workflow は、対象 ticket が implementation-ready であることを前提にする。implementation-ready は full implementation plan ではなく、recorded intent / binding decisions / invariants / implementation latitude / acceptance criteria / escalation conditions に基づいて coder が bounded investigation を進め、reviewer が判断できる状態を指す。設計境界・仕様・authority boundary が未同期の場合は、worktree 作成や coder Pod 起動の前に planning/requirements sync 互換入口として `ticket-preflight-workflow` を通す。 @@ -105,7 +105,7 @@ reviewer には coder の実装方針ではなく、この intent packet と dif 下位 orchestrator を挟まない場合は、以下を最上位 orchestrator が行う。下位 orchestrator を挟む場合は、最上位は intent packet を渡し、以下の実務を下位に委譲する。 1. 状態確認 - - `git status --short --branch` + - `git state --short --branch` - 対象 ticket / ticket 群 - 関連 TODO / docs / 既存 worktree - planning sync が必要な ticket では、互換入口 `ticket-preflight-workflow` の分類・要件同期・critical risks @@ -131,7 +131,7 @@ reviewer には coder の実装方針ではなく、この intent packet と dif 4. coder 完了確認 - `ReadPodOutput` で報告を読む。 - - 通知が来ない場合でも、worktree の `git status` / `git diff` / test で完了状態を確認する。 + - 通知が来ない場合でも、worktree の `git state` / `git diff` / test で完了状態を確認する。 - coder が止まった場合、worktree 状態を見て再 spawn / rollback / 親 escalation を判断する。 5. reviewer Pod spawn diff --git a/.yoi/workflow/ticket-intake-workflow.md b/.yoi/workflow/ticket-intake-workflow.md index 0857bedf..7652b0b3 100644 --- a/.yoi/workflow/ticket-intake-workflow.md +++ b/.yoi/workflow/ticket-intake-workflow.md @@ -39,7 +39,8 @@ Intake は以下を行う。 - 不足している要件を質問する。 - 作成または refinement する Ticket が、実装・レビュー・検証・完了判断を単独で行える concrete work item であるか確認する。 - 広い依頼を分割する場合は、進捗コンテナとしての umbrella Ticket ではなく、concrete Ticket / Objective context / split decision record に責務を分ける。 -- Ticket の title / slug / kind / priority / labels を提案する。 +- Ticket の title / body/request snapshot / acceptance criteria / priority / readiness / action_required / attention_required を、現在の要件として意味がある範囲で提案する。 +- canonical ID は Ticket 作成/storage が opaque な path-derived value として割り当てるため、Intake はユーザー向け metadata として提案しない。 - background / requirements / acceptance criteria / escalation conditions を整理する。 - binding decisions / invariants と implementation latitude を分けて書く。 - 具体的な除外や触れてはいけない境界が binding decision である場合は、generic な除外リストではなく invariant / escalation condition として明記する。 @@ -70,7 +71,7 @@ Intake は以下を行う。 - `TicketComment`: 既存 Ticket refinement / decision / plan の記録。 - `TicketDoctor`: 必要に応じた整合性確認。 -Intake は `TicketReview`, `TicketStatus`, `TicketClose` を通常使わない。review / status transition / close は Orchestrator または reviewer / maintainer workflow の責務である。 +Intake は `TicketReview`, `TicketWorkflowState`, `TicketClose` を通常使わない。review / state transition / close は Orchestrator または reviewer / maintainer workflow の責務である。 Ticket tools が利用できない環境では、勝手に file write で代替しない。ユーザーまたは Orchestrator に「Ticket tools がないため materialize できない」と報告し、必要なら `yoi ticket` を使える人間/親 workflow に戻す。 @@ -94,7 +95,7 @@ Ticket tools が利用できない環境では、勝手に file write で代替 確認観点: -- 同じ目的の open / pending Ticket がないか。 +- 同じ目的の未完了 Ticket がないか。 - closed Ticket の判断・resolution と矛盾しないか。 - 既存の umbrella/progress-container Ticket が、superseded/decomposed として退役できる状態か。 - 既存 concrete follow-up Ticket や Objective context で足りるか、新規 concrete Ticket が必要か。 @@ -119,7 +120,7 @@ Ticket tools が利用できない環境では、勝手に file write で代替 最低限、以下を確認する。 - observable な完了条件は何か。 -- Ticket の種類は何か: feature / bug / cleanup / design / spike / workflow / docs / release / orchestration。 +- 作業の種類・影響範囲は prose として body に書けばよいが、current Ticket core metadata として扱わない。 - 受け入れ条件は何か。 - binding decision として残す具体的な除外・authority boundary はあるか。 - 後方互換が必要か。 @@ -183,13 +184,14 @@ risk_flags: [authority-boundary, persistence, prompt-context, public-api] ```text Title: -Kind: Priority: -Labels: Readiness: -Needs planning sync: +Action required: +Attention required: Risk flags: +Body / request snapshot: + Background: Requirements: @@ -207,6 +209,8 @@ Validation: Related tickets/docs: ``` +canonical ID は作成時に storage が opaque/path-derived value として割り当てるため、draft では提案しない。 + この時点ではまだ Ticket を作らない。 ### 7. ユーザー合意を取る @@ -223,7 +227,7 @@ Related tickets/docs: 新規 Ticket の場合: - `TicketCreate` を使う。 -- title / slug / kind / priority / labels / body を指定する。 +- title / priority / body と、必要な readiness / action_required / attention_required を指定する。canonical ID は storage が割り当てる。 - body に readiness / open questions / risk flags と、binding decisions / invariants、implementation latitude、escalation conditions を Markdown で明記する。 既存 Ticket refinement の場合: @@ -236,7 +240,7 @@ Related tickets/docs: ユーザーへ以下を返す。 -- 作成/更新した Ticket id / slug / title。 +- 作成/更新した Ticket の system-assigned id / title。 - readiness。 - open questions / risk flags。 - 次に Orchestrator が取るべき routing 候補。 @@ -293,6 +297,6 @@ Ticket の body は Markdown/freeform を維持する。すべてを strict sche ## 他 Workflow への接続 -- `ticket-preflight-workflow`: legacy compatibility slug の planning/requirements sync 入口。新規 routing は standalone preflight ではなく planning return/requirements sync として扱う。 +- `ticket-preflight-workflow`: legacy compatibility planning/requirements sync 入口。新規 routing は standalone preflight ではなく planning return/requirements sync として扱う。 - `multi-agent-workflow`: Orchestrator が implementation_ready と判断した後に接続する。 - `ticket-orchestrator-routing`: この Workflow が作った Ticket を routing する後続 Workflow。 diff --git a/.yoi/workflow/ticket-orchestrator-routing.md b/.yoi/workflow/ticket-orchestrator-routing.md index 22a72283..cc9df1c3 100644 --- a/.yoi/workflow/ticket-orchestrator-routing.md +++ b/.yoi/workflow/ticket-orchestrator-routing.md @@ -21,13 +21,13 @@ Panel Queue / queued notification は、人間が Orchestrator に routing を ```text TicketCreate / TicketComment -> Ticket Orchestrator Routing Workflow - -> planning return / requirements sync / spike / implementation / review / blocked / close / pending + -> planning return / requirements sync / spike / implementation / review / blocked / close -> 必要に応じて他 Workflow へ接続 ``` -- Intake は Ticket の materialization と planning/clarification を担当する role であり、workflow_state 名ではない。 -- workflow_state は `planning -> ready -> queued -> inprogress -> done` を基本遷移とする。 -- `ticket-preflight-workflow` は legacy slug 互換の planning/requirements sync entry であり、`preflight` を独立 state / lane / long-lived operation として扱わない。 +- Intake は Ticket の materialization と planning/clarification を担当する role であり、state 名ではない。 +- state は `planning -> ready -> queued -> inprogress -> done` を基本遷移とする。 +- `ticket-preflight-workflow` は legacy canonical id 互換の planning/requirements sync entry であり、`preflight` を独立 state / lane / long-lived operation として扱わない。 - `ready -> queued` は人間が Orchestrator routing を許可した状態であり、worktree 作成や Pod 起動の許可そのものではない。 - `multi-agent-workflow` は coder / reviewer Pod と worktree を使う実装・レビュー loop。 - この Workflow は自動 scheduler / lease / unattended maintainer ではない。 @@ -71,10 +71,9 @@ Orchestrator は以下を行う。 - `TicketList`: routing 候補や関連 Ticket の確認。 - `TicketShow`: 対象 Ticket の body / thread / artifacts / resolution 確認。 - `TicketComment`: routing decision / intent packet / blocked reason / next question の記録。 -- `TicketStatus`: pending/open などの状態整理が明示的に許可された場合だけ使う。 - `TicketWorkflowState`: `queued -> inprogress` acceptance、`inprogress -> done`、または concrete missing decision/information reason を伴う `ready|queued -> planning` に使う。 - `TicketOrchestrationPlanQuery`: 対象 Ticket や関連 Ticket の ordering / blocker / conflict / waiting-capacity / accepted-plan 記録を読む。queued acceptance 前に必ず確認する。 -- `TicketOrchestrationPlanRecord`: Orchestrator が routing 中に project-relevant な ordering / dependency / conflict / capacity/waiting / accepted-plan decision を残す。これは queue reorder、自動起動、workflow_state 変更ではない。 +- `TicketOrchestrationPlanRecord`: Orchestrator が routing 中に project-relevant な ordering / dependency / conflict / capacity/waiting / accepted-plan decision を残す。これは queue reorder、自動起動、state 変更ではない。 - `TicketClose`: 完了権限と resolution が揃っている場合だけ使う。 - `TicketDoctor`: routing 前後の整合性確認。 @@ -82,13 +81,13 @@ Orchestrator は以下を行う。 ## Queued acceptance contract -`workflow_state = queued` は、Ticket が routing 対象として人間により Orchestrator へ渡された状態である。Orchestrator は queued notification を受けたら、Ticket、workspace state、対象 Ticket の `TicketOrchestrationPlanQuery` 記録、risk domain に応じた bounded project context を読んで、次のどちらかを行う。 +`state = queued` は、Ticket が routing 対象として人間により Orchestrator へ渡された状態である。Orchestrator は queued notification を受けたら、Ticket、workspace state、対象 Ticket の `TicketOrchestrationPlanQuery` 記録、risk domain に応じた bounded project context を読んで、次のどちらかを行う。 - unblocked と判断する場合: `queued -> inprogress` を記録してから worktree 作成、implementation/review Pod spawn、その他の implementation side effect に進む。 - `before` / `after` / `blocked_by` / `blocks` / `conflicts_with` / `do_not_parallelize` / waiting-capacity 記録がある場合、それを acceptance 判断の入力にする。記録は自動 scheduler ではないため、実際に進めるかどうかは Orchestrator が読んだうえで明示的に決める。 - risk flags / risky domain がある場合は、IntentPacket に invariants / reviewer focus / escalation conditions を入れる。risk flag だけを `queued -> planning` の理由にしない。 - concrete missing decision / information がある場合: `TicketWorkflowState` で `queued -> planning` を記録し、reason/body と `TicketComment` に不足項目、checked context、なぜ coder の implementation latitude では解決できないか、次の planning question/action を残す。既存の claimed live/restorable Intake/Planning Pod があり、既存通知経路が使える場合は同じ理由を通知する。 -- external action 待ちなど planning では解決しない blocker の場合: concise な理由を Ticket thread に記録し、queued のまま待つか、既存の Ticket status/state mechanism で明示的に defer/block する。 +- external action 待ちなど planning では解決しない blocker の場合: concise な理由を Ticket thread に記録し、必要に応じて attention / action-required frontmatter や `TicketOrchestrationPlanRecord` の blocker/waiting-capacity 記録で明示する。lifecycle 外の storage bucket を routing target にしない。 Invariant: @@ -214,7 +213,7 @@ Action: - 必要な判断・外部 action を短く書く。 - `TicketComment` に blocked reason と next question を記録する。 -- 必要なら `TicketStatus` で pending に移す(許可がある場合だけ)。 +- 必要に応じて attention / action-required frontmatter や orchestration plan の blocker/waiting-capacity 記録で、待ち理由を current state とは別に表す。lifecycle 外の storage bucket へ移す route は使わない。 ### `close_ready` @@ -234,21 +233,6 @@ Action: - umbrella/progress-container Ticket を退役する close resolution では、関連作業がすべて完了したという意味ではなく container role を retired したことを明記し、完了済み concrete Ticket と残る follow-up Ticket / Objective を列挙する。 - close 権限がない場合は merge-ready / close-ready dossier を親/人間に提出する。 -### `defer_pending` - -今は進めないが blocked ではない。 - -条件: - -- 優先度・タイミングの理由で後回し。 -- 依存はあるが active blocker として扱うほどではない。 -- broad request が concrete implementable Ticket に分解され、Objective context や split decision record の作成待ちである。 - -Action: - -- defer reason を `TicketComment` に記録する。 -- 必要なら `TicketStatus` で pending に移す(許可がある場合だけ)。 - ### `closed_or_noop` routing 不要。 @@ -268,7 +252,7 @@ Action: ### 1. 状態確認 -- `git status --short --branch` +- `git state --short --branch` - `TicketShow ` - 関連 Ticket の `TicketList` / `TicketShow` - 必要に応じて docs/code/workflow/history @@ -389,13 +373,12 @@ IntentPacket が短く書けない場合、`implementation_ready` ではなく ` ### 7. 後続 Workflow へ接続する - `requirements_sync_needed` → `ticket-intake-workflow` / human / planning sync -- `return_to_planning` → `ticket-preflight-workflow`(legacy compatibility slug の planning sync entry) +- `return_to_planning` → `ticket-preflight-workflow`(legacy compatibility canonical id の planning sync entry) - `spike_needed` → read-only investigation plan / Pod(許可後) - `implementation_ready` → `multi-agent-workflow` - `review_needed` → reviewer Pod / review workflow - `blocked_action_required` → human / parent Orchestrator - `close_ready` → close workflow / maintainer decision -- `defer_pending` → pending / Objective or split-decision follow-up management ## 完了条件 diff --git a/.yoi/workflow/ticket-preflight-workflow.md b/.yoi/workflow/ticket-preflight-workflow.md index 74a4b54f..fc728ad2 100644 --- a/.yoi/workflow/ticket-preflight-workflow.md +++ b/.yoi/workflow/ticket-preflight-workflow.md @@ -1,5 +1,5 @@ --- -description: 互換 slug を残した Ticket planning / requirements sync workflow。preflight を独立 lane や workflow_state として扱わない。 +description: 互換 canonical id を残した Ticket planning / requirements sync workflow。preflight を独立 lane や state として扱わない。 model_invokation: true user_invocable: true requires: [] @@ -15,7 +15,7 @@ requires: [] この workflow は次をしてはいけない。 -- `preflight` を workflow_state として扱う。 +- `preflight` を state として扱う。 - `preflight` vocabulary を current Ticket metadata として新規に書く。 - 「リスクがある」だけで Ticket を戻す。 - broad effort の進捗を保持するためだけの umbrella/progress-container Ticket を作る。 diff --git a/.yoi/workflow/worktree-workflow.md b/.yoi/workflow/worktree-workflow.md index 593f0d67..48b8fbb5 100644 --- a/.yoi/workflow/worktree-workflow.md +++ b/.yoi/workflow/worktree-workflow.md @@ -95,7 +95,7 @@ git -C .worktree/ sparse-checkout set --no-cone \ 確認する。 ```bash -git -C .worktree/ status --short --branch +git -C .worktree/ state --short --branch test ! -e .worktree//.yoi/memory if test -d .worktree//.yoi; then test ! -e .worktree//.yoi/override.local.toml diff --git a/AGENTS.md b/AGENTS.md index 31825f67..6350d717 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -51,16 +51,16 @@ docs-only など Nix build の価値が低い変更で省略する場合は、 ### 基本コマンド -- 新規作成: `yoi ticket create --title "..." [--slug slug] [--kind task] [--priority P2] [--label a,b]` -- 一覧: `yoi ticket list [--status open|pending|closed|all]` -- 詳細: `yoi ticket show ` -- コメント / 計画 / 判断 / 実装報告: `yoi ticket comment [--role comment|plan|decision|implementation_report] [--file path]` -- レビュー記録: `yoi ticket review --approve|--request-changes [--file path]` -- 状態変更: `yoi ticket status open|pending` -- 完了: `yoi ticket close [--resolution text|--file path]` +- 新規作成: `yoi ticket create --title "..." [--priority P2]` +- 一覧: `yoi ticket list [--state planning|ready|queued|inprogress|done|closed|all]` +- 詳細: `yoi ticket show ` +- コメント / 計画 / 判断 / 実装報告: `yoi ticket comment [--role comment|plan|decision|implementation_report] [--file path]` +- レビュー記録: `yoi ticket review --approve|--request-changes [--file path]` +- 状態変更: `yoi ticket state planning|ready|queued|inprogress|done` +- 完了: `yoi ticket close [--resolution text|--file path]` - 整合性確認: `yoi ticket doctor` -`yoi ticket` は typed Ticket backend 経由で `.yoi/tickets/{open,pending,closed}//` 配下の `item.md`、`thread.md`、`artifacts/` を扱う。完了時は `resolution.md` も作られる。手でファイルを作るより、原則として `yoi ticket` または Ticket tools を使うこと。 +`yoi ticket` は typed Ticket backend 経由で flat な `.yoi/tickets//` 配下の `item.md`、`thread.md`、`artifacts/` を扱う。Ticket identity はこのディレクトリ名である canonical ID のみで、title/slug words を含む alias や `open`/`pending`/`closed` bucket は現在の authority ではない。現在の lifecycle は frontmatter の `state` だけで表し、`done` と `closed` は区別する。完了時は同じ Ticket ディレクトリ内に `resolution.md` も作られる。手でファイルを作るより、原則として `yoi ticket` または Ticket tools を使うこと。 ### Work item の粒度 @@ -71,10 +71,10 @@ docs-only など Nix build の価値が低い変更で省略する場合は、 ### ライフサイクル -- 作成: `yoi ticket create ...` で `.yoi/tickets/open/...` を作成し、必要な前提を書いて commit する。 +- 作成: `yoi ticket create ...` で `.yoi/tickets//` を作成し、必要な前提を書いて commit する。出力された canonical ID を以後の操作に使う。 - 詳細化・前提変更: `item.md` を更新し、必要に応じて `yoi ticket comment` で `thread.md` に経緯を残して commit する。 -- レビュー: `yoi ticket review --approve|--request-changes` で `thread.md` にレビュー結果を追記して commit する。 -- 完了: `yoi ticket close ` で `.yoi/tickets/closed/...` に移動し、`resolution.md` と完了状態を commit する。 +- レビュー: `yoi ticket review --approve|--request-changes` で `thread.md` にレビュー結果を追記して commit する。 +- 完了: `yoi ticket close ` で `state: closed` と `resolution.md` を同じ flat Ticket ディレクトリに記録して commit する。 worktree と併用して作業を進める場合、必ずブランチを切る前に対象 work item を作成・詳細化して commit してから切ること。 diff --git a/crates/client/src/ticket_role.rs b/crates/client/src/ticket_role.rs index 1a5e011d..afea335d 100644 --- a/crates/client/src/ticket_role.rs +++ b/crates/client/src/ticket_role.rs @@ -25,49 +25,26 @@ const PRE_RUN_ACTION_TIMEOUT: Duration = Duration::from_secs(5); #[derive(Debug, Clone, PartialEq, Eq, Default)] pub struct TicketRef { pub id: Option, - pub slug: Option, } impl TicketRef { pub fn id(id: impl Into) -> Self { Self { id: Some(id.into()), - slug: None, - } - } - - pub fn slug(slug: impl Into) -> Self { - Self { - id: None, - slug: Some(slug.into()), - } - } - - pub fn id_slug(id: impl Into, slug: impl Into) -> Self { - Self { - id: Some(id.into()), - slug: Some(slug.into()), } } fn pod_name_seed(&self) -> Option<&str> { - non_empty(self.slug.as_deref()).or_else(|| non_empty(self.id.as_deref())) + non_empty(self.id.as_deref()) } fn append_prompt_lines(&self, out: &mut String) { - match ( - non_empty(self.id.as_deref()), - non_empty(self.slug.as_deref()), - ) { - (None, None) => out.push_str("Target Ticket: not specified\n"), - (id, slug) => { + match non_empty(self.id.as_deref()) { + None => out.push_str("Target Ticket: not specified\n"), + Some(id) => { out.push_str("Target Ticket:\n"); - if let Some(id) = id { - push_bounded_bullet(out, "id", id); - } - if let Some(slug) = slug { - push_bounded_bullet(out, "slug", slug); - } + push_bounded_bullet(out, "id", id); + out.push_str("- Treat the Ticket id as an opaque storage id. Read TicketShow body/thread/artifacts before routing or implementation; do not infer requirements from id or title alone.\n"); } } } @@ -92,8 +69,8 @@ impl TicketIntakeHandoff { out.push_str("\nPanel handoff:\n"); push_bounded_bullet(out, "workspace", &self.workspace_label); push_bounded_bullet(out, "workspace_orchestrator_pod", &self.orchestrator_pod); - out.push_str("- When Intake has clarified the request and created/updated the Ticket, use the typed Ticket tool surface to append `intake_summary` and set `workflow_state = ready` when the Ticket is ready to queue; use planning language for Tickets that still need clarification/preparation.\n"); - out.push_str("- Handoff report fields: created_or_updated_ticket_id_or_slug, workflow_state, open_questions_or_risk_flags, intake_summary.\n"); + out.push_str("- When Intake has clarified the request and created/updated the Ticket, use the typed Ticket tool surface to append `intake_summary` and set `state = ready` when the Ticket is ready to queue; use planning language for Tickets that still need clarification/preparation.\n"); + out.push_str("- Handoff report fields: created_or_updated_ticket_id, state, open_questions_or_risk_flags, intake_summary.\n"); out.push_str("- Do not start implementation automatically; the user queues a ready Ticket via panel (`ready -> queued`), and Orchestrator treats `queued` as schedulable before moving it to `inprogress` when starting.\n"); } } @@ -560,17 +537,17 @@ fn append_role_execution_guidance(out: &mut String, role: TicketRole) { fn append_orchestrator_agent_routing_guidance(out: &mut String) { out.push_str("\nOrchestrator worktree + agent routing guidance:\n"); out.push_str("- Treat `ticket-orchestrator-routing` as the routing gate. Read the Ticket and workspace state first; `ready -> queued` authorizes routing, not implementation side effects.\n"); - out.push_str("- Create worktrees or spawn coder/reviewer Pods only after `workflow_state = inprogress` is already recorded and accepted. If the Ticket is still queued and unblocked, record `queued -> inprogress` before any worktree/SpawnPod side effect.\n"); + out.push_str("- Create worktrees or spawn coder/reviewer Pods only after `state = inprogress` is already recorded and accepted. If the Ticket is still queued and unblocked, record `queued -> inprogress` before any worktree/SpawnPod side effect.\n"); out.push_str("- Use `worktree-workflow` for the mechanical worktree plan: create `.worktree/`, keep tracked `.yoi` project records visible in the child worktree, exclude `.yoi/memory` plus local/runtime/log/lock/secret-like `.yoi` paths, and keep active orchestration progress plus final review/approval/close in the main workspace unless explicitly designed otherwise.\n"); out.push_str("- Use `multi-agent-workflow` for the sibling loop: coder and reviewer are siblings under this Orchestrator; coder gets narrow write scope to the child worktree; reviewer is read-only by default.\n"); out.push_str("- Give the coder an intent packet that distinguishes binding decisions/invariants, implementation latitude, escalation conditions, child worktree/branch, validation commands, and report expectations; set SpawnPod `cwd` to the child worktree while delegating explicit scope separately, prohibit editing main-workspace `.yoi`/Ticket/workflow/docs records, and prohibit creating generated memory/local/runtime/secret-like files in the child worktree.\n"); out.push_str("- Give the reviewer the recorded Ticket intent, binding decisions/invariants, implementation latitude, acceptance criteria, explicit escalation conditions, diff/commits, validation evidence, and blocker/non-blocker criteria; reviewer judgment is against recorded requirements and decisions, not unrecorded preferred tactics. Keep branch-local reviewer verdicts in the review report or merge-ready dossier rather than recording them as final main-branch Ticket approval.\n"); out.push_str("- Ticket thread progress may record worktree plan, coder delegated/completed/blocked, reviewer delegated, blocker/fix-loop summaries, and merge-ready dossier pointer; do not merge, close, or record final main approval in this routing/branch-review phase.\n"); - out.push_str("- Stop at a merge-ready dossier for `orchestrator-merge-completion` containing Ticket id/slug, branch/worktree, commits, intent/invariant check, implementation summary, coder/reviewer Pods, blockers fixed or rejected findings with reasons, validation performed, residual risks, dirty state, and parent/human decision needs if any.\n"); + out.push_str("- Stop at a merge-ready dossier for `orchestrator-merge-completion` containing Ticket id, branch/worktree, commits, intent/invariant check, implementation summary, coder/reviewer Pods, blockers fixed or rejected findings with reasons, validation performed, residual risks, dirty state, and parent/human decision needs if any.\n"); out.push_str("\nOrchestrator merge-completion guidance:\n"); out.push_str("- Enter merge-completion only for an `inprogress` Ticket with a merge-ready dossier. Conservative or missing authorization mode stops at the dossier; do not infer merge authority from public/default configuration.\n"); - out.push_str("- Required dossier fields before merge: Ticket id/slug; branch/worktree; commits; intent/invariant check; implementation summary; coder/reviewer Pods; blockers fixed or rejected findings with reasons; validation performed; residual risks; dirty state; parent/human decision needs if any.\n"); + out.push_str("- Required dossier fields before merge: Ticket id; branch/worktree; commits; intent/invariant check; implementation summary; coder/reviewer Pods; blockers fixed or rejected findings with reasons; validation performed; residual risks; dirty state; parent/human decision needs if any.\n"); out.push_str("- Before merging, verify the dossier branch/worktree/commits match the branch to merge, independent reviewer approval exists in the dossier or an explicit human override decision is recorded, the main workspace is safe, and unrelated dirty changes are understood.\n"); out.push_str("- Merge only when dogfooding/workspace policy grants merge authority. If authority is unavailable, record/return the dossier and stop without merge, close, final main Ticket approval, or cleanup.\n"); out.push_str("- Preserve the boundary: branch-local reviewer verdicts are dossier evidence; final main-branch Ticket approval or close happens only during authorized merge-completion after merge and validation evidence.\n"); @@ -865,7 +842,7 @@ mod tests { fn default_config_role_launch_plan_requires_explicit_role_config() { let temp = TempDir::new().unwrap(); let mut context = TicketRoleLaunchContext::new(temp.path(), TicketRole::Coder); - context.ticket = Some(TicketRef::slug("Ticket Role Pod Launcher")); + context.ticket = Some(TicketRef::id("Ticket Role Pod Launcher")); let err = plan_ticket_role_launch(context).unwrap_err(); @@ -1032,10 +1009,7 @@ workflow = "ticket-review-workflow" ); let mut context = TicketRoleLaunchContext::new(temp.path(), TicketRole::Reviewer); context.pod_name = Some("reviewer-fixed".to_string()); - context.ticket = Some(TicketRef::id_slug( - "20260605-190330-ticket-role-pod-launcher", - "ticket-role-pod-launcher", - )); + context.ticket = Some(TicketRef::id("20260605-190330-ticket-role-pod-launcher")); context.user_instruction = Some("Review the submitted implementation.".to_string()); let plan = plan_ticket_role_launch(context).unwrap(); @@ -1098,8 +1072,8 @@ workflow = "ticket-review-workflow" assert!(handoff_text.contains("Panel handoff:")); assert!(handoff_text.contains("workspace_orchestrator_pod: panel-orchestrator-demo")); assert!(handoff_text.contains("workspace: Demo workspace")); - assert!(handoff_text.contains("created_or_updated_ticket_id_or_slug")); - assert!(handoff_text.contains("workflow_state")); + assert!(handoff_text.contains("created_or_updated_ticket_id")); + assert!(handoff_text.contains("state")); assert!(handoff_text.contains("Ticket tool surface")); assert!(handoff_text.contains("ready -> queued")); assert!(handoff_text.contains("queued` as schedulable")); @@ -1107,7 +1081,7 @@ workflow = "ticket-review-workflow" assert!(!handoff_text.contains("human Go gates")); let mut orchestrator = TicketRoleLaunchContext::new(temp.path(), TicketRole::Orchestrator); - orchestrator.ticket = Some(TicketRef::slug("launcher")); + orchestrator.ticket = Some(TicketRef::id("launcher")); orchestrator.intent_packet = Some("Route to implementation after planning sync.".into()); orchestrator.validation = vec!["cargo check --workspace --all-targets".into()]; let orchestrator_plan = plan_ticket_role_launch(orchestrator).unwrap(); @@ -1115,7 +1089,7 @@ workflow = "ticket-review-workflow" assert!(orchestrator_text.contains("Role: orchestrator")); assert!(orchestrator_text.contains("Route to implementation after planning sync.")); assert!(orchestrator_text.contains("cargo check --workspace --all-targets")); - assert!(orchestrator_text.contains("workflow_state = inprogress")); + assert!(orchestrator_text.contains("state = inprogress")); assert!(orchestrator_text.contains("worktree-workflow")); assert!(orchestrator_text.contains("keep tracked `.yoi` project records visible")); assert!(orchestrator_text.contains("exclude `.yoi/memory`")); @@ -1174,7 +1148,7 @@ workflow = "ticket-review-workflow" let temp = TempDir::new().unwrap(); write_builtin_role_config(temp.path(), &[TicketRole::Orchestrator]); let mut orchestrator = TicketRoleLaunchContext::new(temp.path(), TicketRole::Orchestrator); - orchestrator.ticket = Some(TicketRef::slug("orchestrator-merge-completion")); + orchestrator.ticket = Some(TicketRef::id("orchestrator-merge-completion")); orchestrator.intent_packet = Some("Complete an already-reviewed merge-ready Ticket.".into()); orchestrator.validation = vec!["cargo test -p client ticket_role --lib".into()]; @@ -1207,7 +1181,7 @@ workflow = "ticket-review-workflow" "remove the merged child worktree and delete the merged branch unless explicitly kept" )); assert!(text.contains("Required dossier fields before merge")); - assert!(text.contains("Ticket id/slug")); + assert!(text.contains("Ticket id")); assert!(text.contains("branch/worktree")); assert!(text.contains("commits")); assert!(text.contains("intent/invariant check")); diff --git a/crates/pod/src/feature/builtin/ticket.rs b/crates/pod/src/feature/builtin/ticket.rs index b0686f76..7e231650 100644 --- a/crates/pod/src/feature/builtin/ticket.rs +++ b/crates/pod/src/feature/builtin/ticket.rs @@ -110,14 +110,6 @@ impl TicketFeature { if !root.is_dir() { return Err("ticket backend root is not a directory".to_string()); } - for status_dir in ["open", "pending", "closed"] { - let dir = root.join(status_dir); - if !dir.is_dir() { - return Err(format!( - "ticket backend root is missing required {status_dir}/ directory" - )); - } - } Ok(root) } } @@ -192,12 +184,11 @@ fn tool_description(name: &str) -> &'static str { "Mark an intake Ticket ready and append the typed intake summary/state transition events." } "TicketWorkflowState" => { - "Transition Ticket workflow_state; queued -> inprogress is the accepted implementation start, so implementation side effects should happen only after that transition is accepted and recorded." + "Transition Ticket state; queued -> inprogress is the accepted implementation start, so implementation side effects should happen only after that transition is accepted and recorded." } - "TicketStatus" => "Move a Ticket between open and pending; use TicketClose for closed.", "TicketClose" => "Close a Ticket with a resolution through the typed local Ticket backend.", "TicketOrchestrationPlanRecord" => { - "Append a durable typed Ticket orchestration plan record without changing workflow_state or starting work." + "Append a durable typed Ticket orchestration plan record without changing state or starting work." } "TicketOrchestrationPlanQuery" => { "Query durable Ticket orchestration plan records by Ticket and/or relation kind." @@ -226,9 +217,7 @@ mod tests { use tempfile::TempDir; fn make_ticket_root(root: &Path) { - std::fs::create_dir_all(root.join("open")).unwrap(); - std::fs::create_dir_all(root.join("pending")).unwrap(); - std::fs::create_dir_all(root.join("closed")).unwrap(); + std::fs::create_dir_all(root).unwrap(); } fn write_ticket_config(workspace: &Path, content: &str) { @@ -261,7 +250,7 @@ mod tests { } #[test] - fn read_only_descriptor_declares_only_status_tools() { + fn read_only_descriptor_declares_only_state_tools() { let temp = TempDir::new().unwrap(); let feature = ticket_tools_feature_with_access(temp.path(), TicketFeatureAccess::ReadOnly); let descriptor = feature.descriptor(); @@ -467,21 +456,21 @@ provider = "github" } #[test] - fn does_not_register_ticket_tools_when_root_lacks_status_dirs() { + fn registers_ticket_tools_for_flat_backend_root() { let temp = TempDir::new().unwrap(); - std::fs::create_dir_all(temp.path().join(DEFAULT_TICKET_BACKEND_RELATIVE_PATH)).unwrap(); + let root = temp.path().join(DEFAULT_TICKET_BACKEND_RELATIVE_PATH); + std::fs::create_dir_all(&root).unwrap(); let mut pending_tools = Vec::new(); let mut hooks = HookRegistryBuilder::default(); let report = FeatureRegistryBuilder::new() .with_module(ticket_tools_feature(temp.path())) .install_into_pending(&mut pending_tools, &mut hooks); - assert!(pending_tools.is_empty()); - assert!(report.reports[0].installed_tools.is_empty()); - assert!( - report.reports[0].diagnostics[0] - .message - .contains("missing required open/ directory") - ); + assert_eq!(pending_tools.len(), TICKET_TOOL_NAMES.len()); + assert_eq!(report.reports[0].installed_tools, TICKET_TOOL_NAMES); + assert!(report.reports[0].diagnostics.is_empty()); + assert!(!root.join("open").exists()); + assert!(!root.join("pending").exists()); + assert!(!root.join("closed").exists()); } } diff --git a/crates/ticket/src/lib.rs b/crates/ticket/src/lib.rs index ad20cb02..a176c88c 100644 --- a/crates/ticket/src/lib.rs +++ b/crates/ticket/src/lib.rs @@ -1,7 +1,7 @@ //! Ticket domain types and the local `.yoi/tickets/` file backend. //! //! The public domain name is **Ticket**. `LocalTicketBackend` preserves the -//! repository's current `.yoi/tickets/{open,pending,closed}//` layout and the +//! repository's current flat `.yoi/tickets//` layout and the //! event/thread format while exposing typed Rust operations. use std::collections::{BTreeMap, BTreeSet, HashMap}; @@ -19,23 +19,7 @@ use thiserror::Error; pub mod config; pub mod tool; -const STATUSES: [TicketStatus; 3] = [ - TicketStatus::Open, - TicketStatus::Pending, - TicketStatus::Closed, -]; -const REQUIRED_FIELDS: [&str; 10] = [ - "id", - "slug", - "title", - "status", - "kind", - "priority", - "labels", - "created_at", - "updated_at", - "assignee", -]; +const REQUIRED_FIELDS: [&str; 4] = ["title", "state", "created_at", "updated_at"]; const MAX_STATE_CHANGE_REASON_BYTES: usize = 1024; const MAX_INTAKE_SUMMARY_BODY_BYTES: usize = 16 * 1024; const ORCHESTRATION_PLAN_ARTIFACT: &str = "orchestration-plan.jsonl"; @@ -75,8 +59,6 @@ pub enum TicketError { query: String, matches: Vec, }, - #[error("invalid local ticket status for mutation: {0}")] - InvalidLocalStatus(String), #[error("invalid ticket filename component: {0}")] InvalidPathComponent(String), #[error("ticket path escapes configured root: {path}")] @@ -99,7 +81,6 @@ fn io_err(path: impl Into, source: io::Error) -> TicketError { #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum TicketStatus { Open, - Pending, Closed, } @@ -107,7 +88,6 @@ impl TicketStatus { pub fn as_str(self) -> &'static str { match self { Self::Open => "open", - Self::Pending => "pending", Self::Closed => "closed", } } @@ -115,7 +95,6 @@ impl TicketStatus { pub fn parse_local(value: &str) -> Option { match value { "open" => Some(Self::Open), - "pending" => Some(Self::Pending), "closed" => Some(Self::Closed), _ => None, } @@ -131,7 +110,6 @@ impl fmt::Display for TicketStatus { #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum ExtensibleTicketStatus { Open, - Pending, Closed, Other(String), } @@ -140,7 +118,6 @@ impl ExtensibleTicketStatus { pub fn as_str(&self) -> &str { match self { Self::Open => "open", - Self::Pending => "pending", Self::Closed => "closed", Self::Other(value) => value.as_str(), } @@ -149,7 +126,6 @@ impl ExtensibleTicketStatus { pub fn as_local(&self) -> Option { match self { Self::Open => Some(TicketStatus::Open), - Self::Pending => Some(TicketStatus::Pending), Self::Closed => Some(TicketStatus::Closed), Self::Other(_) => None, } @@ -160,7 +136,6 @@ impl From<&str> for ExtensibleTicketStatus { fn from(value: &str) -> Self { match value { "open" => Self::Open, - "pending" => Self::Pending, "closed" => Self::Closed, other => Self::Other(other.to_string()), } @@ -171,7 +146,6 @@ impl From for ExtensibleTicketStatus { fn from(value: TicketStatus) -> Self { match value { TicketStatus::Open => Self::Open, - TicketStatus::Pending => Self::Pending, TicketStatus::Closed => Self::Closed, } } @@ -184,6 +158,7 @@ pub enum TicketWorkflowState { Queued, InProgress, Done, + Closed, } impl TicketWorkflowState { @@ -194,6 +169,7 @@ impl TicketWorkflowState { Self::Queued => "queued", Self::InProgress => "inprogress", Self::Done => "done", + Self::Closed => "closed", } } @@ -204,13 +180,14 @@ impl TicketWorkflowState { "queued" => Some(Self::Queued), "inprogress" => Some(Self::InProgress), "done" => Some(Self::Done), + "closed" => Some(Self::Closed), _ => None, } } pub fn default_for_status(status: &ExtensibleTicketStatus) -> Self { match status { - ExtensibleTicketStatus::Closed => Self::Done, + ExtensibleTicketStatus::Closed => Self::Closed, _ => Self::Planning, } } @@ -532,18 +509,16 @@ impl NewTicket { #[derive(Debug, Clone, Default, PartialEq, Eq)] pub struct TicketFilter { - pub status: Option, + pub state: Option, } impl TicketFilter { pub fn all() -> Self { - Self { status: None } + Self { state: None } } - pub fn status(status: TicketStatus) -> Self { - Self { - status: Some(status), - } + pub fn state(state: TicketWorkflowState) -> Self { + Self { state: Some(state) } } } @@ -640,7 +615,6 @@ pub struct NewOrchestrationPlanRecord { pub struct OrchestrationPlanRecord { pub id: String, pub ticket_id: String, - pub ticket_slug: String, pub kind: OrchestrationPlanKind, #[serde(default, skip_serializing_if = "Option::is_none")] pub related_ticket: Option, @@ -800,7 +774,6 @@ pub trait TicketBackend { ) -> Result<()>; fn queue_ready(&self, id: TicketIdOrSlug, queued_by: &str) -> Result<()>; fn review(&self, id: TicketIdOrSlug, review: TicketReview) -> Result<()>; - fn set_status(&self, id: TicketIdOrSlug, status: TicketStatus) -> Result<()>; fn close(&self, id: TicketIdOrSlug, resolution: MarkdownText) -> Result<()>; fn add_orchestration_plan_record( &self, @@ -844,9 +817,9 @@ impl LocalTicketBackend { pub fn default_intake_ready_state_change_body(&self, from: &str) -> String { if is_japanese_record_language(self.record_language()) { - format!("Ticket planning が完了しました。workflow_state {from} -> ready。\n") + format!("Ticket planning が完了しました。state {from} -> ready。\n") } else { - format!("Ticket planning complete; workflow_state {from} -> ready.\n") + format!("Ticket planning complete; state {from} -> ready.\n") } } @@ -882,32 +855,23 @@ impl LocalTicketBackend { } } - fn status_changed_body(&self, status: TicketStatus) -> String { - if is_japanese_record_language(self.record_language()) { - format!("Ticket status を `{}` に変更しました。\n", status.as_str()) - } else { - format!("Status changed to `{}`.\n", status.as_str()) - } - } - fn closed_workflow_state_body(&self) -> &'static str { if is_japanese_record_language(self.record_language()) { - "Ticket closed; workflow_state を done に設定しました。\n" + "Ticket を closed にしました。\n" } else { - "Ticket closed; workflow_state set to done.\n" + "Ticket closed.\n" } } fn ensure_backend_dirs(&self) -> Result<()> { - for status in STATUSES { - let dir = self.status_dir(status); - fs::create_dir_all(&dir).map_err(|e| io_err(dir, e))?; - } - Ok(()) + fs::create_dir_all(&self.root).map_err(|e| io_err(&self.root, e)) } - fn status_dir(&self, status: TicketStatus) -> PathBuf { - self.root.join(status.as_str()) + fn ticket_dir(&self, id: &str) -> Result { + ensure_safe_component(id)?; + let dir = self.root.join(id); + ensure_child_of(&self.root, &dir)?; + Ok(dir) } fn acquire_lock(&self) -> Result { @@ -928,60 +892,53 @@ impl LocalTicketBackend { } } - fn iter_ticket_dirs(&self, filter: TicketFilter) -> Result> { + fn iter_ticket_dirs(&self, filter: TicketFilter) -> Result> { let mut dirs = Vec::new(); - for status in STATUSES { - if let Some(filter_status) = filter.status { - if status != filter_status { + if !self.root.exists() { + return Ok(dirs); + } + let entries = fs::read_dir(&self.root).map_err(|e| io_err(&self.root, e))?; + for entry in entries { + let entry = entry.map_err(|e| io_err(&self.root, e))?; + let path = entry.path(); + let name = entry.file_name(); + let Some(name) = name.to_str() else { + continue; + }; + if !path.is_dir() || name.starts_with('.') { + continue; + } + let item = path.join("item.md"); + if !item.is_file() { + continue; + } + if let Some(state) = filter.state { + let parsed = read_item_file(&item)?; + let meta = ticket_meta_for_dir(&path, parsed.frontmatter)?; + if meta.workflow_state != state { continue; } } - let status_dir = self.status_dir(status); - if !status_dir.exists() { - continue; - } - let entries = fs::read_dir(&status_dir).map_err(|e| io_err(&status_dir, e))?; - for entry in entries { - let entry = entry.map_err(|e| io_err(&status_dir, e))?; - let path = entry.path(); - if path.is_dir() { - dirs.push((status, path)); - } - } + dirs.push(path); } - dirs.sort_by(|(_, a), (_, b)| a.cmp(b)); + dirs.sort(); Ok(dirs) } fn find_ticket_dir(&self, query: &TicketIdOrSlug) -> Result { let query = query.as_query(); - let mut matches = Vec::new(); - for (_, dir) in self.iter_ticket_dirs(TicketFilter::all())? { - let item = dir.join("item.md"); - if !item.exists() { - continue; - } - let parsed = read_item_file(&item)?; - let id = parsed.frontmatter.get("id").map(String::as_str); - let slug = parsed.frontmatter.get("slug").map(String::as_str); - if id == Some(query) || slug == Some(query) { - matches.push(dir); - } - } - match matches.len() { - 0 => Err(TicketError::NotFound(query.to_string())), - 1 => Ok(matches.remove(0)), - _ => Err(TicketError::Ambiguous { - query: query.to_string(), - matches, - }), + let dir = self.ticket_dir(query)?; + if dir.join("item.md").is_file() { + Ok(dir) + } else { + Err(TicketError::NotFound(query.to_string())) } } fn ticket_from_dir(&self, dir: &Path) -> Result { let item_path = dir.join("item.md"); let parsed = read_item_file(&item_path)?; - let meta = ticket_meta(parsed.frontmatter.clone()); + let meta = ticket_meta_for_dir(dir, parsed.frontmatter.clone())?; let document = TicketDocument { body: MarkdownText::new(parsed.body), raw_frontmatter: parsed.frontmatter.raw, @@ -1010,9 +967,10 @@ impl LocalTicketBackend { }) } - fn ticket_workflow_state_from_item(&self, item: &Path) -> Result { - let parsed = read_item_file(item)?; - let meta = ticket_meta(parsed.frontmatter); + fn ticket_workflow_state_from_dir(&self, dir: &Path) -> Result { + let item = dir.join("item.md"); + let parsed = read_item_file(&item)?; + let meta = ticket_meta_for_dir(dir, parsed.frontmatter)?; Ok(meta.workflow_state) } @@ -1035,16 +993,16 @@ impl LocalTicketBackend { ))); } let item = dir.join("item.md"); - let current = self.ticket_workflow_state_from_item(&item)?; + let current = self.ticket_workflow_state_from_dir(dir)?; if current != expected_from { return Err(TicketError::Conflict(format!( - "workflow_state changed concurrently: expected `{}`, found `{}`", + "state changed concurrently: expected `{}`, found `{}`", expected_from.as_str(), current.as_str() ))); } - self.append_state_changed_event(dir, &change, Some("workflow_state"))?; - let mut updates = vec![("workflow_state", to.as_str())]; + self.append_state_changed_event(dir, &change, Some("state"))?; + let mut updates = vec![("state", to.as_str())]; updates.extend_from_slice(extra_updates); self.set_frontmatter_fields(&item, &updates) } @@ -1143,7 +1101,7 @@ impl LocalTicketBackend { dir: &Path, ) -> Result> { let item = dir.join("item.md"); - let meta = ticket_meta(read_item_file(&item)?.frontmatter); + let meta = ticket_meta_for_dir(dir, read_item_file(&item)?.frontmatter)?; let path = self.orchestration_plan_path(dir); read_orchestration_plan_artifact(&path, Some(&meta)) } @@ -1152,13 +1110,13 @@ impl LocalTicketBackend { impl TicketBackend for LocalTicketBackend { fn list(&self, filter: TicketFilter) -> Result> { let mut tickets = Vec::new(); - for (_, dir) in self.iter_ticket_dirs(filter)? { + for dir in self.iter_ticket_dirs(filter)? { let item = dir.join("item.md"); if !item.exists() { continue; } let parsed = read_item_file(&item)?; - let meta = ticket_meta(parsed.frontmatter); + let meta = ticket_meta_for_dir(&dir, parsed.frontmatter)?; tickets.push(TicketSummary { id: meta.id, slug: meta.slug, @@ -1193,29 +1151,21 @@ impl TicketBackend for LocalTicketBackend { "ticket title must not be empty".to_string(), )); } - let slug = slugify(input.slug.as_deref().unwrap_or(&input.title)); - let slug = if slug.is_empty() { - "item".to_string() - } else { - slug - }; - ensure_safe_component(&slug)?; let stamp = compact_now_utc(); - let mut id = format!("{stamp}-{slug}"); - ensure_safe_component(&id)?; - let mut dir = self.status_dir(TicketStatus::Open).join(&id); - if dir.exists() { - id = format!("{id}-{}", std::process::id()); - ensure_safe_component(&id)?; - dir = self.status_dir(TicketStatus::Open).join(&id); - } - if dir.exists() { - return Err(TicketError::Conflict(format!( - "target already exists: {}", - dir.display() - ))); - } - ensure_child_of(&self.root, &dir)?; + let mut counter = 1_u32; + let (id, dir) = loop { + let candidate = format!("{stamp}-{counter:03}"); + let dir = self.ticket_dir(&candidate)?; + if !dir.exists() { + break (candidate, dir); + } + counter += 1; + if counter > 999 { + return Err(TicketError::Conflict(format!( + "too many ticket id collisions for timestamp {stamp}" + ))); + } + }; let created = now_utc(); let author = input .author @@ -1229,24 +1179,12 @@ impl TicketBackend for LocalTicketBackend { fs::create_dir_all(dir.join("artifacts")).map_err(|e| io_err(&dir, e))?; atomic_write(&dir.join("artifacts/.gitkeep"), b"")?; let mut fields = Vec::new(); - fields.push(("id".to_string(), format_yaml_string_scalar(&id))); - fields.push(("slug".to_string(), format_yaml_string_scalar(&slug))); fields.push(( "title".to_string(), format_yaml_string_scalar(input.title.as_str()), )); - fields.push(("status".to_string(), format_yaml_string_scalar("open"))); fields.push(( - "kind".to_string(), - format_yaml_string_scalar(input.kind.as_str()), - )); - fields.push(( - "priority".to_string(), - format_yaml_string_scalar(input.priority.as_str()), - )); - fields.push(("labels".to_string(), labels_yaml(&input.labels))); - fields.push(( - "workflow_state".to_string(), + "state".to_string(), format_yaml_string_scalar( input .workflow_state @@ -1313,8 +1251,8 @@ impl TicketBackend for LocalTicketBackend { ); atomic_write(&dir.join("thread.md"), thread.as_bytes())?; Ok(TicketRef { - id, - slug, + id: id.clone(), + slug: id, status: TicketStatus::Open, }) } @@ -1353,9 +1291,9 @@ impl TicketBackend for LocalTicketBackend { change: TicketStateChange, ) -> Result<()> { validate_state_field_name(field)?; - if field == "workflow_state" { + if field == "state" || field == "workflow_state" || field == "status" { return Err(TicketError::Conflict( - "workflow_state transitions must use dedicated workflow APIs".to_string(), + "ticket lifecycle state transitions must use dedicated lifecycle APIs".to_string(), )); } let _lock = self.acquire_lock()?; @@ -1422,17 +1360,17 @@ impl TicketBackend for LocalTicketBackend { })?; if !TicketWorkflowState::is_planning_ready_transition(from, to) { return Err(TicketError::Conflict(format!( - "mark_intake_ready only allows workflow_state planning -> ready, got {} -> {}", + "mark_intake_ready only allows state planning -> ready, got {} -> {}", from.as_str(), to.as_str() ))); } let _lock = self.acquire_lock()?; let dir = self.find_ticket_dir(&id)?; - let current = self.ticket_workflow_state_from_item(&dir.join("item.md"))?; + let current = self.ticket_workflow_state_from_dir(&dir)?; if current != from { return Err(TicketError::Conflict(format!( - "workflow_state changed concurrently: expected `{}`, found `{}`", + "state changed concurrently: expected `{}`, found `{}`", from.as_str(), current.as_str() ))); @@ -1477,92 +1415,33 @@ impl TicketBackend for LocalTicketBackend { ) } - fn set_status(&self, id: TicketIdOrSlug, status: TicketStatus) -> Result<()> { - let _lock = self.acquire_lock()?; - self.ensure_backend_dirs()?; - let old_dir = self.find_ticket_dir(&id)?; - let item = old_dir.join("item.md"); - let parsed = read_item_file(&item)?; - let ticket_id = - parsed.frontmatter.get("id").cloned().ok_or_else(|| { - TicketError::Conflict(format!("missing id in {}", item.display())) - })?; - ensure_safe_component(&ticket_id)?; - let new_dir = self.status_dir(status).join(&ticket_id); - ensure_child_of(&self.root, &new_dir)?; - if old_dir != new_dir { - if new_dir.exists() { - return Err(TicketError::Conflict(format!( - "target already exists: {}", - new_dir.display() - ))); - } - fs::rename(&old_dir, &new_dir).map_err(|e| io_err(&new_dir, e))?; - } - self.set_frontmatter_fields(&new_dir.join("item.md"), &[("status", status.as_str())])?; - let author = default_author(); - let body = MarkdownText::new(self.status_changed_body(status)); - self.append_thread_event( - &new_dir, - "status_changed", - self.generated_heading("Status changed", "ステータス変更"), - &author, - Some(status.as_str()), - &[], - &body, - ) - } - fn close(&self, id: TicketIdOrSlug, resolution: MarkdownText) -> Result<()> { let _lock = self.acquire_lock()?; self.ensure_backend_dirs()?; - let old_dir = self.find_ticket_dir(&id)?; - let item = old_dir.join("item.md"); - let parsed = read_item_file(&item)?; - let ticket_id = - parsed.frontmatter.get("id").cloned().ok_or_else(|| { - TicketError::Conflict(format!("missing id in {}", item.display())) - })?; - ensure_safe_component(&ticket_id)?; - let closed_dir = self.status_dir(TicketStatus::Closed).join(&ticket_id); - ensure_child_of(&self.root, &closed_dir)?; - if old_dir != closed_dir { - if closed_dir.exists() { - return Err(TicketError::Conflict(format!( - "target already exists: {}", - closed_dir.display() - ))); - } - fs::rename(&old_dir, &closed_dir).map_err(|e| io_err(&closed_dir, e))?; - } + let dir = self.find_ticket_dir(&id)?; let at = now_utc(); - let current_workflow_state = - self.ticket_workflow_state_from_item(&closed_dir.join("item.md"))?; - if current_workflow_state != TicketWorkflowState::Done { + let current_workflow_state = self.ticket_workflow_state_from_dir(&dir)?; + if current_workflow_state != TicketWorkflowState::Closed { let mut change = TicketStateChange::new( current_workflow_state.as_str(), - TicketWorkflowState::Done.as_str(), + TicketWorkflowState::Closed.as_str(), "closed", self.closed_workflow_state_body(), ); change.author = Some(default_author()); - self.append_state_changed_event(&closed_dir, &change, Some("workflow_state"))?; + self.append_state_changed_event(&dir, &change, Some("state"))?; } self.set_frontmatter_fields( - &closed_dir.join("item.md"), + &dir.join("item.md"), &[ - ("status", "closed"), - ("workflow_state", TicketWorkflowState::Done.as_str()), + ("state", TicketWorkflowState::Closed.as_str()), ("updated_at", &at), ], )?; - atomic_write( - &closed_dir.join("resolution.md"), - resolution.as_str().as_bytes(), - )?; + atomic_write(&dir.join("resolution.md"), resolution.as_str().as_bytes())?; let author = default_author(); self.append_thread_event( - &closed_dir, + &dir, "close", self.generated_heading("Closed", "完了"), &author, @@ -1582,7 +1461,7 @@ impl TicketBackend for LocalTicketBackend { self.ensure_backend_dirs()?; let dir = self.find_ticket_dir(&id)?; let item = dir.join("item.md"); - let meta = ticket_meta(read_item_file(&item)?.frontmatter); + let meta = ticket_meta_for_dir(&dir, read_item_file(&item)?.frontmatter)?; let artifacts = dir.join("artifacts"); fs::create_dir_all(&artifacts).map_err(|e| io_err(&artifacts, e))?; let path = self.orchestration_plan_path(&dir); @@ -1600,7 +1479,6 @@ impl TicketBackend for LocalTicketBackend { let output = OrchestrationPlanRecord { id: format!("orch-plan-{}-{}", compact_now_utc(), line_count + 1), ticket_id: meta.id.clone(), - ticket_slug: meta.slug.clone(), kind: record.kind, related_ticket: record.related_ticket.map(trim_owned), note: record.note.map(trim_owned), @@ -1635,18 +1513,8 @@ impl TicketBackend for LocalTicketBackend { let dir = self.find_ticket_dir(&ticket)?; records.extend(self.read_orchestration_plan_records_for_dir(&dir)?); } else { - for status in STATUSES { - let status_dir = self.status_dir(status); - if !status_dir.is_dir() { - continue; - } - for entry in fs::read_dir(&status_dir).map_err(|e| io_err(&status_dir, e))? { - let entry = entry.map_err(|e| io_err(&status_dir, e))?; - let dir = entry.path(); - if dir.is_dir() { - records.extend(self.read_orchestration_plan_records_for_dir(&dir)?); - } - } + for dir in self.iter_ticket_dirs(TicketFilter::all())? { + records.extend(self.read_orchestration_plan_records_for_dir(&dir)?); } } if let Some(kind) = kind { @@ -1658,150 +1526,108 @@ impl TicketBackend for LocalTicketBackend { fn doctor(&self) -> Result { let mut report = TicketDoctorReport::default(); - for status in STATUSES { - let dir = self.status_dir(status); - if !dir.is_dir() { - report.push_error(format!("missing directory: {}", dir.display()), Some(dir)); - } - } let mut ids: HashMap = HashMap::new(); let mut duplicate_ids: BTreeSet = BTreeSet::new(); - let mut slugs: HashMap = HashMap::new(); - let mut duplicate_slugs: BTreeSet = BTreeSet::new(); - for status in STATUSES { - let status_dir = self.status_dir(status); - if !status_dir.is_dir() { - continue; + for legacy_bucket in ["open", "pending", "closed"] { + let legacy_dir = self.root.join(legacy_bucket); + if legacy_dir.is_dir() { + report.push_error( + format!("legacy ticket bucket remains: {}", legacy_dir.display()), + Some(legacy_dir), + ); } - for entry in fs::read_dir(&status_dir).map_err(|e| io_err(&status_dir, e))? { - let entry = entry.map_err(|e| io_err(&status_dir, e))?; - let dir = entry.path(); - if !dir.is_dir() { + } + + for dir in self.iter_ticket_dirs(TicketFilter::all())? { + let ticket_id = match ticket_id_from_dir(&dir) { + Ok(id) => id, + Err(err) => { + report.push_error(err.to_string(), Some(dir.clone())); continue; } - let item = dir.join("item.md"); - let thread = dir.join("thread.md"); - let artifacts = dir.join("artifacts"); - if !item.is_file() { - report.push_error( - format!("missing item.md: {}", dir.display()), - Some(dir.clone()), - ); + }; + if ids.insert(ticket_id.clone(), dir.clone()).is_some() { + duplicate_ids.insert(ticket_id.clone()); + } + let item = dir.join("item.md"); + let thread = dir.join("thread.md"); + let artifacts = dir.join("artifacts"); + if !thread.is_file() { + report.push_error( + format!("missing thread.md: {}", dir.display()), + Some(thread.clone()), + ); + } + if !artifacts.is_dir() { + report.push_error( + format!("missing artifacts/: {}", dir.display()), + Some(artifacts.clone()), + ); + } + let parsed = match read_item_file(&item) { + Ok(parsed) => parsed, + Err(TicketError::Parse { message, .. }) => { + report.push_error(message, Some(item.clone())); continue; } - if !thread.is_file() { - report.push_error( - format!("missing thread.md: {}", dir.display()), - Some(thread.clone()), - ); - } - if !artifacts.is_dir() { - report.push_error( - format!("missing artifacts/: {}", dir.display()), - Some(artifacts.clone()), - ); - } - let parsed = match read_item_file(&item) { - Ok(parsed) => parsed, - Err(TicketError::Parse { message, .. }) => { - report.push_error(message, Some(item.clone())); - continue; - } - Err(e) => return Err(e), - }; - for field in REQUIRED_FIELDS { - if parsed - .frontmatter - .get(field) - .is_none_or(|value| value.is_empty()) - { - report.push_error( - format!("missing required field '{field}': {}", item.display()), - Some(item.clone()), - ); - } - } - if let Some(id) = parsed.frontmatter.get("id") { - if ids.insert(id.clone(), item.clone()).is_some() { - duplicate_ids.insert(id.clone()); - } - if dir.file_name().and_then(|name| name.to_str()) != Some(id.as_str()) { - report.push_error( - format!("directory id mismatch: {} has id {id}", dir.display()), - Some(dir.clone()), - ); - } - } - if let Some(slug) = parsed.frontmatter.get("slug") { - if slugs.insert(slug.clone(), item.clone()).is_some() { - duplicate_slugs.insert(slug.clone()); - } - } - let fm_status = parsed + Err(e) => return Err(e), + }; + for field in REQUIRED_FIELDS { + if parsed .frontmatter - .get("status") - .map(String::as_str) - .unwrap_or(""); - if fm_status != status.as_str() { + .get(field) + .is_none_or(|value| value.is_empty()) + { report.push_error( - format!( - "status mismatch: {} has '{fm_status}' under '{}'", - item.display(), - status.as_str() - ), + format!("missing required field '{field}': {}", item.display()), Some(item.clone()), ); } - match parsed.frontmatter.get("workflow_state").map(String::as_str) { - Some(value) if TicketWorkflowState::parse(value).is_none() => report - .push_error( - format!("invalid workflow_state '{value}': {}", item.display()), - Some(item.clone()), - ), - _ => {} - } - if status == TicketStatus::Closed - && parsed - .frontmatter - .get("workflow_state") - .is_none_or(|value| value != TicketWorkflowState::Done.as_str()) - { - report.push_warning( + } + for obsolete in ["id", "slug", "status", "workflow_state", "kind", "labels"] { + if parsed.frontmatter.get(obsolete).is_some() { + report.push_error( format!( - "closed ticket should have workflow_state: done: {}", + "obsolete current frontmatter field '{obsolete}': {}", item.display() ), Some(item.clone()), ); } - if status == TicketStatus::Closed && !dir.join("resolution.md").is_file() { - report.push_warning( - format!("closed ticket missing resolution.md: {}", dir.display()), - Some(dir.join("resolution.md")), - ); - } - if thread.exists() { - doctor_thread_events(&thread, &mut report)?; - } - if artifacts.exists() { - doctor_artifacts(&artifacts, &mut report)?; - let meta = ticket_meta(parsed.frontmatter.clone()); - doctor_orchestration_plan_artifact( - &artifacts.join(ORCHESTRATION_PLAN_ARTIFACT), - &meta, - &mut report, - )?; - } + } + match parsed.frontmatter.get("state").map(String::as_str) { + Some(value) if TicketWorkflowState::parse(value).is_none() => report.push_error( + format!("invalid state '{value}': {}", item.display()), + Some(item.clone()), + ), + _ => {} + } + if parsed.frontmatter.get("state").map(String::as_str) == Some("closed") + && !dir.join("resolution.md").is_file() + { + report.push_warning( + format!("closed ticket missing resolution.md: {}", dir.display()), + Some(dir.join("resolution.md")), + ); + } + if thread.exists() { + doctor_thread_events(&thread, &mut report)?; + } + if artifacts.exists() { + doctor_artifacts(&artifacts, &mut report)?; + let meta = ticket_meta_for_dir(&dir, parsed.frontmatter.clone())?; + doctor_orchestration_plan_artifact( + &artifacts.join(ORCHESTRATION_PLAN_ARTIFACT), + &meta, + &mut report, + )?; } } for duplicate in duplicate_ids { report.push_error(format!("duplicate id: {duplicate}"), None); } - for duplicate in duplicate_slugs { - report.push_error(format!("duplicate slug: {duplicate}"), None); - } let todo = self .root @@ -1854,6 +1680,7 @@ struct ParsedItem { } #[derive(Debug, Clone, Default)] +#[allow(dead_code)] struct TicketItemFrontmatter { id: Option, slug: Option, @@ -1870,6 +1697,8 @@ struct TicketItemFrontmatter { action_required: Option, workflow_state: Option, workflow_state_explicit: bool, + state: Option, + state_explicit: bool, attention_required: Option, queued_by: Option, queued_at: Option, @@ -1948,7 +1777,15 @@ fn parse_ticket_frontmatter(content: &str) -> std::result::Result Some(TicketWorkflowState::parse(value).ok_or_else(|| { - format!("invalid workflow_state '{value}': expected planning, ready, queued, inprogress, or done") + format!("invalid workflow_state '{value}': expected planning, ready, queued, inprogress, done, or closed") + })?), + None => None, + }; + let state_explicit = mapping.contains_key(YamlValue::String("state".into())); + let state_value = yaml_string(&mapping, "state")?; + let state = match state_value.as_deref() { + Some(value) => Some(TicketWorkflowState::parse(value).ok_or_else(|| { + format!("invalid state '{value}': expected planning, ready, queued, inprogress, done, or closed") })?), None => None, }; @@ -1969,6 +1806,8 @@ fn parse_ticket_frontmatter(content: &str) -> std::result::Result &'static str { } } -fn ticket_meta(frontmatter: TicketItemFrontmatter) -> TicketMeta { - let status = frontmatter - .status - .as_deref() - .map(ExtensibleTicketStatus::from) - .unwrap_or_else(|| ExtensibleTicketStatus::Other(String::new())); +fn ticket_id_from_dir(dir: &Path) -> Result { + let Some(name) = dir.file_name().and_then(|name| name.to_str()) else { + return Err(TicketError::Conflict(format!( + "ticket directory has no UTF-8 id: {}", + dir.display() + ))); + }; + ensure_safe_component(name)?; + Ok(name.to_string()) +} + +fn ticket_meta_for_dir(dir: &Path, frontmatter: TicketItemFrontmatter) -> Result { + Ok(ticket_meta(frontmatter, ticket_id_from_dir(dir)?)) +} + +fn ticket_meta(frontmatter: TicketItemFrontmatter, id: String) -> TicketMeta { let workflow_state = frontmatter - .workflow_state - .unwrap_or_else(|| TicketWorkflowState::default_for_status(&status)); + .state + .or(frontmatter.workflow_state) + .or_else(|| { + frontmatter + .status + .as_deref() + .map(ExtensibleTicketStatus::from) + .map(|status| TicketWorkflowState::default_for_status(&status)) + }) + .unwrap_or(TicketWorkflowState::Planning); + let status = match workflow_state { + TicketWorkflowState::Closed => ExtensibleTicketStatus::Closed, + _ => ExtensibleTicketStatus::Open, + }; TicketMeta { - id: frontmatter.id.unwrap_or_default(), - slug: frontmatter.slug.unwrap_or_default(), + id: id.clone(), + slug: id, title: frontmatter.title.unwrap_or_default(), status, - kind: frontmatter.kind.unwrap_or_default(), + kind: String::new(), priority: frontmatter.priority.unwrap_or_default(), - labels: frontmatter.labels, + labels: Vec::new(), created_at: frontmatter.created_at, updated_at: frontmatter.updated_at, assignee: frontmatter.assignee, @@ -2074,7 +1935,7 @@ fn ticket_meta(frontmatter: TicketItemFrontmatter) -> TicketMeta { risk_flags: frontmatter.risk_flags, action_required: frontmatter.action_required, workflow_state, - workflow_state_explicit: frontmatter.workflow_state_explicit, + workflow_state_explicit: frontmatter.state_explicit, attention_required: frontmatter.attention_required, queued_by: frontmatter.queued_by, queued_at: frontmatter.queued_at, @@ -2232,16 +2093,6 @@ fn validate_orchestration_plan_record( Some(&record.ticket_id), MAX_ORCHESTRATION_PLAN_FIELD_BYTES, )?; - validate_plan_required_text( - "ticket_slug", - &record.ticket_slug, - MAX_ORCHESTRATION_PLAN_FIELD_BYTES, - )?; - validate_plan_optional_single_line( - "ticket_slug", - Some(&record.ticket_slug), - MAX_ORCHESTRATION_PLAN_FIELD_BYTES, - )?; validate_plan_required_text("author", &record.author, MAX_ORCHESTRATION_PLAN_FIELD_BYTES)?; validate_plan_optional_single_line( "author", @@ -2259,10 +2110,10 @@ fn validate_orchestration_plan_record( }; validate_new_orchestration_plan_record(&new_record)?; if let Some(meta) = meta { - if record.ticket_id != meta.id || record.ticket_slug != meta.slug { + if record.ticket_id != meta.id { return Err(TicketError::Conflict(format!( - "orchestration plan record {} targets {}/{} but artifact belongs to {}/{}", - record.id, record.ticket_id, record.ticket_slug, meta.id, meta.slug + "orchestration plan record {} targets {} but artifact belongs to {}", + record.id, record.ticket_id, meta.id ))); } } @@ -2857,21 +2708,6 @@ fn ensure_safe_component(value: &str) -> Result<()> { } } -fn slugify(value: &str) -> String { - let mut out = String::new(); - let mut previous_dash = false; - for ch in value.chars().flat_map(char::to_lowercase) { - if ch.is_ascii_alphanumeric() { - out.push(ch); - previous_dash = false; - } else if !previous_dash { - out.push('-'); - previous_dash = true; - } - } - out.trim_matches('-').to_string() -} - fn now_utc() -> String { Utc::now().format("%Y-%m-%dT%H:%M:%SZ").to_string() } @@ -2942,20 +2778,15 @@ mod tests { #[test] fn parses_item_frontmatter_and_optional_fields() { let item = r#"--- -id: 20260605-000000-example -slug: example title: Example -status: open -kind: task +state: ready priority: P1 -labels: [ticket, backend] created_at: 2026-06-05T00:00:00Z updated_at: 2026-06-05T00:00:00Z assignee: null readiness: implementation-ready risk_flags: [low, local] action_required: none -workflow_state: ready attention_required: none queued_by: workspace-panel queued_at: 2026-06-05T00:01:00Z @@ -2964,9 +2795,10 @@ queued_at: 2026-06-05T00:01:00Z ## Body "#; let parsed = parse_item(item).unwrap(); - let meta = ticket_meta(parsed.frontmatter); - assert_eq!(meta.id, "20260605-000000-example"); - assert_eq!(meta.labels, vec!["ticket", "backend"]); + let meta = ticket_meta(parsed.frontmatter, "20260609-000000-001".to_string()); + assert_eq!(meta.id, "20260609-000000-001"); + assert_eq!(meta.slug, "20260609-000000-001"); + assert!(meta.labels.is_empty()); assert_eq!(meta.readiness.as_deref(), Some("implementation-ready")); assert_eq!(meta.risk_flags, vec!["low", "local"]); assert_eq!(meta.action_required.as_deref(), Some("none")); @@ -2980,20 +2812,17 @@ queued_at: 2026-06-05T00:01:00Z #[test] fn yaml_frontmatter_preserves_typed_nulls_lists_and_quoted_strings() { let frontmatter = parse_ticket_frontmatter( - r#"labels: - - ticket - - backend -risk_flags: [low, local] + r#"risk_flags: [low, local] assignee: ~ attention_required: null action_required: "null" readiness: "~" -workflow_state: planning +state: planning "#, ) .unwrap(); - let meta = ticket_meta(frontmatter); - assert_eq!(meta.labels, vec!["ticket", "backend"]); + let meta = ticket_meta(frontmatter, "20260609-000000-001".to_string()); + assert!(meta.labels.is_empty()); assert_eq!(meta.risk_flags, vec!["low", "local"]); assert_eq!(meta.assignee, None); assert_eq!(meta.attention_required, None); @@ -3011,17 +2840,11 @@ workflow_state: planning "{labels_error}" ); - let workflow_error = parse_ticket_frontmatter("workflow_state: almost").unwrap_err(); - assert!( - workflow_error.contains("invalid workflow_state"), - "{workflow_error}" - ); + let state_error = parse_ticket_frontmatter("state: almost").unwrap_err(); + assert!(state_error.contains("invalid state"), "{state_error}"); - let intake_error = parse_ticket_frontmatter("workflow_state: intake").unwrap_err(); - assert!( - intake_error.contains("invalid workflow_state"), - "{intake_error}" - ); + let intake_error = parse_ticket_frontmatter("state: intake").unwrap_err(); + assert!(intake_error.contains("invalid state"), "{intake_error}"); } #[test] @@ -3037,12 +2860,31 @@ workflow_state: planning let mut input = NewTicket::new("Example Ticket"); input.labels = vec!["ticket".into(), "backend".into()]; let ticket = backend.create(input).unwrap(); - let dir = tmp.path().join("tickets/open").join(&ticket.id); + let dir = tmp.path().join("tickets").join(&ticket.id); assert!(dir.join("item.md").exists()); assert!(dir.join("thread.md").exists()); assert!(dir.join("artifacts/.gitkeep").exists()); - assert_eq!(ticket.slug, "example-ticket"); + assert!(!ticket.id.contains("example")); + assert_eq!(ticket.slug, ticket.id); let item = fs::read_to_string(dir.join("item.md")).unwrap(); + assert!( + item.contains("state: planning") + || item.contains("state: \"planning\"") + || item.contains("state: 'planning'") + ); + for obsolete in [ + "id:", + "slug:", + "status:", + "workflow_state:", + "kind:", + "labels:", + ] { + assert!( + !item.contains(obsolete), + "obsolete field {obsolete} in {item}" + ); + } assert!(!item.contains("legacy_ticket:")); assert!(!item.contains("needs_preflight:")); let record = backend.show(TicketIdOrSlug::Id(ticket.id.clone())).unwrap(); @@ -3059,10 +2901,7 @@ workflow_state: planning .with_record_language(Some("Japanese")); let created = backend.create(NewTicket::new("日本語レコード")).unwrap(); - let dir = backend - .root() - .join(TicketStatus::Open.as_str()) - .join(created.id.as_str()); + let dir = backend.root().join(created.id.as_str()); let item = fs::read_to_string(dir.join("item.md")).unwrap(); let thread = fs::read_to_string(dir.join("thread.md")).unwrap(); @@ -3077,8 +2916,6 @@ workflow_state: planning let tmp = TempDir::new().unwrap(); let backend = backend(&tmp); let mut input = NewTicket::new("123"); - input.slug = Some("numeric-looking-strings".to_string()); - input.labels = vec!["123".into(), "01".into()]; input.risk_flags = vec!["1".into(), "42".into()]; input.assignee = Some("42".into()); input.attention_required = Some("0".into()); @@ -3087,21 +2924,16 @@ workflow_state: planning let record = backend.show(TicketIdOrSlug::Id(ticket.id.clone())).unwrap(); assert_eq!(record.meta.title, "123"); - assert_eq!(record.meta.labels, vec!["123", "01"]); + assert!(record.meta.labels.is_empty()); assert_eq!(record.meta.risk_flags, vec!["1", "42"]); assert_eq!(record.meta.assignee.as_deref(), Some("42")); assert_eq!(record.meta.attention_required.as_deref(), Some("0")); assert_eq!(record.meta.action_required.as_deref(), Some("true")); - let item = fs::read_to_string( - tmp.path() - .join("tickets/open") - .join(&ticket.id) - .join("item.md"), - ) - .unwrap(); + let item = fs::read_to_string(tmp.path().join("tickets").join(&ticket.id).join("item.md")) + .unwrap(); assert!(item.contains("title: '123'"), "{item}"); - assert!(item.contains("labels: ['123', '01']"), "{item}"); + assert!(!item.contains("labels:"), "{item}"); assert!(item.contains("risk_flags: ['1', '42']"), "{item}"); assert!(item.contains("assignee: '42'"), "{item}"); assert!(item.contains("attention_required: '0'"), "{item}"); @@ -3118,7 +2950,7 @@ workflow_state: planning let ticket = backend.create(NewTicket::new("Flow Ticket")).unwrap(); backend .add_event( - TicketIdOrSlug::Slug(ticket.slug.clone()), + TicketIdOrSlug::Id(ticket.id.clone()), NewTicketEvent::new(TicketEventKind::Plan, "Implementation plan."), ) .unwrap(); @@ -3128,22 +2960,27 @@ workflow_state: planning TicketReview::approve("Looks good."), ) .unwrap(); + let mut summary = TicketIntakeSummary::new("Ready for queue."); + summary.author = Some("test".to_string()); + let mut change = TicketStateChange::new( + "planning", + "ready", + "ready_for_queue", + MarkdownText::new("Ready for queue."), + ); + change.author = Some("test".to_string()); backend - .set_status(TicketIdOrSlug::Id(ticket.id.clone()), TicketStatus::Pending) + .mark_intake_ready(TicketIdOrSlug::Id(ticket.id.clone()), summary, change) .unwrap(); - let pending_item = tmp - .path() - .join("tickets/pending") - .join(&ticket.id) - .join("item.md"); - assert!(pending_item.exists()); + let current_item = tmp.path().join("tickets").join(&ticket.id).join("item.md"); + assert!(current_item.exists()); backend .close( TicketIdOrSlug::Id(ticket.id.clone()), MarkdownText::new("Done.\n"), ) .unwrap(); - let closed_dir = tmp.path().join("tickets/closed").join(&ticket.id); + let closed_dir = tmp.path().join("tickets").join(&ticket.id); assert!(closed_dir.join("resolution.md").exists()); let thread = fs::read_to_string(closed_dir.join("thread.md")).unwrap(); assert!(thread.contains("author".into()); assert!(matches!( backend.create(input), Err(TicketError::Conflict(_)) )); - let open_dir = tmp.path().join("tickets/open"); - let entries = fs::read_dir(open_dir).unwrap().count(); - assert_eq!(entries, 0); + let ticket_dirs = fs::read_dir(tmp.path().join("tickets")) + .unwrap() + .filter(|entry| entry.as_ref().is_ok_and(|entry| entry.path().is_dir())) + .count(); + assert_eq!(ticket_dirs, 0); } #[test] @@ -3257,7 +3095,7 @@ workflow_state: planning ); let thread = fs::read_to_string( tmp.path() - .join("tickets/open") + .join("tickets") .join(&ticket.id) .join("thread.md"), ) @@ -3276,11 +3114,7 @@ workflow_state: planning let ticket = backend .create(NewTicket::new("State Field Ticket")) .unwrap(); - let item = tmp - .path() - .join("tickets/open") - .join(&ticket.id) - .join("item.md"); + let item = tmp.path().join("tickets").join(&ticket.id).join("item.md"); backend .set_frontmatter_fields(&item, &[("readiness", "requirements-sync")]) .unwrap(); @@ -3320,19 +3154,22 @@ workflow_state: planning } #[test] - fn workflow_state_defaults_and_queue_transition_round_trip() { + fn state_defaults_and_queue_transition_round_trip() { let tmp = TempDir::new().unwrap(); let backend = backend(&tmp); let missing_meta = ticket_meta( - parse_ticket_frontmatter("status: open").expect("missing workflow state parses"), + parse_ticket_frontmatter("title: Missing State").expect("missing state parses"), + "20260609-000000-001".to_string(), ); assert_eq!(missing_meta.workflow_state, TicketWorkflowState::Planning); assert!(!missing_meta.workflow_state_explicit); - let closed_meta = - ticket_meta(parse_ticket_frontmatter("status: closed").expect("closed default parses")); - assert_eq!(closed_meta.workflow_state, TicketWorkflowState::Done); - assert!(!closed_meta.workflow_state_explicit); + let closed_meta = ticket_meta( + parse_ticket_frontmatter("state: closed").expect("closed state parses"), + "20260609-000000-002".to_string(), + ); + assert_eq!(closed_meta.workflow_state, TicketWorkflowState::Closed); + assert!(closed_meta.workflow_state_explicit); let mut ready_input = NewTicket::new("Ready Workflow"); ready_input.workflow_state = Some(TicketWorkflowState::Ready); @@ -3351,7 +3188,7 @@ workflow_state: planning .iter() .find(|event| event.kind == TicketEventKind::StateChanged) .unwrap(); - assert_eq!(event.state_field.as_deref(), Some("workflow_state")); + assert_eq!(event.state_field.as_deref(), Some("state")); assert_eq!(event.from.as_deref(), Some("ready")); assert_eq!(event.to.as_deref(), Some("queued")); assert_eq!(event.reason.as_deref(), Some("queued")); @@ -3379,7 +3216,7 @@ workflow_state: planning } #[test] - fn workflow_state_cannot_be_changed_through_generic_state_field_api() { + fn state_cannot_be_changed_through_generic_field_api() { let tmp = TempDir::new().unwrap(); let backend = backend(&tmp); let ticket = backend @@ -3389,15 +3226,11 @@ workflow_state: planning "planning", "done", "bypass", - "Generic state field API must not mutate workflow_state.", + "Generic field API must not mutate state.", ); assert!(matches!( - backend.set_state_field( - TicketIdOrSlug::Id(ticket.id.clone()), - "workflow_state", - change - ), + backend.set_state_field(TicketIdOrSlug::Id(ticket.id.clone()), "state", change), Err(TicketError::Conflict(_)) )); let record = backend.show(TicketIdOrSlug::Id(ticket.id)).unwrap(); @@ -3428,14 +3261,14 @@ workflow_state: planning ); assert!(record.events.iter().any(|event| { event.kind == TicketEventKind::StateChanged - && event.state_field.as_deref() == Some("workflow_state") + && event.state_field.as_deref() == Some("state") && event.from.as_deref() == Some("planning") && event.to.as_deref() == Some("ready") })); } #[test] - fn close_sets_workflow_state_done() { + fn close_sets_state_closed() { let tmp = TempDir::new().unwrap(); let backend = backend(&tmp); let mut input = NewTicket::new("Close Workflow"); @@ -3450,27 +3283,25 @@ workflow_state: planning .unwrap(); let record = backend.show(TicketIdOrSlug::Id(ticket.id)).unwrap(); assert_eq!(record.meta.status, ExtensibleTicketStatus::Closed); - assert_eq!(record.meta.workflow_state, TicketWorkflowState::Done); + assert_eq!(record.meta.workflow_state, TicketWorkflowState::Closed); assert!(record.events.iter().any(|event| { event.kind == TicketEventKind::StateChanged - && event.state_field.as_deref() == Some("workflow_state") - && event.to.as_deref() == Some("done") + && event.state_field.as_deref() == Some("state") + && event.to.as_deref() == Some("closed") })); } #[test] - fn doctor_reports_invalid_workflow_state() { + fn doctor_reports_invalid_state() { let tmp = TempDir::new().unwrap(); let root = tmp.path().join("tickets"); - fs::create_dir_all(root.join("open/bad/artifacts")).unwrap(); + fs::create_dir_all(root.join("20260609-000000-001/artifacts")).unwrap(); fs::write( - root.join("open/bad/item.md"), - "---\nid: bad\nslug: bad\ntitle: Bad\nstatus: open\nkind: task\npriority: P2\nworkflow_state: almost\nlabels: []\ncreated_at: x\nupdated_at: x\nassignee: null\n---\n", + root.join("20260609-000000-001/item.md"), + "---\ntitle: Bad\nstate: almost\ncreated_at: x\nupdated_at: x\n---\n", ) .unwrap(); - fs::write(root.join("open/bad/thread.md"), "").unwrap(); - fs::create_dir_all(root.join("pending")).unwrap(); - fs::create_dir_all(root.join("closed")).unwrap(); + fs::write(root.join("20260609-000000-001/thread.md"), "").unwrap(); let report = LocalTicketBackend::new(&root).doctor().unwrap(); let messages = report @@ -3480,26 +3311,24 @@ workflow_state: planning .collect::>() .join("\n"); assert!(!report.is_ok()); - assert!(messages.contains("invalid workflow_state")); + assert!(messages.contains("invalid state"), "{messages}"); } #[test] fn doctor_validates_typed_thread_event_attributes() { let tmp = TempDir::new().unwrap(); let root = tmp.path().join("tickets"); - fs::create_dir_all(root.join("open/bad/artifacts")).unwrap(); + fs::create_dir_all(root.join("20260609-000000-001/artifacts")).unwrap(); fs::write( - root.join("open/bad/item.md"), - "---\nid: bad\nslug: bad\ntitle: Bad\nstatus: open\nkind: task\npriority: P2\nlabels: []\ncreated_at: x\nupdated_at: x\nassignee: null\n---\n", + root.join("20260609-000000-001/item.md"), + "---\ntitle: Bad\nstate: planning\ncreated_at: x\nupdated_at: x\n---\n", ) .unwrap(); fs::write( - root.join("open/bad/thread.md"), + root.join("20260609-000000-001/thread.md"), "\n\n## State changed\n\n---\n\n\n\n## Intake summary\n\n---\n", ) .unwrap(); - fs::create_dir_all(root.join("pending")).unwrap(); - fs::create_dir_all(root.join("closed")).unwrap(); let report = LocalTicketBackend::new(&root).doctor().unwrap(); let messages = report .diagnostics @@ -3517,25 +3346,24 @@ workflow_state: planning fn doctor_reports_core_consistency_errors() { let tmp = TempDir::new().unwrap(); let root = tmp.path().join("tickets"); - fs::create_dir_all(root.join("open/bad/artifacts")).unwrap(); + fs::create_dir_all(root.join("open/legacy/artifacts")).unwrap(); fs::write( - root.join("open/bad/item.md"), - "---\nid: other\nslug: dup\ntitle: Bad\nstatus: pending\nkind: task\npriority: P2\nlabels: []\ncreated_at: x\nupdated_at: x\nassignee: null\n---\n", + root.join("open/legacy/item.md"), + "---\ntitle: Legacy\nstate: planning\ncreated_at: x\nupdated_at: x\n---\n", + ) + .unwrap(); + fs::write(root.join("open/legacy/thread.md"), "").unwrap(); + fs::create_dir_all(root.join("20260609-000000-001/artifacts")).unwrap(); + fs::write( + root.join("20260609-000000-001/item.md"), + "---\nid: old\nslug: old\ntitle: Bad\nstatus: pending\nworkflow_state: ready\nkind: task\nlabels: []\ncreated_at: x\nupdated_at: x\n---\n", ) .unwrap(); fs::write( - root.join("open/bad/thread.md"), + root.join("20260609-000000-001/thread.md"), "\n", ) .unwrap(); - fs::create_dir_all(root.join("pending/other/artifacts")).unwrap(); - fs::write( - root.join("pending/other/item.md"), - "---\nid: other\nslug: dup\ntitle: Dup\nstatus: pending\nkind: task\npriority: P2\nlabels: []\ncreated_at: x\nupdated_at: x\nassignee: null\n---\n", - ) - .unwrap(); - fs::write(root.join("pending/other/thread.md"), "").unwrap(); - fs::create_dir_all(root.join("closed")).unwrap(); let report = LocalTicketBackend::new(&root).doctor().unwrap(); let messages = report .diagnostics @@ -3544,10 +3372,13 @@ workflow_state: planning .collect::>() .join("\n"); assert!(!report.is_ok()); - assert!(messages.contains("directory id mismatch")); - assert!(messages.contains("status mismatch")); - assert!(messages.contains("duplicate id: other")); - assert!(messages.contains("duplicate slug: dup")); + assert!(messages.contains("legacy ticket bucket remains")); + assert!(messages.contains("obsolete current frontmatter field 'id'")); + assert!(messages.contains("obsolete current frontmatter field 'slug'")); + assert!(messages.contains("obsolete current frontmatter field 'status'")); + assert!(messages.contains("obsolete current frontmatter field 'workflow_state'")); + assert!(messages.contains("obsolete current frontmatter field 'kind'")); + assert!(messages.contains("obsolete current frontmatter field 'labels'")); assert!(messages.contains("review event missing valid status")); } @@ -3570,25 +3401,6 @@ workflow_state: planning assert!(matches!(err, TicketError::Locked { .. })); } - #[test] - fn rejects_unsafe_components_for_status_moves() { - let tmp = TempDir::new().unwrap(); - let root = tmp.path().join("tickets"); - fs::create_dir_all(root.join("open/bad/artifacts")).unwrap(); - fs::write( - root.join("open/bad/item.md"), - "---\nid: ../bad\nslug: bad\ntitle: Bad\nstatus: open\nkind: task\npriority: P2\nlabels: []\ncreated_at: x\nupdated_at: x\nassignee: null\n---\n", - ) - .unwrap(); - fs::write(root.join("open/bad/thread.md"), "").unwrap(); - fs::create_dir_all(root.join("pending")).unwrap(); - fs::create_dir_all(root.join("closed")).unwrap(); - let err = LocalTicketBackend::new(&root) - .set_status(TicketIdOrSlug::Slug("bad".into()), TicketStatus::Pending) - .unwrap_err(); - assert!(matches!(err, TicketError::InvalidPathComponent(_))); - } - #[test] fn orchestration_plan_records_persist_and_query_by_ticket_and_kind() { let temp = TempDir::new().unwrap(); @@ -3601,7 +3413,7 @@ workflow_state: planning TicketIdOrSlug::Id(first.id.clone()), NewOrchestrationPlanRecord { kind: OrchestrationPlanKind::Before, - related_ticket: Some(second.slug.clone()), + related_ticket: Some(second.id.clone()), note: Some( "First must land before second because both touch routing.".to_string(), ), @@ -3615,7 +3427,7 @@ workflow_state: planning backend .add_orchestration_plan_record( - TicketIdOrSlug::Slug(first.slug.clone()), + TicketIdOrSlug::Id(first.id.clone()), NewOrchestrationPlanRecord { kind: OrchestrationPlanKind::AcceptedPlan, related_ticket: None, @@ -3635,7 +3447,7 @@ workflow_state: planning .unwrap(); let ticket_records = backend - .query_orchestration_plan_records(Some(TicketIdOrSlug::Query(first.slug.clone())), None) + .query_orchestration_plan_records(Some(TicketIdOrSlug::Query(first.id.clone())), None) .unwrap(); assert_eq!(ticket_records.len(), 2); assert!( @@ -3650,13 +3462,12 @@ workflow_state: planning assert_eq!(before_records.len(), 1); assert_eq!( before_records[0].related_ticket.as_deref(), - Some(second.slug.as_str()) + Some(second.id.as_str()) ); let path = temp .path() .join("tickets") - .join("open") .join(&first.id) .join("artifacts") .join(ORCHESTRATION_PLAN_ARTIFACT); @@ -3691,7 +3502,6 @@ workflow_state: planning let artifact = temp .path() .join("tickets") - .join("open") .join(&ticket.id) .join("artifacts") .join(ORCHESTRATION_PLAN_ARTIFACT); diff --git a/crates/ticket/src/tool.rs b/crates/ticket/src/tool.rs index 11c79abc..8434ea8e 100644 --- a/crates/ticket/src/tool.rs +++ b/crates/ticket/src/tool.rs @@ -12,11 +12,11 @@ use serde::{Deserialize, Serialize}; use serde_json::{Value, json}; use crate::{ - AcceptedOrchestrationPlan, ExtensibleTicketStatus, LocalTicketBackend, MarkdownText, - NewOrchestrationPlanRecord, NewTicket, NewTicketEvent, OrchestrationPlanKind, Ticket, - TicketBackend, TicketDoctorDiagnostic, TicketDoctorReport, TicketDoctorSeverity, TicketError, - TicketEventKind, TicketIdOrSlug, TicketIntakeSummary, TicketRef, TicketReview, - TicketReviewResult, TicketStateChange, TicketStatus, TicketSummary, TicketWorkflowState, + AcceptedOrchestrationPlan, LocalTicketBackend, MarkdownText, NewOrchestrationPlanRecord, + NewTicket, NewTicketEvent, OrchestrationPlanKind, Ticket, TicketBackend, + TicketDoctorDiagnostic, TicketDoctorReport, TicketDoctorSeverity, TicketError, TicketEventKind, + TicketIdOrSlug, TicketIntakeSummary, TicketReview, TicketReviewResult, TicketStateChange, + TicketSummary, TicketWorkflowState, }; const DEFAULT_LIST_LIMIT: usize = 100; @@ -30,7 +30,7 @@ const MAX_BODY_MAX_BYTES: usize = 64 * 1024; const DEFAULT_DIAGNOSTIC_LIMIT: usize = 100; const MAX_DIAGNOSTIC_LIMIT: usize = 500; -pub const TICKET_TOOL_NAMES: [&str; 12] = [ +pub const TICKET_TOOL_NAMES: [&str; 11] = [ "TicketCreate", "TicketList", "TicketShow", @@ -38,7 +38,6 @@ pub const TICKET_TOOL_NAMES: [&str; 12] = [ "TicketReview", "TicketIntakeReady", "TicketWorkflowState", - "TicketStatus", "TicketClose", "TicketOrchestrationPlanRecord", "TicketOrchestrationPlanQuery", @@ -52,13 +51,12 @@ pub const TICKET_READ_ONLY_TOOL_NAMES: [&str; 4] = [ "TicketDoctor", ]; -pub const TICKET_MUTATING_TOOL_NAMES: [&str; 8] = [ +pub const TICKET_MUTATING_TOOL_NAMES: [&str; 7] = [ "TicketCreate", "TicketComment", "TicketReview", "TicketIntakeReady", "TicketWorkflowState", - "TicketStatus", "TicketClose", "TicketOrchestrationPlanRecord", ]; @@ -67,9 +65,9 @@ const CREATE_DESCRIPTION: &str = "Create a Ticket through the configured typed T Inputs mirror the Ticket `item.md` fields; `title` is required, `body` is Markdown, and the \ backend assigns the id and writes the local Ticket file layout under the configured backend root."; const LIST_DESCRIPTION: &str = "List Tickets from the configured typed Ticket backend. Filter by \ -status (`open`, `pending`, `closed`, or `all`) and optionally kind/priority/label. Output is a \ +state (`planning`, `ready`, `queued`, `inprogress`, `done`, `closed`, or `all`). Output is a \ bounded JSON summary list, not full ticket bodies."; -const SHOW_DESCRIPTION: &str = "Show one Ticket by id, slug, or exact query through the configured \ +const SHOW_DESCRIPTION: &str = "Show one Ticket by id or exact query through the configured \ typed Ticket backend. Output includes bounded Markdown body, recent thread events, resolution, and \ artifact metadata."; const COMMENT_DESCRIPTION: &str = "Append a typed Ticket thread event. `role` must be `comment`, \ @@ -79,24 +77,20 @@ const REVIEW_DESCRIPTION: &str = "Append a Ticket review event. `result` must be `request_changes`; `body` is Markdown. Writes stay inside the configured Ticket backend root."; const INTAKE_READY_DESCRIPTION: &str = "Mark an existing Ticket planning lane ready through the typed \ Ticket backend. The tool appends a bounded `intake_summary`, appends a typed `state_changed` event \ -for `workflow_state`, and transitions workflow_state to `ready`."; -const WORKFLOW_STATE_DESCRIPTION: &str = "Transition Ticket `workflow_state` through the typed \ -Ticket backend with a bounded `state_changed` event. This does not move local open/pending/closed \ -status; use `TicketStatus` or `TicketClose` for local status changes. Treat `queued -> inprogress` \ +for `state`, and transitions state to `ready`."; +const WORKFLOW_STATE_DESCRIPTION: &str = "Transition Ticket `state` through the typed \ +Ticket backend with a bounded `state_changed` event. Treat `queued -> inprogress` \ as the implementation acceptance step: implementation side effects should happen only after that \ transition is accepted and recorded. Orchestrator may return `ready` or `queued` Tickets to `planning` only with a concrete missing decision/information reason."; -const STATUS_DESCRIPTION: &str = "Move a Ticket between non-closed local statuses through the typed \ -Ticket backend. Use `TicketClose` for closing because closed Tickets require a resolution accepted \ -by `yoi ticket doctor`."; const CLOSE_DESCRIPTION: &str = "Close a Ticket with a Markdown resolution through the typed Ticket \ -backend. The backend moves the Ticket to closed/, writes resolution.md, updates item.md, and appends \ +backend. The backend sets `state: closed`, writes resolution.md, updates item.md, and appends \ a close event."; const ORCHESTRATION_PLAN_RECORD_DESCRIPTION: &str = "Append a typed Ticket orchestration plan record \ for ordering, dependency, conflict, waiting/capacity, or accepted-plan decisions. Records are durable \ -Ticket artifacts and do not move workflow_state, reorder queues, or start work."; +Ticket artifacts and do not move state, reorder queues, or start work."; const ORCHESTRATION_PLAN_QUERY_DESCRIPTION: &str = "Query durable Ticket orchestration plan records by \ -Ticket id/slug and/or relation kind. This is read-only planning context; Orchestrator must still make \ -explicit workflow_state decisions."; +Ticket id and/or relation kind. This is read-only planning context; Orchestrator must still make \ +explicit state decisions."; const DOCTOR_DESCRIPTION: &str = "Run typed Ticket backend consistency checks and return bounded \ diagnostics through the typed backend without shelling out to external commands."; @@ -104,18 +98,6 @@ diagnostics through the typed backend without shelling out to external commands. struct TicketCreateParams { /// Ticket title. Must not be empty. title: String, - /// Optional slug seed. The local backend slugifies this value. - #[serde(default)] - slug: Option, - /// Ticket kind. Defaults to `task`. - #[serde(default)] - kind: Option, - /// Ticket priority. Defaults to `P2`. - #[serde(default)] - priority: Option, - /// Ticket labels. - #[serde(default)] - labels: Vec, /// Markdown body for item.md. If omitted, a small default body is used. #[serde(default)] body: Option, @@ -134,9 +116,9 @@ struct TicketCreateParams { /// Optional action-required frontmatter value. #[serde(default)] action_required: Option, - /// Optional workflow_state frontmatter value. Defaults to `planning`. + /// Optional state frontmatter value. Defaults to `planning`. #[serde(default)] - workflow_state: Option, + state: Option, /// Optional attention_required overlay frontmatter value. #[serde(default)] attention_required: Option, @@ -156,6 +138,7 @@ enum TicketWorkflowStateParam { Queued, Inprogress, Done, + Closed, } impl TicketWorkflowStateParam { @@ -166,47 +149,71 @@ impl TicketWorkflowStateParam { Self::Queued => TicketWorkflowState::Queued, Self::Inprogress => TicketWorkflowState::InProgress, Self::Done => TicketWorkflowState::Done, + Self::Closed => TicketWorkflowState::Closed, } } } #[derive(Debug, Deserialize, schemars::JsonSchema)] #[serde(rename_all = "snake_case")] -enum TicketListStatusParam { - Open, - Pending, +enum TicketListStateParam { + Planning, + Ready, + Queued, + Inprogress, + Done, Closed, All, } +impl TicketListStateParam { + fn as_filter(self) -> (crate::TicketFilter, &'static str) { + match self { + Self::Planning => ( + crate::TicketFilter::state(TicketWorkflowState::Planning), + "planning", + ), + Self::Ready => ( + crate::TicketFilter::state(TicketWorkflowState::Ready), + "ready", + ), + Self::Queued => ( + crate::TicketFilter::state(TicketWorkflowState::Queued), + "queued", + ), + Self::Inprogress => ( + crate::TicketFilter::state(TicketWorkflowState::InProgress), + "inprogress", + ), + Self::Done => ( + crate::TicketFilter::state(TicketWorkflowState::Done), + "done", + ), + Self::Closed => ( + crate::TicketFilter::state(TicketWorkflowState::Closed), + "closed", + ), + Self::All => (crate::TicketFilter::all(), "all"), + } + } +} + #[derive(Debug, Deserialize, schemars::JsonSchema)] struct TicketListParams { - /// Status filter. Defaults to `open`; use `all` to include closed and pending Tickets. + /// State filter. Defaults to all Tickets. #[serde(default)] - status: Option, + state: Option, /// Maximum number of summaries to return. Defaults to 100, max 200. #[serde(default)] limit: Option, - /// Optional exact kind filter. - #[serde(default)] - kind: Option, - /// Optional exact priority filter. - #[serde(default)] - priority: Option, - /// Optional label that must be present. - #[serde(default)] - label: Option, } #[derive(Debug, Deserialize, schemars::JsonSchema)] struct TicketShowParams { - /// Ticket id. Exactly one of `id`, `slug`, or `query` must be provided. + /// Ticket id. Exactly one of `id` or `query` must be provided. #[serde(default)] id: Option, - /// Ticket slug. Exactly one of `id`, `slug`, or `query` must be provided. - #[serde(default)] - slug: Option, - /// Exact id-or-slug query. Exactly one of `id`, `slug`, or `query` must be provided. + /// Exact ticket id query. Exactly one of `id` or `query` must be provided. #[serde(default)] query: Option, /// Maximum number of most-recent thread events to return. Defaults to 20, max 100. @@ -231,7 +238,7 @@ enum TicketCommentRoleParam { #[derive(Debug, Deserialize, schemars::JsonSchema)] struct TicketCommentParams { - /// Ticket id or slug. + /// Ticket id. ticket: String, /// Thread event role: `comment`, `plan`, `decision`, or `implementation_report`. role: TicketCommentRoleParam, @@ -251,7 +258,7 @@ enum TicketReviewResultParam { #[derive(Debug, Deserialize, schemars::JsonSchema)] struct TicketReviewParams { - /// Ticket id or slug. + /// Ticket id. ticket: String, /// Review result: `approve` or `request_changes`. result: TicketReviewResultParam, @@ -262,24 +269,9 @@ struct TicketReviewParams { author: Option, } -#[derive(Debug, Deserialize, schemars::JsonSchema)] -#[serde(rename_all = "snake_case")] -enum TicketStatusParam { - Open, - Pending, -} - -#[derive(Debug, Deserialize, schemars::JsonSchema)] -struct TicketStatusParams { - /// Ticket id or slug. - ticket: String, - /// New status. Use `TicketClose` for `closed`. - status: TicketStatusParam, -} - #[derive(Debug, Deserialize, schemars::JsonSchema)] struct TicketIntakeReadyParams { - /// Ticket id or slug. + /// Ticket id. ticket: String, /// Concise bounded intake summary to append as a typed intake_summary event. intake_summary: String, @@ -296,11 +288,11 @@ struct TicketIntakeReadyParams { #[derive(Debug, Deserialize, schemars::JsonSchema)] struct TicketWorkflowStateParams { - /// Ticket id or slug. + /// Ticket id. ticket: String, - /// Expected current workflow_state. The backend rejects stale transitions. + /// Expected current state. The backend rejects stale transitions. from: TicketWorkflowStateParam, - /// Target workflow_state. + /// Target state. to: TicketWorkflowStateParam, /// Reason attached to the typed state_changed event. reason: String, @@ -313,7 +305,7 @@ struct TicketWorkflowStateParams { #[derive(Debug, Deserialize, schemars::JsonSchema)] struct TicketCloseParams { - /// Ticket id or slug. + /// Ticket id. ticket: String, /// Markdown resolution written to resolution.md and thread.md. resolution: String, @@ -364,11 +356,11 @@ struct AcceptedOrchestrationPlanParams { #[derive(Debug, Deserialize, schemars::JsonSchema)] struct TicketOrchestrationPlanRecordParams { - /// Ticket id or slug that owns this orchestration plan record. + /// Ticket id that owns this orchestration plan record. ticket: String, /// Record kind: before/after, blocked_by/blocks, conflicts_with/do_not_parallelize, waiting_capacity_note, or accepted_plan. kind: OrchestrationPlanKindParam, - /// Related Ticket id/slug for ordering, dependency, and conflict records. + /// Related Ticket id for ordering, dependency, and conflict records. #[serde(default)] related_ticket: Option, /// Optional bounded rationale/note. Required for waiting_capacity_note. @@ -384,7 +376,7 @@ struct TicketOrchestrationPlanRecordParams { #[derive(Debug, Deserialize, schemars::JsonSchema)] struct TicketOrchestrationPlanQueryParams { - /// Optional Ticket id or slug to query. Omit to query across the backend root. + /// Optional Ticket id to query. Omit to query across the backend root. #[serde(default)] ticket: Option, /// Optional relation kind filter. @@ -413,13 +405,12 @@ struct TicketDoctorParams { #[derive(Debug, Serialize)] struct TicketRefOutput { id: String, - slug: String, - status: String, + state: String, } #[derive(Debug, Serialize)] struct TicketListOutput { - status_filter: String, + state_filter: String, count: usize, returned: usize, truncated: bool, @@ -471,11 +462,6 @@ struct TicketWorkflowStateTool { backend: LocalTicketBackend, } -#[derive(Clone)] -struct TicketStatusTool { - backend: LocalTicketBackend, -} - #[derive(Clone)] struct TicketCloseTool { backend: LocalTicketBackend, @@ -501,14 +487,6 @@ impl Tool for TicketCreateTool { async fn execute(&self, input_json: &str) -> Result { let params: TicketCreateParams = parse_input("TicketCreate", input_json)?; let mut input = NewTicket::new(params.title); - input.slug = params.slug; - if let Some(kind) = params.kind { - input.kind = kind; - } - if let Some(priority) = params.priority { - input.priority = priority; - } - input.labels = params.labels; if let Some(body) = params.body { input.body = MarkdownText::new(body); } @@ -517,9 +495,7 @@ impl Tool for TicketCreateTool { input.readiness = params.readiness; input.risk_flags = params.risk_flags; input.action_required = params.action_required; - input.workflow_state = params - .workflow_state - .map(TicketWorkflowStateParam::into_state); + input.workflow_state = params.state.map(TicketWorkflowStateParam::into_state); input.attention_required = params.attention_required; input.queued_by = params.queued_by; input.queued_at = params.queued_at; @@ -529,13 +505,11 @@ impl Tool for TicketCreateTool { .create(input) .map_err(|error| backend_error("TicketCreate", error))?; Ok(json_output( - format!( - "Created ticket {} ({}) status {}", - created.id, - created.slug, - created.status.as_str() - ), - ticket_ref_output(created), + format!("Created ticket {}", created.id), + json!(TicketRefOutput { + id: created.id, + state: "planning".to_string(), + }), )) } } @@ -544,35 +518,13 @@ impl Tool for TicketCreateTool { impl Tool for TicketListTool { async fn execute(&self, input_json: &str) -> Result { let params: TicketListParams = parse_input("TicketList", input_json)?; - let status = params.status.unwrap_or(TicketListStatusParam::Open); - let filter = match status { - TicketListStatusParam::Open => crate::TicketFilter::status(TicketStatus::Open), - TicketListStatusParam::Pending => crate::TicketFilter::status(TicketStatus::Pending), - TicketListStatusParam::Closed => crate::TicketFilter::status(TicketStatus::Closed), - TicketListStatusParam::All => crate::TicketFilter::all(), - }; - let status_filter = match status { - TicketListStatusParam::Open => "open", - TicketListStatusParam::Pending => "pending", - TicketListStatusParam::Closed => "closed", - TicketListStatusParam::All => "all", - }; + let state = params.state.unwrap_or(TicketListStateParam::All); + let (filter, state_filter) = state.as_filter(); let limit = bounded(params.limit, DEFAULT_LIST_LIMIT, MAX_LIST_LIMIT); - let mut tickets = self + let tickets = self .backend .list(filter) .map_err(|error| backend_error("TicketList", error))?; - tickets.retain(|ticket| { - params.kind.as_ref().is_none_or(|kind| ticket.kind == *kind) - && params - .priority - .as_ref() - .is_none_or(|priority| ticket.priority == *priority) - && params - .label - .as_ref() - .is_none_or(|label| ticket.labels.iter().any(|item| item == label)) - }); let count = tickets.len(); let returned_tickets: Vec<_> = tickets .into_iter() @@ -580,7 +532,7 @@ impl Tool for TicketListTool { .map(ticket_summary_json) .collect(); let output = TicketListOutput { - status_filter: status_filter.to_string(), + state_filter: state_filter.to_string(), count, returned: returned_tickets.len(), truncated: count > returned_tickets.len(), @@ -588,7 +540,7 @@ impl Tool for TicketListTool { }; Ok(json_output( format!( - "Listed {} ticket(s) for status {status_filter}{}", + "Listed {} ticket(s) for state {state_filter}{}", output.returned, if output.truncated { " (truncated)" } else { "" } ), @@ -601,7 +553,7 @@ impl Tool for TicketListTool { impl Tool for TicketShowTool { async fn execute(&self, input_json: &str) -> Result { let params: TicketShowParams = parse_input("TicketShow", input_json)?; - let query = id_or_slug(params.id, params.slug, params.query)?; + let query = id_or_query(params.id, params.query)?; let event_limit = bounded(params.event_limit, DEFAULT_EVENT_LIMIT, MAX_EVENT_LIMIT); let artifact_limit = bounded( params.artifact_limit, @@ -618,10 +570,9 @@ impl Tool for TicketShowTool { .show(query) .map_err(|error| backend_error("TicketShow", error))?; let summary = format!( - "Ticket {} ({}) status {}", + "Ticket {} state {}", ticket.meta.id, - ticket.meta.slug, - status_as_str(&ticket.meta.status) + ticket.meta.workflow_state.as_str() ); Ok(json_output( summary, @@ -706,8 +657,8 @@ impl Tool for TicketIntakeReadyTool { ) .map_err(|error| backend_error("TicketIntakeReady", error))?; Ok(json_output( - format!("Marked ticket {} workflow_state ready", params.ticket), - json!({ "ticket": params.ticket, "workflow_state": "ready", "ok": true }), + format!("Marked ticket {} state ready", params.ticket), + json!({ "ticket": params.ticket, "state": "ready", "ok": true }), )) } } @@ -720,7 +671,7 @@ impl Tool for TicketWorkflowStateTool { let to = params.to.into_state(); if from == to { return Err(ToolError::InvalidArgument( - "workflow_state transition must change state".to_string(), + "state transition must change state".to_string(), )); } let mut change = @@ -731,7 +682,7 @@ impl Tool for TicketWorkflowStateTool { .map_err(|error| backend_error("TicketWorkflowState", error))?; Ok(json_output( format!( - "Transitioned ticket {} workflow_state {} -> {}", + "Transitioned ticket {} state {} -> {}", params.ticket, from.as_str(), to.as_str() @@ -740,31 +691,13 @@ impl Tool for TicketWorkflowStateTool { "ticket": params.ticket, "from": from.as_str(), "to": to.as_str(), - "workflow_state": to.as_str(), + "state": to.as_str(), "ok": true }), )) } } -#[async_trait] -impl Tool for TicketStatusTool { - async fn execute(&self, input_json: &str) -> Result { - let params: TicketStatusParams = parse_input("TicketStatus", input_json)?; - let status = match params.status { - TicketStatusParam::Open => TicketStatus::Open, - TicketStatusParam::Pending => TicketStatus::Pending, - }; - self.backend - .set_status(TicketIdOrSlug::Query(params.ticket.clone()), status) - .map_err(|error| backend_error("TicketStatus", error))?; - Ok(json_output( - format!("Moved ticket {} to {}", params.ticket, status.as_str()), - json!({ "ticket": params.ticket, "status": status.as_str(), "ok": true }), - )) - } -} - #[async_trait] impl Tool for TicketCloseTool { async fn execute(&self, input_json: &str) -> Result { @@ -777,7 +710,7 @@ impl Tool for TicketCloseTool { .map_err(|error| backend_error("TicketClose", error))?; Ok(json_output( format!("Closed ticket {}", params.ticket), - json!({ "ticket": params.ticket, "status": "closed", "ok": true }), + json!({ "ticket": params.ticket, "state": "closed", "ok": true }), )) } } @@ -886,21 +819,15 @@ fn bounded(value: Option, default: usize, max: usize) -> usize { value.unwrap_or(default).clamp(1, max) } -fn id_or_slug( - id: Option, - slug: Option, - query: Option, -) -> Result { - let provided = id.iter().chain(slug.iter()).chain(query.iter()).count(); +fn id_or_query(id: Option, query: Option) -> Result { + let provided = id.iter().chain(query.iter()).count(); if provided != 1 { return Err(ToolError::InvalidArgument( - "exactly one of id, slug, or query must be provided".to_string(), + "exactly one of id or query must be provided".to_string(), )); } if let Some(id) = id { Ok(TicketIdOrSlug::Id(id)) - } else if let Some(slug) = slug { - Ok(TicketIdOrSlug::Slug(slug)) } else { Ok(TicketIdOrSlug::Query( query.expect("provided count checked"), @@ -908,31 +835,13 @@ fn id_or_slug( } } -fn status_as_str(status: &ExtensibleTicketStatus) -> &str { - status.as_str() -} - -fn ticket_ref_output(ticket: TicketRef) -> TicketRefOutput { - TicketRefOutput { - id: ticket.id, - slug: ticket.slug, - status: ticket.status.as_str().to_string(), - } -} - fn ticket_summary_json(ticket: TicketSummary) -> Value { json!({ "id": ticket.id, - "slug": ticket.slug, "title": ticket.title, - "status": status_as_str(&ticket.status), - "kind": ticket.kind, - "priority": ticket.priority, - "labels": ticket.labels, + "state": ticket.workflow_state.as_str(), "readiness": ticket.readiness, "action_required": ticket.action_required, - "workflow_state": ticket.workflow_state.as_str(), - "workflow_state_explicit": ticket.workflow_state_explicit, "attention_required": ticket.attention_required, "queued_by": ticket.queued_by, "queued_at": ticket.queued_at, @@ -956,7 +865,7 @@ fn ticket_json( "kind": event.kind.as_str(), "author": event.author, "at": event.at, - "status": event.status, + "state": event.status, "from": event.from, "to": event.to, "reason": event.reason, @@ -977,20 +886,14 @@ fn ticket_json( json!({ "meta": { "id": ticket.meta.id, - "slug": ticket.meta.slug, "title": ticket.meta.title, - "status": status_as_str(&ticket.meta.status), - "kind": ticket.meta.kind, - "priority": ticket.meta.priority, - "labels": ticket.meta.labels, + "state": ticket.meta.workflow_state.as_str(), "created_at": ticket.meta.created_at, "updated_at": ticket.meta.updated_at, "assignee": ticket.meta.assignee, "readiness": ticket.meta.readiness, "risk_flags": ticket.meta.risk_flags, "action_required": ticket.meta.action_required, - "workflow_state": ticket.meta.workflow_state.as_str(), - "workflow_state_explicit": ticket.meta.workflow_state_explicit, "attention_required": ticket.meta.attention_required, "queued_by": ticket.meta.queued_by, "queued_at": ticket.meta.queued_at, @@ -1093,7 +996,6 @@ fn input_schema(name: &str) -> Value { "TicketWorkflowState" => { serde_json::to_value(schemars::schema_for!(TicketWorkflowStateParams)) } - "TicketStatus" => serde_json::to_value(schemars::schema_for!(TicketStatusParams)), "TicketClose" => serde_json::to_value(schemars::schema_for!(TicketCloseParams)), "TicketOrchestrationPlanRecord" => { serde_json::to_value(schemars::schema_for!(TicketOrchestrationPlanRecordParams)) @@ -1124,7 +1026,6 @@ impl_from_backend!(TicketCommentTool); impl_from_backend!(TicketReviewTool); impl_from_backend!(TicketIntakeReadyTool); impl_from_backend!(TicketWorkflowStateTool); -impl_from_backend!(TicketStatusTool); impl_from_backend!(TicketCloseTool); impl_from_backend!(TicketOrchestrationPlanRecordTool); impl_from_backend!(TicketOrchestrationPlanQueryTool); @@ -1148,7 +1049,6 @@ pub fn ticket_tools(backend: LocalTicketBackend) -> Vec { WORKFLOW_STATE_DESCRIPTION, backend.clone(), ), - tool_definition::("TicketStatus", STATUS_DESCRIPTION, backend.clone()), tool_definition::("TicketClose", CLOSE_DESCRIPTION, backend.clone()), tool_definition::( "TicketOrchestrationPlanRecord", @@ -1207,7 +1107,6 @@ mod tests { "TicketReview", "TicketIntakeReady", "TicketWorkflowState", - "TicketStatus", "TicketClose", "TicketOrchestrationPlanRecord" ] @@ -1227,12 +1126,12 @@ mod tests { } #[test] - fn workflow_state_tool_description_explains_queued_acceptance() { + fn state_tool_description_explains_queued_acceptance() { let temp = TempDir::new().unwrap(); let definition = ticket_tools(backend(&temp)) .into_iter() .find(|definition| definition().0.name == "TicketWorkflowState") - .expect("workflow state tool exists"); + .expect("state tool exists"); let (meta, _) = definition(); assert!(meta.description.contains("queued -> inprogress")); assert!(meta.description.contains("implementation side effects")); @@ -1251,8 +1150,6 @@ mod tests { .execute( &json!({ "title": "Tool Created", - "slug": "tool-created", - "labels": ["ticket", "tool"], "body": "## Background\n\nCreated by tool.\n" }) .to_string(), @@ -1267,7 +1164,7 @@ mod tests { assert!(!created_text.contains("needs_preflight")); let listed = list - .execute(&json!({ "status": "open", "label": "tool" }).to_string()) + .execute(&json!({ "state": "planning" }).to_string()) .await .unwrap(); assert!(listed.summary.contains("Listed 1 ticket")); @@ -1280,7 +1177,7 @@ mod tests { .execute(&json!({ "id": id, "event_limit": 10 }).to_string()) .await .unwrap(); - assert!(shown.summary.contains("tool-created")); + assert!(shown.summary.contains(&id)); let shown_content = shown.content.unwrap(); assert!(shown_content.contains("Created by tool")); assert!(!shown_content.contains("legacy_ticket")); @@ -1291,20 +1188,19 @@ mod tests { } #[tokio::test] - async fn ticket_tools_comment_review_status_and_close_are_doctor_clean() { + async fn ticket_tools_comment_review_state_and_close_are_doctor_clean() { let temp = TempDir::new().unwrap(); let backend = backend(&temp); let created = backend.create(NewTicket::new("Flow Tool")).unwrap(); let comment = tool_by_name(backend.clone(), "TicketComment"); let review = tool_by_name(backend.clone(), "TicketReview"); - let status = tool_by_name(backend.clone(), "TicketStatus"); let close = tool_by_name(backend.clone(), "TicketClose"); let doctor = tool_by_name(backend.clone(), "TicketDoctor"); comment .execute( &json!({ - "ticket": created.slug, + "ticket": created.id.clone(), "role": "implementation_report", "body": "Implemented." }) @@ -1315,7 +1211,7 @@ mod tests { review .execute( &json!({ - "ticket": created.id, + "ticket": created.id.clone(), "result": "approve", "body": "Looks good." }) @@ -1323,10 +1219,6 @@ mod tests { ) .await .unwrap(); - status - .execute(&json!({ "ticket": created.slug, "status": "pending" }).to_string()) - .await - .unwrap(); close .execute( &json!({ "ticket": created.id, "resolution": "Done via TicketClose.\n" }) @@ -1337,7 +1229,7 @@ mod tests { let report = doctor.execute(&json!({}).to_string()).await.unwrap(); assert!(report.summary.contains("0 error(s)")); - let closed = backend.show(TicketIdOrSlug::Query(created.slug)).unwrap(); + let closed = backend.show(TicketIdOrSlug::Id(created.id)).unwrap(); assert!(closed.resolution.is_some()); assert!( closed @@ -1355,7 +1247,7 @@ mod tests { closed .events .iter() - .any(|event| event.kind == TicketEventKind::StatusChanged) + .any(|event| event.kind == TicketEventKind::StateChanged) ); } @@ -1370,7 +1262,7 @@ mod tests { intake_ready .execute( &json!({ - "ticket": created.slug, + "ticket": created.id.clone(), "intake_summary": "Requirements accepted; implementation can be queued.", "author": "intake-pod" }) @@ -1384,7 +1276,7 @@ mod tests { workflow .execute( &json!({ - "ticket": created.slug, + "ticket": created.id.clone(), "from": "queued", "to": "inprogress", "reason": "orchestrator_started", @@ -1398,7 +1290,7 @@ mod tests { workflow .execute( &json!({ - "ticket": created.slug, + "ticket": created.id.clone(), "from": "inprogress", "to": "done", "reason": "implementation_complete", @@ -1410,9 +1302,8 @@ mod tests { .await .unwrap(); - let record = backend.show(TicketIdOrSlug::Query(created.slug)).unwrap(); + let record = backend.show(TicketIdOrSlug::Id(created.id)).unwrap(); assert_eq!(record.meta.workflow_state, TicketWorkflowState::Done); - assert_eq!(record.meta.status.as_local(), Some(TicketStatus::Open)); assert!( record .events @@ -1424,7 +1315,7 @@ mod tests { .iter() .filter(|event| { event.kind == TicketEventKind::StateChanged - && event.state_field.as_deref() == Some("workflow_state") + && event.state_field.as_deref() == Some("state") }) .map(|event| (event.from.as_deref(), event.to.as_deref())) .collect::>(); @@ -1462,7 +1353,7 @@ mod tests { ) .await .unwrap(); - let ready_record = backend.show(TicketIdOrSlug::Query(ready.slug)).unwrap(); + let ready_record = backend.show(TicketIdOrSlug::Id(ready.id)).unwrap(); assert_eq!( ready_record.meta.workflow_state, TicketWorkflowState::Planning @@ -1491,7 +1382,7 @@ mod tests { ) .await .unwrap(); - let queued_record = backend.show(TicketIdOrSlug::Query(queued.slug)).unwrap(); + let queued_record = backend.show(TicketIdOrSlug::Id(queued.id)).unwrap(); assert_eq!( queued_record.meta.workflow_state, TicketWorkflowState::Planning @@ -1505,7 +1396,7 @@ mod tests { } #[tokio::test] - async fn ticket_workflow_tool_rejects_stale_transition_without_status_move() { + async fn ticket_workflow_tool_rejects_stale_transition_without_state_move() { let temp = TempDir::new().unwrap(); let backend = backend(&temp); let created = backend @@ -1516,7 +1407,7 @@ mod tests { let error = workflow .execute( &json!({ - "ticket": created.id, + "ticket": created.id.clone(), "from": "queued", "to": "inprogress", "reason": "orchestrator_started", @@ -1527,17 +1418,12 @@ mod tests { .await .unwrap_err(); - assert!( - error - .to_string() - .contains("workflow_state changed concurrently") - ); - let record = backend.show(TicketIdOrSlug::Query(created.slug)).unwrap(); + assert!(error.to_string().contains("state changed concurrently")); + let record = backend.show(TicketIdOrSlug::Id(created.id)).unwrap(); assert_eq!(record.meta.workflow_state, TicketWorkflowState::Planning); - assert_eq!(record.meta.status.as_local(), Some(TicketStatus::Open)); assert!(!record.events.iter().any(|event| { event.kind == TicketEventKind::StateChanged - && event.state_field.as_deref() == Some("workflow_state") + && event.state_field.as_deref() == Some("state") })); } @@ -1614,7 +1500,7 @@ mod tests { let error = intake_ready .execute( &json!({ - "ticket": created.id, + "ticket": created.id.clone(), "intake_summary": "Should not rewrite ready ticket." }) .to_string(), @@ -1622,16 +1508,12 @@ mod tests { .await .unwrap_err(); - assert!( - error - .to_string() - .contains("workflow_state changed concurrently") - ); - let record = backend.show(TicketIdOrSlug::Query(created.slug)).unwrap(); + assert!(error.to_string().contains("state changed concurrently")); + let record = backend.show(TicketIdOrSlug::Id(created.id)).unwrap(); assert_eq!(record.meta.workflow_state, TicketWorkflowState::Ready); assert!(!record.events.iter().any(|event| { event.kind == TicketEventKind::StateChanged - && event.state_field.as_deref() == Some("workflow_state") + && event.state_field.as_deref() == Some("state") })); } @@ -1647,9 +1529,9 @@ mod tests { let recorded = record .execute( &json!({ - "ticket": first.slug, + "ticket": first.id.clone(), "kind": "blocked_by", - "related_ticket": second.slug, + "related_ticket": second.id.clone(), "note": "Wait for the second Ticket's API boundary decision.", "author": "orchestrator" }) @@ -1676,7 +1558,7 @@ mod tests { let found_json: Value = serde_json::from_str(&found.content.unwrap()).unwrap(); assert_eq!(found_json["count"], 1); assert_eq!(found_json["records"][0]["kind"], "blocked_by"); - assert_eq!(found_json["records"][0]["related_ticket"], second.slug); + assert_eq!(found_json["records"][0]["related_ticket"], second.id); let current = backend.show(TicketIdOrSlug::Id(first.id)).unwrap(); assert_eq!(current.meta.workflow_state, TicketWorkflowState::Planning); @@ -1687,22 +1569,26 @@ mod tests { let temp = TempDir::new().unwrap(); let show = tool_by_name(backend(&temp), "TicketShow"); let error = show - .execute(&json!({ "id": "a", "slug": "b" }).to_string()) + .execute(&json!({ "id": "a", "query": "b" }).to_string()) .await .unwrap_err(); assert!(matches!(error, ToolError::InvalidArgument(_))); } #[tokio::test] - async fn ticket_create_slug_path_traversal_is_sanitized_under_backend_root() { + async fn ticket_create_uses_opaque_id_under_backend_root() { let temp = TempDir::new().unwrap(); let backend = backend(&temp); let create = tool_by_name(backend.clone(), "TicketCreate"); - create - .execute(&json!({ "title": "Escape", "slug": "../escape" }).to_string()) + let output = create + .execute(&json!({ "title": "Escape" }).to_string()) .await .unwrap(); + let value: Value = serde_json::from_str(&output.content.unwrap()).unwrap(); + let id = value["id"].as_str().unwrap(); + assert!(!id.contains("escape")); assert!(!temp.path().join("escape").exists()); + assert!(temp.path().join("tickets").join(id).is_dir()); assert_eq!(backend.list(crate::TicketFilter::all()).unwrap().len(), 1); } diff --git a/crates/tui/src/multi_pod.rs b/crates/tui/src/multi_pod.rs index cc10012b..0875be66 100644 --- a/crates/tui/src/multi_pod.rs +++ b/crates/tui/src/multi_pod.rs @@ -22,10 +22,7 @@ use ratatui::text::{Line, Span}; use ratatui::widgets::{Paragraph, Widget}; use session_store::FsStore; use ticket::config::TicketConfig; -use ticket::{ - LocalTicketBackend, NewTicketEvent, TicketBackend, TicketEventKind, TicketIdOrSlug, - TicketStatus, TicketWorkflowState, -}; +use ticket::{LocalTicketBackend, TicketBackend, TicketIdOrSlug, TicketWorkflowState}; use tokio::net::UnixStream; use unicode_width::UnicodeWidthStr; @@ -984,19 +981,19 @@ impl MultiPodApp { self.notice = Some("Selected Ticket row has no inline action.".to_string()); return None; }; - let (ticket_id, ticket_slug) = { + let ticket_id = { let Some(ticket) = row.ticket.as_ref() else { self.notice = Some("No Ticket action is selected.".to_string()); return None; }; - (ticket.id.clone(), ticket.slug.clone()) + ticket.id.clone() }; let orchestrator = ticket_action_orchestrator_target(&self.panel, &self.list); self.sending = true; self.notice = Some(format!( "Dispatching {} for Ticket {}…", action.label(), - ticket_slug + ticket_id )); Some(TicketActionRequest { workspace_root: current_workspace_root(), @@ -1127,15 +1124,11 @@ impl MultiPodApp { return None; }; let ticket_id = ticket.id.clone(); - let ticket_slug = ticket.slug.clone(); let mut context = TicketRoleLaunchContext::new(current_workspace_root(), TicketRole::Intake); - context.ticket = Some(TicketRef { - id: Some(ticket_id.clone()), - slug: Some(ticket_slug.clone()), - }); + context.ticket = Some(TicketRef::id(ticket_id.clone())); context.user_instruction = Some(format!( - "Continue Intake for existing Ticket {ticket_id} ({ticket_slug}). Do not create a duplicate Ticket unless the user explicitly requests one." + "Continue Intake for existing Ticket {ticket_id}. Do not create a duplicate Ticket unless the user explicitly requests one. Read TicketShow body/thread/artifacts before making routing or requirements decisions." )); let store = match PanelRegistryStore::default_for_workspace(&context.workspace_root) { Ok(store) => store, @@ -1176,7 +1169,7 @@ impl MultiPodApp { self.sending = true; self.notice = Some(format!( "Launching Ticket Intake for {} as {}…", - ticket_slug, planned.pod_name + ticket_id, planned.pod_name )); Some(IntakeLaunchRequest { context, @@ -1185,7 +1178,7 @@ impl MultiPodApp { registry_update: IntakeRegistryUpdate::ClaimTicket { registry_root: store.root().to_path_buf(), ticket_id, - ticket_slug: Some(ticket_slug), + ticket_slug: None, pod_name, }, }) @@ -1991,8 +1984,7 @@ async fn dispatch_ticket_action( NextUserAction::Queue => { if current_ticket.workflow_state != TicketWorkflowState::Ready { return Err(TicketActionError::Stale( - "Queue is only valid while workflow_state is ready; reload and retry" - .to_string(), + "Queue is only valid while state is ready; reload and retry".to_string(), )); } backend @@ -2006,43 +1998,11 @@ async fn dispatch_ticket_action( Ok(TicketActionOutcome { notice: format!( "Queued Ticket {}; {}. Orchestrator routing is authorized; implementation side effects still require queued -> inprogress acceptance.", - current_ticket.slug, + current_ticket.id, notification.sentence() ), }) } - NextUserAction::Defer => { - append_panel_decision( - &backend, - &request.ticket_id, - panel_defer_body(current_ticket), - )?; - let mut moved = false; - if current_ticket - .status - .eq_ignore_ascii_case(TicketStatus::Open.as_str()) - { - backend - .set_status( - TicketIdOrSlug::Id(request.ticket_id.clone()), - TicketStatus::Pending, - ) - .map_err(|error| TicketActionError::Ticket(error.to_string()))?; - moved = true; - } - let notice = if moved { - format!( - "Recorded Panel Defer for Ticket {} and moved it to pending.", - current_ticket.slug - ) - } else { - format!( - "Recorded Panel Defer for Ticket {}; status was already {}.", - current_ticket.slug, current_ticket.status - ) - }; - Ok(TicketActionOutcome { notice }) - } NextUserAction::Close => unreachable!("Close action is handled before row dispatch"), NextUserAction::Clarify | NextUserAction::Edit @@ -2051,7 +2011,7 @@ async fn dispatch_ticket_action( notice: format!( "{} for Ticket {} has no safe inline workspace-panel dispatch; use the Ticket workflow.", request.action.label(), - current_ticket.slug + current_ticket.id ), }), } @@ -2075,41 +2035,40 @@ fn dispatch_panel_close( Ok(TicketActionOutcome { notice: format!( - "Closed Ticket {}; deterministic resolution recorded because workflow_state was already done.", - ticket.meta.slug + "Closed Ticket {}; deterministic resolution recorded because state was already done.", + ticket.meta.id ), }) } fn panel_close_blocker(ticket: &ticket::Ticket) -> Option { - let slug = ticket.meta.slug.as_str(); - if ticket.meta.status.as_local() != Some(TicketStatus::Open) { + let ticket_id = ticket.meta.id.as_str(); + if ticket.meta.workflow_state == TicketWorkflowState::Closed { return Some(format!( - "Close blocked for Ticket {slug}: local status is {}, expected open; no close was recorded.", - ticket.meta.status.as_str() + "Close blocked for Ticket {ticket_id}: state is already closed; no close was recorded." )); } if ticket.meta.workflow_state != TicketWorkflowState::Done { return Some(format!( - "Close blocked for Ticket {slug}: workflow_state is {}, expected done; no close was recorded.", + "Close blocked for Ticket {ticket_id}: state is {}, expected done; no close was recorded.", ticket.meta.workflow_state.as_str() )); } if let Some(reason) = non_empty_ticket_field(ticket.meta.attention_required.as_deref()) { return Some(format!( - "Close blocked for Ticket {slug}: attention_required is set ({}); no close was recorded.", + "Close blocked for Ticket {ticket_id}: attention_required is set ({}); no close was recorded.", bounded_panel_diagnostic(reason) )); } if let Some(reason) = non_empty_ticket_field(ticket.meta.action_required.as_deref()) { return Some(format!( - "Close blocked for Ticket {slug}: action_required is set ({}); no close was recorded.", + "Close blocked for Ticket {ticket_id}: action_required is set ({}); no close was recorded.", bounded_panel_diagnostic(reason) )); } if ticket.resolution.is_some() { return Some(format!( - "Close blocked for Ticket {slug}: resolution.md already exists; no close was recorded." + "Close blocked for Ticket {ticket_id}: resolution.md already exists; no close was recorded." )); } None @@ -2125,13 +2084,13 @@ fn panel_close_resolution( ) -> ticket::MarkdownText { if is_japanese_ticket_record_language(record_language) { ticket::MarkdownText::new(format!( - "Ticket `{}` (`{}`) はすでに `workflow_state: done` に到達していたため、workspace Panel から close しました。\n\nこの Close action によって、実装作業、workflow-state 変更、Orchestrator/Companion launch、worker invocation は開始されていません。\n", - ticket.meta.slug, ticket.meta.id + "Ticket `{}` (`{}`) はすでに `state: done` に到達していたため、workspace Panel から close しました。\n\nこの Close action によって、実装作業、state 変更、Orchestrator/Companion launch、worker invocation は開始されていません。\n", + ticket.meta.id, ticket.meta.title )) } else { ticket::MarkdownText::new(format!( - "Closed from the workspace Panel because Ticket `{}` (`{}`) had already reached `workflow_state: done`.\n\nNo implementation work, workflow-state change, Orchestrator/Companion launch, or worker invocation was started by this Close action.\n", - ticket.meta.slug, ticket.meta.id + "Closed from the workspace Panel because Ticket `{}` (`{}`) had already reached `state: done`.\n\nNo implementation work, state change, Orchestrator/Companion launch, or worker invocation was started by this Close action.\n", + ticket.meta.id, ticket.meta.title )) } } @@ -2147,32 +2106,12 @@ fn is_japanese_ticket_record_language(language: Option<&str>) -> bool { || language.contains("日本語") } -fn append_panel_decision( - backend: &LocalTicketBackend, - ticket_id: &str, - body: String, -) -> Result<(), TicketActionError> { - let mut event = NewTicketEvent::new(TicketEventKind::Decision, body); - event.author = Some("workspace-panel".to_string()); - backend - .add_event(TicketIdOrSlug::Id(ticket_id.to_owned()), event) - .map_err(|error| TicketActionError::Ticket(error.to_string())) -} - -fn panel_defer_body(ticket: &crate::workspace_panel::TicketPanelEntry) -> String { - format!( - "Panel Defer recorded by a human for Ticket `{}` (`{}`). Keep this Ticket out of immediate Orchestrator routing until a later explicit Queue; no scheduler or implementation Pod was started.", - ticket.slug, ticket.id - ) -} - fn orchestrator_queue_notification_message( ticket: &crate::workspace_panel::TicketPanelEntry, ) -> String { let title = ticket.title.replace(['\r', '\n'], " "); format!( - "Workspace panel Queue for Ticket `{}` (`{}`), title `{}`: human authorized Orchestrator routing; this is not an unattended scheduler. Read the Ticket and inspect current workspace state. If unblocked, record routing and transition workflow_state queued -> inprogress before any worktree/SpawnPod implementation side effects. After inprogress acceptance, use worktree-workflow for `.worktree/` creation with tracked `.yoi` project records visible and `.yoi/memory` plus local/runtime/log/lock/secret-like `.yoi` paths excluded, then use multi-agent-workflow to run sibling coder/reviewer Pods (coder narrow child-worktree write scope, reviewer read-only by default) and stop at a merge-ready dossier without merge/close/final approval. If blocked, record a concise reason and leave the Ticket queued or explicitly defer it.", - ticket.slug, + "Workspace panel Queue for Ticket `{}`, title `{}`: human authorized Orchestrator routing; this is not an unattended scheduler. Read the Ticket and inspect current workspace state. If unblocked, record routing and transition state queued -> inprogress before any worktree/SpawnPod implementation side effects. After inprogress acceptance, use worktree-workflow for `.worktree/` creation with tracked `.yoi` project records visible and `.yoi/memory` plus local/runtime/log/lock/secret-like `.yoi` paths excluded, then use multi-agent-workflow to run sibling coder/reviewer Pods (coder narrow child-worktree write scope, reviewer read-only by default) and stop at a merge-ready dossier without merge/close/final approval. If blocked, record a concise reason and leave the Ticket queued or return it to planning with the missing-information reason.", ticket.id, title.trim() ) @@ -2737,13 +2676,7 @@ fn panel_row_line(row: &PanelRow, selected: bool, width: u16) -> Line<'static> { fn panel_ticket_reference(row: &PanelRow) -> String { row.ticket .as_ref() - .map(|ticket| { - if ticket.slug.is_empty() { - ticket.id.clone() - } else { - ticket.slug.clone() - } - }) + .map(|ticket| ticket.id.clone()) .unwrap_or_else(|| match &row.key { PanelRowKey::Ticket(id) => id.clone(), PanelRowKey::Pod(name) => name.clone(), @@ -2790,7 +2723,6 @@ fn panel_priority_style(priority: ActionPriority) -> Style { match priority { ActionPriority::UserReply => Style::default().fg(Color::Red).add_modifier(Modifier::BOLD), ActionPriority::ReadyForQueue => Style::default().fg(Color::Green), - ActionPriority::Blocked => Style::default().fg(Color::Red), ActionPriority::ActiveWork => Style::default().fg(Color::Cyan), ActionPriority::Background => Style::default().fg(Color::DarkGray), } @@ -3022,13 +2954,13 @@ mod tests { use std::fs; use tempfile::TempDir; use ticket::{ - LocalTicketBackend, MarkdownText, NewTicket, TicketBackend, TicketEventKind, - TicketWorkflowState, + LocalTicketBackend, MarkdownText, NewTicket, NewTicketEvent, TicketBackend, + TicketEventKind, TicketWorkflowState, }; fn ticket_workspace( - slug: &str, - workflow_state: TicketWorkflowState, + title: &str, + state: TicketWorkflowState, configure: impl FnOnce(&mut NewTicket), ) -> (TempDir, String, LocalTicketBackend) { let temp = TempDir::new().unwrap(); @@ -3039,34 +2971,20 @@ mod tests { ) .unwrap(); let backend = LocalTicketBackend::new(temp.path().join(".yoi/tickets")); - let mut input = NewTicket { - slug: Some(slug.to_string()), - title: "Ready panel ticket".to_string(), - body: MarkdownText::from("Ready for panel action"), - kind: "task".to_string(), - priority: "P2".to_string(), - author: None, - assignee: None, - labels: Vec::new(), - readiness: None, - action_required: None, - workflow_state: Some(workflow_state), - attention_required: None, - queued_by: None, - queued_at: None, - risk_flags: Vec::new(), - }; + let mut input = NewTicket::new(title); + input.body = MarkdownText::from("Ready for panel action"); + input.workflow_state = Some(state); configure(&mut input); let ticket = backend.create(input).unwrap(); (temp, ticket.id, backend) } - fn ready_ticket_workspace(slug: &str) -> (TempDir, String, LocalTicketBackend) { - ticket_workspace(slug, TicketWorkflowState::Ready, |_| {}) + fn ready_ticket_workspace(title: &str) -> (TempDir, String, LocalTicketBackend) { + ticket_workspace(title, TicketWorkflowState::Ready, |_| {}) } - fn done_ticket_workspace(slug: &str) -> (TempDir, String, LocalTicketBackend) { - ticket_workspace(slug, TicketWorkflowState::Done, |_| {}) + fn done_ticket_workspace(title: &str) -> (TempDir, String, LocalTicketBackend) { + ticket_workspace(title, TicketWorkflowState::Done, |_| {}) } fn request_for( @@ -3100,7 +3018,6 @@ mod tests { assert!(outcome.notice.contains("queued -> inprogress acceptance")); assert!(!outcome.notice.contains("No implementation was started")); let ticket = backend.show(TicketIdOrSlug::Id(ticket_id)).unwrap(); - assert_eq!(ticket.meta.status.as_local(), Some(TicketStatus::Open)); assert_eq!(ticket.meta.workflow_state, TicketWorkflowState::Queued); assert_eq!(ticket.meta.queued_by.as_deref(), Some("workspace-panel")); assert!(ticket.meta.queued_at.is_some()); @@ -3109,7 +3026,7 @@ mod tests { .iter() .find(|event| { event.kind == TicketEventKind::StateChanged - && event.state_field.as_deref() == Some("workflow_state") + && event.state_field.as_deref() == Some("state") && event.from.as_deref() == Some("ready") && event.to.as_deref() == Some("queued") }) @@ -3126,9 +3043,8 @@ mod tests { .await .unwrap_err(); - assert!(error.to_string().contains("workflow_state is ready")); + assert!(error.to_string().contains("state is ready")); let ticket = backend.show(TicketIdOrSlug::Id(ticket_id)).unwrap(); - assert_eq!(ticket.meta.status.as_local(), Some(TicketStatus::Open)); assert_eq!(ticket.meta.workflow_state, TicketWorkflowState::Ready); assert!(ticket.resolution.is_none()); } @@ -3149,28 +3065,7 @@ mod tests { assert!(ticket.meta.queued_by.is_none()); assert!(!ticket.events.iter().any(|event| { event.kind == TicketEventKind::StateChanged - && event.state_field.as_deref() == Some("workflow_state") - })); - } - - #[tokio::test] - async fn ticket_defer_action_records_decision_for_pending_ticket() { - let (temp, ticket_id, backend) = ready_ticket_workspace("panel-defer"); - backend - .set_status(TicketIdOrSlug::Id(ticket_id.clone()), TicketStatus::Pending) - .unwrap(); - - let outcome = - dispatch_ticket_action(request_for(&temp, ticket_id.clone(), NextUserAction::Defer)) - .await - .unwrap(); - - assert!(outcome.notice.contains("Recorded Panel Defer")); - let ticket = backend.show(TicketIdOrSlug::Id(ticket_id)).unwrap(); - assert_eq!(ticket.meta.status.as_local(), Some(TicketStatus::Pending)); - assert!(ticket.events.iter().any(|event| { - event.kind == TicketEventKind::Decision - && event.body.as_str().contains("Panel Defer recorded") + && event.state_field.as_deref() == Some("state") })); } @@ -3183,19 +3078,18 @@ mod tests { .await .unwrap(); - assert!(outcome.notice.contains("Closed Ticket panel-close")); - assert!(outcome.notice.contains("workflow_state was already done")); + assert!(outcome.notice.contains("Closed Ticket")); + assert!(outcome.notice.contains("state was already done")); let ticket = backend.show(TicketIdOrSlug::Id(ticket_id)).unwrap(); - assert_eq!(ticket.meta.status.as_local(), Some(TicketStatus::Closed)); - assert_eq!(ticket.meta.workflow_state, TicketWorkflowState::Done); + assert_eq!(ticket.meta.workflow_state, TicketWorkflowState::Closed); let resolution = ticket .resolution .as_ref() .expect("Panel Close records resolution.md") .as_str(); - assert!(resolution.contains("workflow_state: done")); + assert!(resolution.contains("state: done")); assert!(resolution.contains("No implementation work")); - assert!(resolution.contains("workflow-state change")); + assert!(resolution.contains("state change")); assert!(resolution.contains("worker invocation")); assert!(ticket.events.iter().any(|event| { event.kind == TicketEventKind::Close && event.body.as_str().contains("workspace Panel") @@ -3220,7 +3114,6 @@ mod tests { assert!(error.to_string().contains("action_required is set")); assert!(error.to_string().contains("no close was recorded")); let ticket = backend.show(TicketIdOrSlug::Id(ticket_id)).unwrap(); - assert_eq!(ticket.meta.status.as_local(), Some(TicketStatus::Open)); assert_eq!(ticket.meta.workflow_state, TicketWorkflowState::Done); assert!(ticket.resolution.is_none()); } @@ -3242,7 +3135,6 @@ mod tests { assert!(error.to_string().contains("attention_required is set")); let ticket = backend.show(TicketIdOrSlug::Id(ticket_id)).unwrap(); - assert_eq!(ticket.meta.status.as_local(), Some(TicketStatus::Open)); assert!(ticket.resolution.is_none()); } @@ -3251,7 +3143,7 @@ mod tests { let (temp, ticket_id, backend) = done_ticket_workspace("panel-close-resolution"); fs::write( temp.path() - .join(".yoi/tickets/open") + .join(".yoi/tickets") .join(&ticket_id) .join("resolution.md"), "Already resolved\n", @@ -3265,7 +3157,6 @@ mod tests { assert!(error.to_string().contains("resolution.md already exists")); let ticket = backend.show(TicketIdOrSlug::Id(ticket_id)).unwrap(); - assert_eq!(ticket.meta.status.as_local(), Some(TicketStatus::Open)); assert_eq!( ticket.resolution.as_ref().unwrap().as_str(), "Already resolved\n" @@ -3316,7 +3207,7 @@ mod tests { assert!(message.contains("not an unattended scheduler")); assert!(message.contains("Read the Ticket")); assert!(message.contains("inspect current workspace state")); - assert!(message.contains("transition workflow_state queued -> inprogress")); + assert!(message.contains("transition state queued -> inprogress")); assert!(message.contains("before any worktree/SpawnPod implementation side effects")); assert!(message.contains("After inprogress acceptance")); assert!(message.contains("worktree-workflow")); @@ -3399,9 +3290,7 @@ mod tests { .unwrap(); let backend = LocalTicketBackend::new(temp.path().join(".yoi/tickets")); let mut ticket = NewTicket::new("Needs Human Reply"); - ticket.slug = Some("needs-human-reply".to_string()); ticket.action_required = Some("answer intake question".to_string()); - ticket.labels = vec!["intake".to_string()]; backend.create(ticket).unwrap(); let list = PodList::from_sources( PodVisibilitySource::ResumePicker, @@ -3421,7 +3310,7 @@ mod tests { .collect::>(); let ticket_line = lines .iter() - .position(|line| line.contains("needs-human-reply")) + .position(|line| line.contains("Needs Human Reply")) .unwrap(); let pod_line = lines.iter().position(|line| line.contains("idle")).unwrap(); assert!(ticket_line < pod_line); @@ -3756,7 +3645,7 @@ mod tests { "inprogress", ); let ready_row = panel_test_ticket_row( - "ticket-slug", + "ticket-id", "Long Ticket title that should be rendered after short columns", ActionPriority::ReadyForQueue, NextUserAction::Queue, @@ -3776,7 +3665,7 @@ mod tests { display_column(&review_line, "workspace-panel-composer-targets"), id_start ); - assert_eq!(display_column(&ready_line, "ticket-slug"), id_start); + assert_eq!(display_column(&ready_line, "ticket-id"), id_start); assert_eq!( display_column(&review_line, "Workspace panel composer targets"), title_start @@ -3790,7 +3679,7 @@ mod tests { #[test] fn panel_ticket_title_truncates_after_stable_columns() { let row = panel_test_ticket_row( - "ticket-slug", + "ticket-id", "Very long Ticket title that should truncate only after the aligned short columns", ActionPriority::ReadyForQueue, NextUserAction::Queue, @@ -3802,7 +3691,7 @@ mod tests { assert_eq!(line.width(), 112); assert_eq!( - display_column(&line, "ticket-slug"), + display_column(&line, "ticket-id"), title_start - TICKET_ID_COLUMN_WIDTH - 1 ); assert_eq!(display_column(&line, "Very long Ticket"), title_start); @@ -4663,21 +4552,17 @@ mod tests { } fn panel_test_ticket_row( - slug: &str, + id_suffix: &str, title: &str, priority: ActionPriority, next_action: NextUserAction, - status: &str, + state: &str, ) -> PanelRow { let ticket = crate::workspace_panel::TicketPanelEntry { - id: format!("20260606-000000-{slug}"), - slug: slug.to_string(), + id: format!("20260606-000000-{id_suffix}"), title: title.to_string(), - status: "open".to_string(), - kind: "task".to_string(), priority: "P2".to_string(), - labels: Vec::new(), - workflow_state: TicketWorkflowState::parse(status) + workflow_state: TicketWorkflowState::parse(state) .unwrap_or(TicketWorkflowState::Planning), workflow_state_explicit: true, attention_required: None, @@ -4693,8 +4578,8 @@ mod tests { key: PanelRowKey::Ticket(ticket.id.clone()), kind: crate::workspace_panel::PanelRowKind::Ticket, title: title.to_string(), - subtitle: Some("slug · priority · latest event".to_string()), - status: status.to_string(), + subtitle: Some("id · priority · latest event".to_string()), + status: state.to_string(), priority, next_action: Some(next_action), ticket: Some(ticket), diff --git a/crates/tui/src/workspace_panel.rs b/crates/tui/src/workspace_panel.rs index de903998..88adb445 100644 --- a/crates/tui/src/workspace_panel.rs +++ b/crates/tui/src/workspace_panel.rs @@ -3,8 +3,8 @@ use std::path::{Path, PathBuf}; use protocol::PodStatus; use ticket::config::{TICKET_CONFIG_RELATIVE_PATH, TicketConfig}; use ticket::{ - ExtensibleTicketStatus, LocalTicketBackend, TicketBackend, TicketError, TicketEvent, - TicketFilter, TicketIdOrSlug, TicketMeta, TicketStatus, TicketSummary, TicketWorkflowState, + LocalTicketBackend, TicketBackend, TicketError, TicketEvent, TicketFilter, TicketIdOrSlug, + TicketMeta, TicketSummary, TicketWorkflowState, }; use crate::pod_list::{PodList, PodListEntry, StoredMetadataState}; @@ -199,7 +199,6 @@ pub(crate) enum PanelRowKind { pub(crate) enum ActionPriority { UserReply, ReadyForQueue, - Blocked, ActiveWork, Background, } @@ -209,7 +208,6 @@ pub(crate) enum NextUserAction { Clarify, Queue, Close, - Defer, Edit, Wait, OpenPod, @@ -221,7 +219,6 @@ impl NextUserAction { Self::Clarify => "Clarify", Self::Queue => "Queue", Self::Close => "Close", - Self::Defer => "Defer", Self::Edit => "Edit", Self::Wait => "Wait", Self::OpenPod => "Open", @@ -232,12 +229,8 @@ impl NextUserAction { #[derive(Debug, Clone, PartialEq, Eq)] pub(crate) struct TicketPanelEntry { pub(crate) id: String, - pub(crate) slug: String, pub(crate) title: String, - pub(crate) status: String, - pub(crate) kind: String, pub(crate) priority: String, - pub(crate) labels: Vec, pub(crate) workflow_state: TicketWorkflowState, pub(crate) workflow_state_explicit: bool, pub(crate) attention_required: Option, @@ -601,7 +594,7 @@ pub(crate) fn build_current_ticket_row( pods: &PodList, ) -> ticket::Result { let ticket = backend.show(TicketIdOrSlug::Id(ticket_id.to_owned()))?; - if ticket.meta.status.as_local() == Some(TicketStatus::Closed) { + if ticket.meta.workflow_state == TicketWorkflowState::Closed { return Err(TicketError::Conflict(format!( "Ticket {ticket_id} is already closed" ))); @@ -638,10 +631,10 @@ fn build_ticket_rows( ) -> ticket::Result> { let mut rows = Vec::new(); for summary in backend.list(TicketFilter::all())? { - if summary.status.as_local() == Some(TicketStatus::Closed) { + if summary.workflow_state == TicketWorkflowState::Closed { continue; } - let ticket = backend.show(TicketIdOrSlug::Query(summary.slug.clone()))?; + let ticket = backend.show(TicketIdOrSlug::Query(summary.id.clone()))?; rows.push(ticket_row(summary, &ticket.events, pods, registry)); } Ok(rows) @@ -659,12 +652,8 @@ fn ticket_row( let latest_event = events.last(); let entry = TicketPanelEntry { id: summary.id.clone(), - slug: summary.slug.clone(), title: summary.title.clone(), - status: summary.status.as_str().to_string(), - kind: summary.kind.clone(), priority: summary.priority.clone(), - labels: summary.labels.clone(), workflow_state: summary.workflow_state, workflow_state_explicit: summary.workflow_state_explicit, attention_required: summary.attention_required.clone(), @@ -703,20 +692,6 @@ struct DerivedTicketState { } fn derive_ticket_state(summary: &TicketSummary) -> DerivedTicketState { - if summary.status.as_local() == Some(TicketStatus::Pending) { - return DerivedTicketState { - kind: PanelRowKind::Blocked, - priority: ActionPriority::Blocked, - action: Some(NextUserAction::Defer), - disabled_reason: Some( - "Pending Ticket is deferred; queueing is disabled until it is reopened and readied." - .to_string(), - ), - key_hint: Some("Open/defer operation lives in Ticket controls".to_string()), - blocked_reason: None, - }; - } - if let Some(reason) = summary .attention_required .as_deref() @@ -769,7 +744,7 @@ fn derive_ticket_state(summary: &TicketSummary) -> DerivedTicketState { priority: ActionPriority::Background, action: Some(NextUserAction::Close), disabled_reason: Some( - "workflow_state is done; close if a resolution is still missing.".to_string(), + "state is done; close if a resolution is still missing.".to_string(), ), key_hint: None, blocked_reason: None, @@ -781,7 +756,15 @@ fn derive_ticket_state(summary: &TicketSummary) -> DerivedTicketState { disabled_reason: Some( "Ticket is still in planning; mark it ready before queueing.".to_string(), ), - key_hint: Some("Planning/Intake helpers can set workflow_state = ready".to_string()), + key_hint: Some("Planning/Intake helpers can set state = ready".to_string()), + blocked_reason: None, + }, + TicketWorkflowState::Closed => DerivedTicketState { + kind: PanelRowKind::Review, + priority: ActionPriority::Background, + action: Some(NextUserAction::Wait), + disabled_reason: Some("Ticket is closed.".to_string()), + key_hint: None, blocked_reason: None, }, } @@ -792,7 +775,6 @@ fn related_pods_for_ticket( pods: &PodList, registry: &PanelRegistrySnapshot, ) -> Vec { - let slug = lowercase(&summary.slug); let id = lowercase(&summary.id); let mut names = Vec::new(); if let Some(claim) = registry.claim_for_ticket(&summary.id) { @@ -800,7 +782,7 @@ fn related_pods_for_ticket( } for pod in pods.entries.iter().filter_map(|pod| { let name = lowercase(&pod.name); - if (!slug.is_empty() && name.contains(&slug)) || (!id.is_empty() && name.contains(&id)) { + if !id.is_empty() && name.contains(&id) { Some(pod.name.clone()) } else { None @@ -844,11 +826,7 @@ pub(crate) fn local_claim_status_for_pod(pod_name: &str, pods: &PodList) -> Tick } fn ticket_subtitle(entry: &TicketPanelEntry) -> Option { - let mut parts = vec![format!( - "{} · {}", - entry.slug, - entry.workflow_state.as_str() - )]; + let mut parts = vec![format!("{} · {}", entry.id, entry.workflow_state.as_str())]; if let Some(reason) = entry.attention_required.as_deref() { parts.push(format!("attention: {reason}")); } @@ -960,10 +938,6 @@ fn lowercase(value: &str) -> String { } #[allow(dead_code)] -fn _status_label(status: &ExtensibleTicketStatus) -> &str { - status.as_str() -} - #[cfg(test)] mod tests { use super::*; @@ -986,11 +960,9 @@ mod tests { fn create_ticket( backend: &LocalTicketBackend, title: &str, - slug: &str, configure: impl FnOnce(&mut NewTicket), ) { let mut input = NewTicket::new(title); - input.slug = Some(slug.to_string()); configure(&mut input); backend.create(input).unwrap(); } @@ -1029,14 +1001,9 @@ mod tests { fn workspace_panel_without_ticket_config_is_pod_only() { let temp = TempDir::new().unwrap(); let backend = LocalTicketBackend::new(temp.path().join(".yoi/tickets")); - create_ticket( - &backend, - "Hidden Without Config", - "hidden-without-config", - |input| { - input.action_required = Some("answer me".to_string()); - }, - ); + create_ticket(&backend, "Hidden Without Config", |input| { + input.action_required = Some("answer me".to_string()); + }); let model = build_workspace_panel(temp.path(), &live_pods(&["idle"])); @@ -1055,10 +1022,10 @@ mod tests { let temp = TempDir::new().unwrap(); write_ticket_config(temp.path()); let backend = LocalTicketBackend::new(temp.path().join(".yoi/tickets")); - create_ticket(&backend, "Ready Ticket", "ready-ticket", |input| { + create_ticket(&backend, "Ready Ticket", |input| { input.workflow_state = Some(TicketWorkflowState::Ready); }); - create_ticket(&backend, "Needs User", "needs-user", |input| { + create_ticket(&backend, "Needs User", |input| { input.workflow_state = Some(TicketWorkflowState::Ready); input.attention_required = Some("answer clarification".to_string()); }); @@ -1092,22 +1059,15 @@ mod tests { } #[test] - fn workspace_panel_does_not_infer_workflow_state_from_labels_readiness_or_thread() { + fn workspace_panel_does_not_infer_workflow_state_from_readiness_or_title() { let temp = TempDir::new().unwrap(); write_ticket_config(temp.path()); let backend = LocalTicketBackend::new(temp.path().join(".yoi/tickets")); - create_ticket( - &backend, - "Readiness Heuristic", - "readiness-heuristic", - |input| { - input.readiness = Some("implementation-ready".to_string()); - }, - ); - create_ticket(&backend, "Label Heuristic", "label-heuristic", |input| { - input.labels = vec!["spike".to_string(), "intake".to_string()]; + create_ticket(&backend, "Readiness Heuristic", |input| { + input.readiness = Some("implementation-ready".to_string()); }); - create_ticket(&backend, "Queued Explicit", "queued-explicit", |input| { + create_ticket(&backend, "Queued Words Are Not State", |_| {}); + create_ticket(&backend, "Queued Explicit", |input| { input.workflow_state = Some(TicketWorkflowState::Queued); }); @@ -1117,10 +1077,10 @@ mod tests { .iter() .find(|row| row.title == "Readiness Heuristic") .unwrap(); - let label = model + let title = model .rows .iter() - .find(|row| row.title == "Label Heuristic") + .find(|row| row.title == "Queued Words Are Not State") .unwrap(); let queued = model .rows @@ -1128,11 +1088,20 @@ mod tests { .find(|row| row.title == "Queued Explicit") .unwrap(); - assert_eq!(readiness.status, "planning"); + assert_eq!( + readiness.ticket.as_ref().unwrap().workflow_state, + TicketWorkflowState::Planning + ); assert_eq!(readiness.next_action, Some(NextUserAction::Clarify)); - assert_eq!(label.status, "planning"); - assert_eq!(label.next_action, Some(NextUserAction::Clarify)); - assert_eq!(queued.status, "queued"); + assert_eq!( + title.ticket.as_ref().unwrap().workflow_state, + TicketWorkflowState::Planning + ); + assert_eq!(title.next_action, Some(NextUserAction::Clarify)); + assert_eq!( + queued.ticket.as_ref().unwrap().workflow_state, + TicketWorkflowState::Queued + ); assert_eq!(queued.next_action, Some(NextUserAction::Wait)); } @@ -1144,22 +1113,21 @@ mod tests { let ticket_ref = backend .create({ let mut input = NewTicket::new("Null Attention Planning"); - input.slug = Some("null-attention-intake".to_string()); input.workflow_state = Some(TicketWorkflowState::Planning); input }) .unwrap(); let item_path = temp .path() - .join(".yoi/tickets/open") + .join(".yoi/tickets") .join(&ticket_ref.id) .join("item.md"); let item = fs::read_to_string(&item_path).unwrap(); fs::write( &item_path, item.replace( - "workflow_state: planning\ncreated_at:", - "workflow_state: planning\nattention_required: null\ncreated_at:", + "state: planning\ncreated_at:", + "state: planning\nattention_required: null\ncreated_at:", ), ) .unwrap(); @@ -1181,8 +1149,8 @@ mod tests { let temp = TempDir::new().unwrap(); write_ticket_config(temp.path()); let backend = LocalTicketBackend::new(temp.path().join(".yoi/tickets")); - create_ticket(&backend, "Plain Backlog", "plain-backlog", |_| {}); - create_ticket(&backend, "Done Explicit", "done-explicit", |input| { + create_ticket(&backend, "Plain Backlog", |_| {}); + create_ticket(&backend, "Done Explicit", |input| { input.workflow_state = Some(TicketWorkflowState::Done); }); @@ -1210,7 +1178,7 @@ mod tests { let temp = TempDir::new().unwrap(); write_ticket_config(temp.path()); let backend = LocalTicketBackend::new(temp.path().join(".yoi/tickets")); - create_ticket(&backend, "Claimed Planning", "claimed-intake", |_| {}); + create_ticket(&backend, "Claimed Planning", |_| {}); let summary = backend.list(TicketFilter::all()).unwrap().remove(0); let store = PanelRegistryStore::from_root(temp.path().join("local-registry")); store diff --git a/crates/yoi/src/ticket_cli.rs b/crates/yoi/src/ticket_cli.rs index 84eb2cc2..1e4b404f 100644 --- a/crates/yoi/src/ticket_cli.rs +++ b/crates/yoi/src/ticket_cli.rs @@ -9,8 +9,8 @@ use ticket::config::{ }; use ticket::{ LocalTicketBackend, MarkdownText, NewTicket, NewTicketEvent, TicketBackend, - TicketDoctorSeverity, TicketEventKind, TicketFilter, TicketIdOrSlug, TicketReview, - TicketReviewResult, TicketStatus, + TicketDoctorSeverity, TicketEventKind, TicketFilter, TicketIdOrSlug, TicketIntakeSummary, + TicketReview, TicketReviewResult, TicketWorkflowState, }; #[derive(Debug, Clone, PartialEq, Eq)] @@ -27,7 +27,7 @@ pub enum TicketCommand { Show { query: String }, Comment(CommentOptions), Review(ReviewOptions), - Status(StatusOptions), + State(StateOptions), Close(CloseOptions), Doctor, } @@ -35,23 +35,22 @@ pub enum TicketCommand { #[derive(Debug, Clone, PartialEq, Eq)] pub struct CreateOptions { pub title: String, - pub slug: Option, - pub kind: String, - pub priority: String, - pub labels: Vec, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum ListStatus { - Open, - Pending, +pub enum ListState { + Planning, + Ready, + Queued, + InProgress, + Done, Closed, All, } #[derive(Debug, Clone, PartialEq, Eq)] pub struct ListOptions { - pub status: ListStatus, + pub state: ListState, } #[derive(Debug, Clone, PartialEq, Eq)] @@ -69,16 +68,19 @@ pub struct ReviewOptions { } #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum StatusTarget { - Open, - Pending, +pub enum StateTarget { + Planning, + Ready, + Queued, + InProgress, + Done, Closed, } #[derive(Debug, Clone, PartialEq, Eq)] -pub struct StatusOptions { +pub struct StateOptions { pub query: String, - pub status: StatusTarget, + pub state: StateTarget, } #[derive(Debug, Clone, PartialEq, Eq)] @@ -159,7 +161,7 @@ pub fn parse_ticket_args(args: &[String]) -> Result { }, "comment" => TicketCommand::Comment(parse_comment(&args[1..])?), "review" => TicketCommand::Review(parse_review(&args[1..])?), - "status" => TicketCommand::Status(parse_status(&args[1..])?), + "state" => TicketCommand::State(parse_state(&args[1..])?), "close" => TicketCommand::Close(parse_close(&args[1..])?), "doctor" => { if args.len() != 1 { @@ -212,7 +214,7 @@ fn run_command( TicketCommand::Show { query } => show(&backend, query), TicketCommand::Comment(options) => comment(&backend, options), TicketCommand::Review(options) => review(&backend, options), - TicketCommand::Status(options) => status(&backend, options), + TicketCommand::State(options) => state(&backend, options), TicketCommand::Close(options) => close(&backend, options), TicketCommand::Doctor => doctor(&backend), TicketCommand::Init => unreachable!("init handled before backend setup"), @@ -268,42 +270,33 @@ fn create( options: CreateOptions, ) -> Result { let mut input = NewTicket::new(options.title); - input.slug = options.slug; - input.kind = options.kind; - input.priority = options.priority; - input.labels = options.labels; input.author = Some("yoi ticket".to_string()); let created = backend.create(input)?; - Ok(success(format!( - "created\t{}\t{}\t{}\n", - created.id, - created.slug, - created.status.as_str() - ))) + Ok(success(format!("created\t{}\n", created.id))) } fn list( backend: &LocalTicketBackend, options: ListOptions, ) -> Result { - let filter = match options.status { - ListStatus::Open => TicketFilter::status(TicketStatus::Open), - ListStatus::Pending => TicketFilter::status(TicketStatus::Pending), - ListStatus::Closed => TicketFilter::status(TicketStatus::Closed), - ListStatus::All => TicketFilter::all(), + let filter = match options.state { + ListState::Planning => TicketFilter::state(TicketWorkflowState::Planning), + ListState::Ready => TicketFilter::state(TicketWorkflowState::Ready), + ListState::Queued => TicketFilter::state(TicketWorkflowState::Queued), + ListState::InProgress => TicketFilter::state(TicketWorkflowState::InProgress), + ListState::Done => TicketFilter::state(TicketWorkflowState::Done), + ListState::Closed => TicketFilter::state(TicketWorkflowState::Closed), + ListState::All => TicketFilter::all(), }; let tickets = backend.list(filter)?; - let mut stdout = String::from("status\tid\tslug\ttitle\tkind\tpriority\tupdated_at\n"); + let mut stdout = String::from("state\tid\ttitle\tupdated_at\n"); for ticket in tickets { stdout.push_str(&format!( - "{}\t{}\t{}\t{}\t{}\t{}\t{}\n", - ticket.status.as_str(), + "{}\t{}\t{}\t{}\n", + ticket.workflow_state.as_str(), ticket.id, - ticket.slug, ticket.title, - ticket.kind, - ticket.priority, ticket.updated_at.unwrap_or_default() )); } @@ -314,12 +307,8 @@ fn show(backend: &LocalTicketBackend, query: String) -> Result Result { - let status = match options.status { - StatusTarget::Open => TicketStatus::Open, - StatusTarget::Pending => TicketStatus::Pending, - StatusTarget::Closed => { + let id = TicketIdOrSlug::Query(options.query.clone()); + let target_state = match options.state { + StateTarget::Planning => TicketWorkflowState::Planning, + StateTarget::Ready => TicketWorkflowState::Ready, + StateTarget::Queued => TicketWorkflowState::Queued, + StateTarget::InProgress => TicketWorkflowState::InProgress, + StateTarget::Done => TicketWorkflowState::Done, + StateTarget::Closed => { return Err(TicketCliError::new( - "yoi ticket status closed cannot write resolution.md; use `yoi ticket close --resolution ` instead", + "yoi ticket state closed cannot write resolution.md; use `yoi ticket close --resolution ` instead", )); } }; - backend.set_status(TicketIdOrSlug::Query(options.query.clone()), status)?; + let current = backend.show(id.clone())?; + let ticket_id = current.meta.id.clone(); + match target_state { + TicketWorkflowState::Ready => backend.mark_intake_ready( + id, + TicketIntakeSummary::new("Marked ready by `yoi ticket state`."), + ticket::TicketStateChange { + from: current.meta.workflow_state.as_str().to_string(), + to: TicketWorkflowState::Ready.as_str().to_string(), + reason: "cli_state".to_string(), + author: Some("yoi ticket".to_string()), + body: "Marked ready by `yoi ticket state`.\n".into(), + references: Vec::new(), + }, + )?, + TicketWorkflowState::Queued => backend.queue_ready(id, "yoi ticket")?, + _ => { + let from = current.meta.workflow_state; + let change = ticket::TicketStateChange { + from: from.as_str().to_string(), + to: target_state.as_str().to_string(), + reason: "cli_state".to_string(), + author: Some("yoi ticket".to_string()), + body: format!("State changed to `{}`.\n", target_state.as_str()).into(), + references: Vec::new(), + }; + backend.set_workflow_state(id, change)?; + } + } Ok(success(format!( - "status\t{}\t{}\n", - options.query, - status.as_str() + "state\t{}\t{}\n", + ticket_id, + target_state.as_str() ))) } @@ -490,18 +511,10 @@ fn success(stdout: String) -> TicketCliOutput { fn parse_create(args: &[String]) -> Result { let mut title = None; - let mut slug = None; - let mut kind = "task".to_string(); - let mut priority = "P2".to_string(); - let mut labels = Vec::new(); let mut i = 0; while i < args.len() { match option_with_value(args, &mut i)? { Some(("--title", value)) => title = Some(value), - Some(("--slug", value)) => slug = Some(value), - Some(("--kind", value)) => kind = value, - Some(("--priority", value)) => priority = value, - Some(("--label", value)) => labels.extend(parse_labels(&value)), Some((name, _)) => { return Err(TicketCliError::new(format!( "unknown create argument: {name}" @@ -519,21 +532,15 @@ fn parse_create(args: &[String]) -> Result { if title.trim().is_empty() { return Err(TicketCliError::new("create --title must not be empty")); } - Ok(CreateOptions { - title, - slug, - kind, - priority, - labels, - }) + Ok(CreateOptions { title }) } fn parse_list(args: &[String]) -> Result { - let mut status = ListStatus::Open; + let mut state = ListState::All; let mut i = 0; while i < args.len() { match option_with_value(args, &mut i)? { - Some(("--status", value)) => status = parse_list_status(&value)?, + Some(("--state", value)) => state = parse_list_state(&value)?, Some((name, _)) => { return Err(TicketCliError::new(format!( "unknown list argument: {name}" @@ -547,12 +554,12 @@ fn parse_list(args: &[String]) -> Result { } } } - Ok(ListOptions { status }) + Ok(ListOptions { state }) } fn parse_comment(args: &[String]) -> Result { if args.is_empty() || args[0].starts_with('-') { - return Err(TicketCliError::new("comment requires ")); + return Err(TicketCliError::new("comment requires ")); } let query = args[0].clone(); let mut role = TicketEventKind::Comment; @@ -586,7 +593,7 @@ fn parse_comment(args: &[String]) -> Result { fn parse_review(args: &[String]) -> Result { if args.is_empty() || args[0].starts_with('-') { - return Err(TicketCliError::new("review requires ")); + return Err(TicketCliError::new("review requires ")); } let query = args[0].clone(); let mut approve = false; @@ -642,21 +649,21 @@ fn parse_review(args: &[String]) -> Result { }) } -fn parse_status(args: &[String]) -> Result { +fn parse_state(args: &[String]) -> Result { if args.len() != 2 { return Err(TicketCliError::new( - "status requires ", + "state requires ", )); } - Ok(StatusOptions { + Ok(StateOptions { query: args[0].clone(), - status: parse_status_target(&args[1])?, + state: parse_state_target(&args[1])?, }) } fn parse_close(args: &[String]) -> Result { if args.is_empty() || args[0].starts_with('-') { - return Err(TicketCliError::new("close requires ")); + return Err(TicketCliError::new("close requires ")); } let query = args[0].clone(); let mut file = None; @@ -687,9 +694,7 @@ fn parse_close(args: &[String]) -> Result { fn parse_one_positional(command: &str, args: &[String]) -> Result { if args.len() != 1 || args[0].starts_with('-') { - Err(TicketCliError::new(format!( - "{command} requires " - ))) + Err(TicketCliError::new(format!("{command} requires "))) } else { Ok(args[0].clone()) } @@ -702,11 +707,7 @@ fn option_with_value( let arg = &args[*i]; for name in [ "--title", - "--slug", - "--kind", - "--priority", - "--label", - "--status", + "--state", "--role", "--file", "--message", @@ -733,30 +734,28 @@ fn option_with_value( Ok(None) } -fn parse_labels(value: &str) -> impl Iterator + '_ { - value - .split(',') - .map(str::trim) - .filter(|label| !label.is_empty()) - .map(ToOwned::to_owned) -} - -fn parse_list_status(value: &str) -> Result { +fn parse_list_state(value: &str) -> Result { match value { - "open" => Ok(ListStatus::Open), - "pending" => Ok(ListStatus::Pending), - "closed" => Ok(ListStatus::Closed), - "all" => Ok(ListStatus::All), - _ => Err(TicketCliError::new(format!("invalid status: {value}"))), + "planning" => Ok(ListState::Planning), + "ready" => Ok(ListState::Ready), + "queued" => Ok(ListState::Queued), + "inprogress" => Ok(ListState::InProgress), + "done" => Ok(ListState::Done), + "closed" => Ok(ListState::Closed), + "all" => Ok(ListState::All), + _ => Err(TicketCliError::new(format!("invalid state: {value}"))), } } -fn parse_status_target(value: &str) -> Result { +fn parse_state_target(value: &str) -> Result { match value { - "open" => Ok(StatusTarget::Open), - "pending" => Ok(StatusTarget::Pending), - "closed" => Ok(StatusTarget::Closed), - _ => Err(TicketCliError::new(format!("invalid status: {value}"))), + "planning" => Ok(StateTarget::Planning), + "ready" => Ok(StateTarget::Ready), + "queued" => Ok(StateTarget::Queued), + "inprogress" => Ok(StateTarget::InProgress), + "done" => Ok(StateTarget::Done), + "closed" => Ok(StateTarget::Closed), + _ => Err(TicketCliError::new(format!("invalid state: {value}"))), } } @@ -812,7 +811,7 @@ fn default_author() -> String { } fn help_text() -> &'static str { - "yoi ticket\n\nUsage:\n yoi ticket init\n yoi ticket create --title [--slug <slug>] [--kind <kind>] [--priority P2] [--label a,b]\n yoi ticket list [--status open|pending|closed|all]\n yoi ticket show <id-or-slug>\n yoi ticket comment <id-or-slug> [--role comment|plan|decision|implementation_report] (--file <path>|--message <text>)\n yoi ticket review <id-or-slug> (--approve|--request-changes) (--file <path>|--message <text>)\n yoi ticket status <id-or-slug> <open|pending|closed>\n yoi ticket close <id-or-slug> (--resolution <text>|--file <path>)\n yoi ticket doctor\n\nOptions:\n -h, --help Print help\n\nBackend:\n `yoi ticket init` writes .yoi/ticket.config.toml with explicit fixed role profiles and an optional commented [ticket].language setting.\n Uses the workspace Ticket config at .yoi/ticket.config.toml when present.\n Supported provider: builtin:yoi_local.\n Without config, the local backend root is <cwd>/.yoi/tickets.\n" + "yoi ticket\n\nUsage:\n yoi ticket init\n yoi ticket create --title <title>\n yoi ticket list [--state planning|ready|queued|inprogress|done|closed|all]\n yoi ticket show <id>\n yoi ticket comment <id> [--role comment|plan|decision|implementation_report] (--file <path>|--message <text>)\n yoi ticket review <id> (--approve|--request-changes) (--file <path>|--message <text>)\n yoi ticket state <id> <planning|ready|queued|inprogress|done|closed>\n yoi ticket close <id> (--resolution <text>|--file <path>)\n yoi ticket doctor\n\nOptions:\n -h, --help Print help\n\nBackend:\n `yoi ticket init` writes .yoi/ticket.config.toml with explicit fixed role profiles and an optional commented [ticket].language setting.\n Uses the workspace Ticket config at .yoi/ticket.config.toml when present.\n Supported provider: builtin:yoi_local.\n Without config, the local backend root is <cwd>/.yoi/tickets.\n" } #[cfg(test)] @@ -831,6 +830,15 @@ mod tests { run_in_workspace(cli, temp.path()).unwrap() } + fn created_id(output: &TicketCliOutput) -> String { + output + .stdout + .strip_prefix("created\t") + .and_then(|rest| rest.lines().next()) + .expect("create output contains created id") + .to_string() + } + #[test] fn ticket_cli_init_writes_explicit_ticket_config_scaffold() { let temp = TempDir::new().unwrap(); @@ -882,49 +890,40 @@ mod tests { } #[test] - fn ticket_cli_create_list_show_comment_review_status_close_and_doctor() { + fn ticket_cli_create_list_show_comment_review_state_close_and_doctor() { let temp = TempDir::new().unwrap(); - let created = run( - &temp, - &[ - "create", - "--title", - "CLI Created", - "--slug", - "cli-created", - "--kind", - "task", - "--priority", - "P1", - "--label", - "ticket,cli", - ], - ); + let created = run(&temp, &["create", "--title", "CLI Created"]); assert_eq!(created.status, TicketCliStatus::Success); assert!(created.stdout.contains("created\t")); - assert!(created.stdout.contains("\tcli-created\topen")); - assert!(temp.path().join(".yoi/tickets/open").exists()); + let ticket_id = created_id(&created); + assert!(temp.path().join(".yoi/tickets").join(&ticket_id).exists()); assert!(!temp.path().join("work-items").exists()); let created_item = fs::read_to_string( temp.path() - .join(".yoi/tickets/open") - .join(created.stdout.split('\t').nth(1).unwrap()) + .join(".yoi/tickets") + .join(&ticket_id) .join("item.md"), ) .unwrap(); + assert!(created_item.contains("state:")); + assert!(created_item.contains("planning")); assert!(!created_item.contains("legacy_ticket:")); assert!(!created_item.contains("needs_preflight:")); + assert!(!created_item.contains("slug:")); + assert!(!created_item.contains("workflow_state:")); - let listed = run(&temp, &["list", "--status", "open"]); - assert!(listed.stdout.contains("status\tid\tslug")); + let listed = run(&temp, &["list", "--state", "planning"]); + assert!(listed.stdout.contains("state\tid\ttitle")); + assert!(listed.stdout.contains(&ticket_id)); assert!(listed.stdout.contains("CLI Created")); assert!(!listed.stdout.contains("legacy_ticket")); assert!(!listed.stdout.contains("needs_preflight")); - let shown = run(&temp, &["show", "cli-created"]); + let shown = run(&temp, &["show", &ticket_id]); assert!(shown.stdout.contains("# CLI Created")); - assert!(shown.stdout.contains("Labels: ticket, cli")); + assert!(shown.stdout.contains(&format!("ID: {ticket_id}"))); + assert!(shown.stdout.contains("State: planning")); assert!(!shown.stdout.contains("legacy_ticket")); assert!(!shown.stdout.contains("needs_preflight")); @@ -932,7 +931,7 @@ mod tests { &temp, &[ "comment", - "cli-created", + &ticket_id, "--role", "implementation_report", "--message", @@ -942,44 +941,62 @@ mod tests { assert!( commented .stdout - .contains("appended\tcli-created\timplementation_report") + .contains(&format!("appended\t{}\timplementation_report", ticket_id)) ); let reviewed = run( &temp, &[ "review", - "cli-created", + &ticket_id, "--approve", "--message", "Looks good.", ], ); - assert!(reviewed.stdout.contains("reviewed\tcli-created\tapprove")); + assert!( + reviewed + .stdout + .contains(&format!("reviewed\t{}\tapprove", ticket_id)) + ); - let pending = run(&temp, &["status", "cli-created", "pending"]); - assert!(pending.stdout.contains("status\tcli-created\tpending")); + let ready = run(&temp, &["state", &ticket_id, "ready"]); + assert_eq!(ready.stdout, format!("state\t{}\tready\n", ticket_id)); + let ready_listed = run(&temp, &["list", "--state", "ready"]); + assert!(ready_listed.stdout.contains(&ticket_id)); + + let queued = run(&temp, &["state", &ticket_id, "queued"]); + assert_eq!(queued.stdout, format!("state\t{}\tqueued\n", ticket_id)); + let queued_listed = run(&temp, &["list", "--state", "queued"]); + assert!(queued_listed.stdout.contains(&ticket_id)); + + let inprogress = run(&temp, &["state", &ticket_id, "inprogress"]); + assert_eq!( + inprogress.stdout, + format!("state\t{}\tinprogress\n", ticket_id) + ); + let inprogress_listed = run(&temp, &["list", "--state", "inprogress"]); + assert!(inprogress_listed.stdout.contains(&ticket_id)); + + let done = run(&temp, &["state", &ticket_id, "done"]); + assert_eq!(done.stdout, format!("state\t{}\tdone\n", ticket_id)); + let done_listed = run(&temp, &["list", "--state", "done"]); + assert!(done_listed.stdout.contains(&ticket_id)); let closed = run( &temp, - &[ - "close", - "cli-created", - "--resolution", - "Done via yoi ticket.", - ], + &["close", &ticket_id, "--resolution", "Done via yoi ticket."], ); - assert!(closed.stdout.contains("closed\tcli-created")); + assert!(closed.stdout.contains(&format!("closed\t{}", ticket_id))); let doctor = run(&temp, &["doctor"]); assert_eq!(doctor.status, TicketCliStatus::Success); assert_eq!(doctor.stdout, "doctor: ok\n"); let backend = LocalTicketBackend::new(temp.path().join(".yoi/tickets")); - let ticket = backend - .show(TicketIdOrSlug::Query("cli-created".to_string())) - .unwrap(); + let ticket = backend.show(TicketIdOrSlug::Id(ticket_id.clone())).unwrap(); assert!(ticket.resolution.is_some()); + assert_eq!(ticket.meta.workflow_state, TicketWorkflowState::Closed); assert!( ticket .events @@ -1004,28 +1021,11 @@ mod tests { ) .unwrap(); - run( - &temp, - &[ - "create", - "--title", - "Configured Root", - "--slug", - "configured-root", - ], - ); + let created = run(&temp, &["create", "--title", "Configured Root"]); + let ticket_id = created_id(&created); - assert!( - temp.path() - .join("custom-tickets/open") - .read_dir() - .unwrap() - .any(|entry| entry - .unwrap() - .file_name() - .to_string_lossy() - .contains("configured-root")) - ); + assert!(temp.path().join("custom-tickets").join(ticket_id).exists()); + assert!(!temp.path().join("custom-tickets/open").exists()); assert!(!temp.path().join("work-items").exists()); } @@ -1058,13 +1058,11 @@ mod tests { } #[test] - fn ticket_cli_status_closed_requires_close_command() { + fn ticket_cli_state_closed_requires_close_command() { let temp = TempDir::new().unwrap(); - run( - &temp, - &["create", "--title", "Close Me", "--slug", "close-me"], - ); - let cli = parse_ticket_args(&args(&["status", "close-me", "closed"])).unwrap(); + let created = run(&temp, &["create", "--title", "Close Me"]); + let ticket_id = created_id(&created); + let cli = parse_ticket_args(&args(&["state", &ticket_id, "closed"])).unwrap(); let err = run_in_workspace(cli, temp.path()).unwrap_err(); assert!(err.to_string().contains("use `yoi ticket close")); } diff --git a/docs/development/work-items.md b/docs/development/work-items.md index fbeb2625..6632a131 100644 --- a/docs/development/work-items.md +++ b/docs/development/work-items.md @@ -2,7 +2,7 @@ Yoi project work is tracked through Tickets. For normal use, interact with Tickets through `yoi panel`, Ticket tools, the `yoi ticket ...` CLI, and Ticket workflows. Git history plus Ticket files remain the authoritative state-transition record behind those interfaces. -The current local backend stores Ticket files under `.yoi/tickets/`. That storage detail matters for maintainers and backend compatibility, but it is not the primary user-facing workflow. +The current local backend stores each Ticket in the flat `.yoi/tickets/<ticket-id>/` layout. The directory name is the canonical opaque Ticket id; slugs and frontmatter `id`/`slug` fields are not current-state authority. That storage detail matters for maintainers and backend compatibility, but it is not the primary user-facing workflow. Do not treat ad-hoc chat summaries, memory records, or Pod notifications as the final source of project state. Notifications are hints to inspect concrete state, not proof of completion. @@ -36,7 +36,7 @@ Pods with the Ticket built-in feature can use typed Ticket tools: - `TicketShow` - `TicketComment` - `TicketReview` -- `TicketStatus` +- `TicketWorkflowState` - `TicketClose` - `TicketDoctor` @@ -98,7 +98,7 @@ when a spike is useful, let the Orchestrator create an ordinary task-specific re `launch_prompt` is a per-action first-run prompt reference for future prompt resolution. Current launcher behavior exposes the ref but does not treat it as system instruction. -`workflow` is the workflow the launched role should follow. Workflow state and phase-specific prompt injection are future work; any dynamic prompt content must be committed as history before it affects model context. +`workflow` is the workflow the launched role should follow. State and phase-specific prompt injection are future work; any dynamic prompt content must be committed as history before it affects model context. `provider = "builtin:yoi_local"` selects Yoi's built-in local Ticket backend. `root = ".yoi/tickets"` is the canonical local storage root for this repository. Legacy `kind = "local"` is accepted only as a short transitional alias; new configs should use `provider`. @@ -156,14 +156,13 @@ Routing classifications include: - `review_needed` - `blocked_action_required` - `close_ready` -- `defer_pending` - `closed_or_noop` Routing decisions should be recorded with `TicketComment` using `plan` or `decision` role. The decision should state the classification, evidence checked, reason, next action, and escalation conditions. For `return_to_planning`, the record must also state the concrete missing decision/information, context checked, why implementation latitude is insufficient, and the next planning question/action. ### 3. Planning/requirements sync -Use `ticket-preflight-workflow` only as a legacy compatibility slug for planning/requirements sync. Return `ready` or `queued` Tickets to `planning` only when the Orchestrator can name a concrete missing decision or information item after bounded project-context checks; risk flags and risky domains are context-lookup and reviewer-focus signals, not automatic stop gates. +Use `ticket-preflight-workflow` only as a legacy-compatible planning/requirements sync entry. Return `ready` or `queued` Tickets to `planning` only when the Orchestrator can name a concrete missing decision or information item after bounded project-context checks; risk flags and risky domains are context-lookup and reviewer-focus signals, not automatic stop gates. Planning sync should resolve or record: @@ -207,13 +206,13 @@ Unless explicitly authorized otherwise, final merge, cleanup, design-boundary de Before closing, verify concrete evidence: - child Pod output via `ReadPodOutput`; -- worktree status and diff; +- worktree state and diff; - validation command output; - review result; - Ticket requirements and acceptance criteria; - merge/cleanup state in the main workspace. -Close with a resolution that summarizes what changed, key commits, validation, review status, and remaining follow-ups. +Close with a resolution that summarizes what changed, key commits, validation, review state, and remaining follow-ups. ## Workspace panel Ticket role actions @@ -248,8 +247,8 @@ The launched Pod receives dynamic Ticket/action context as its first committed r The first run input contains: - the selected fixed role; -- the workflow slug from `.yoi/ticket.config.toml`; -- Ticket id/slug when the action targets an existing Ticket; +- the workflow canonical id from `.yoi/ticket.config.toml`; +- Ticket id when the action targets an existing Ticket; - freeform user instruction/context from the action; - configured `launch_prompt` reference if present, as an unresolved reference for future prompt resolution. @@ -289,7 +288,7 @@ If a role still uses `profile = "inherit"`, the panel fails closed with a diagno - `profile = "inherit"`: configure a concrete role Profile in `.yoi/ticket.config.toml`. - malformed `.yoi/ticket.config.toml`: fix the config and retry. -- missing Ticket id/slug for route, implement, or review actions: provide the target Ticket. +- missing Ticket id for route, implement, or review actions: provide the target Ticket. - launch success but no visible completion: attach to or inspect the launched Pod; completion notifications are hints, not authority. ## Granularity @@ -333,29 +332,29 @@ Do not store secrets, credentials, private prompt contents, or raw logs containi The product CLI exposes the typed Ticket backend for repository maintenance and validation. It operates on the configured `.yoi/tickets/` storage and is the preferred command-line surface when editing Tickets outside a Pod. ```sh -yoi ticket create --title "..." [--slug slug] [--kind task] [--priority P2] [--label a,b] -yoi ticket list [--status open|pending|closed|all] -yoi ticket show <id-or-slug> -yoi ticket comment <id-or-slug> [--role comment|plan|decision|implementation_report] [--file path] -yoi ticket review <id-or-slug> --approve|--request-changes [--file path] -yoi ticket status <id-or-slug> open|pending -yoi ticket close <id-or-slug> [--resolution text|--file path] +yoi ticket create --title "..." [--priority P2] +yoi ticket list [--state planning|ready|queued|inprogress|done|closed|all] +yoi ticket show <id> +yoi ticket comment <id> [--role comment|plan|decision|implementation_report] [--file path] +yoi ticket review <id> --approve|--request-changes [--file path] +yoi ticket state <id> <planning|ready|queued|inprogress|done> +yoi ticket close <id> [--resolution text|--file path] yoi ticket doctor ``` -`yoi ticket status` intentionally does not close Tickets. Closing must use `yoi ticket close` so the backend writes the required `resolution.md` and passes `yoi ticket doctor`. +`yoi ticket state` records current lifecycle transitions among active states. Closing must use `yoi ticket close` so the backend writes the required `resolution.md` and passes `yoi ticket doctor`; `done` and `closed` remain distinct states. The current LocalTicketBackend stores records under: ```text -.yoi/tickets/{open,pending,closed}/<id>/ +.yoi/tickets/<ticket-id> item.md thread.md artifacts/ resolution.md # closed Tickets only ``` -Backend integrations must preserve this format until an explicit migration changes it. `thread.md` is an append-only typed event log: existing events such as `create`, `comment`, `plan`, `decision`, `implementation_report`, `review`, `status_changed`, and `close` remain valid, while `state_changed` records durable transition metadata (`from`, `to`, `reason`, optional `field`, plus `author` and `at`) and `intake_summary` records the bounded Intake outcome body. Thread events are audit history, not current-state authority; current state belongs in `item.md` frontmatter or the owning backend record. The repository-root `work-items/` path is no longer a live mutable backend; do not recreate it for Ticket records. Human users should prefer `yoi panel`, Ticket tools, or `yoi ticket ...` when working directly with repository records. +Backend integrations must preserve this format until an explicit migration changes it. `thread.md` is an append-only typed event log: existing events such as `create`, `comment`, `plan`, `decision`, `implementation_report`, `review`, `state_changed`, and `close` remain valid, while `state_changed` records durable transition metadata (`from`, `to`, `reason`, optional `field`, plus `author` and `at`) and `intake_summary` records the bounded Intake outcome body. Thread events are audit history, not current-state authority; current state belongs in `item.md` frontmatter or the owning backend record. The repository-root `work-items/` path is no longer a live mutable backend; do not recreate it for Ticket records. Human users should prefer `yoi panel`, Ticket tools, or `yoi ticket ...` when working directly with repository records. ## Validation diff --git a/docs/development/workflows.md b/docs/development/workflows.md index eb7c6626..925fc2c8 100644 --- a/docs/development/workflows.md +++ b/docs/development/workflows.md @@ -25,7 +25,7 @@ A parent/orchestrator must verify: - child output via `ReadPodOutput` - live/restorable state via Pod tools when relevant -- worktree status and diff +- worktree state and diff - validation command output - Ticket requirements and acceptance criteria diff --git a/resources/prompts/common/pod-orchestration.md b/resources/prompts/common/pod-orchestration.md index 3abd8997..c260c1cc 100644 --- a/resources/prompts/common/pod-orchestration.md +++ b/resources/prompts/common/pod-orchestration.md @@ -5,7 +5,7 @@ When Pod-management tools are available, spawned Pod notifications are backgroun The parent does not need to keep a turn open or call tools solely to wait for a notification. Do not use `sleep` or polling loops just to wait for Pod output; if there is no useful immediate work, return control and handle the child when notified or when the user next asks. -Before treating delegated work as complete, read the child output and inspect concrete evidence such as worktree status, diff, and test results. Notifications are hints, not proof of completion. +Before treating delegated work as complete, read the child output and inspect concrete evidence such as worktree state, diff, and test results. Notifications are hints, not proof of completion. Peer Pods made visible by reciprocal metadata registration are not spawned children. Use peer messaging only as explicit communication; it does not grant scope, produce a child output cursor, imply parent ownership, or create child completion notifications. Peer sends require a live peer and do not auto-restore stopped peers. diff --git a/resources/prompts/internal/memory_extract_system.md b/resources/prompts/internal/memory_extract_system.md index 6b91cd11..15585c59 100644 --- a/resources/prompts/internal/memory_extract_system.md +++ b/resources/prompts/internal/memory_extract_system.md @@ -30,11 +30,11 @@ Your single job: read the supplied conversation slice and emit a structured JSON # Anti-noise rules -Authoritative project records (issue trackers, task boards, planning documents, changelogs, version-control history, generated reports) are the source of truth for their exact contents. Memory must not mirror those records verbatim or maintain a parallel status ledger, but it may capture durable project-management facts, workflow constraints, recurring patterns, and abstractions when they will help future work. +Authoritative project records (issue trackers, task boards, planning documents, changelogs, version-control history, generated reports) are the source of truth for their exact contents. Memory must not mirror those records verbatim or maintain a parallel state ledger, but it may capture durable project-management facts, workflow constraints, recurring patterns, and abstractions when they will help future work. - `attempts`: skip actions whose only substance is maintaining an authoritative record or moving an item through an external lifecycle. Keep attempts for outcomes that are not captured by that record itself: build / test outcomes, external API responses, observed bug reproductions, design experiments, and process lessons that inform later judgement. -- `discussions`: skip transient triage that goes stale within the day — immediate scheduling, checklist-style status reads, or short-lived sequencing choices. Keep discussions whose points outlive the session (architectural trade-offs, durable process constraints, recurring workflow questions). +- `discussions`: skip transient triage that goes stale within the day — immediate scheduling, checklist-style state reads, or short-lived sequencing choices. Keep discussions whose points outlive the session (architectural trade-offs, durable process constraints, recurring workflow questions). - `decisions`: the rationale must be a design / policy / process / approach reason, not "we did X in this session". Recording that an item was filed, completed, or moved through a lifecycle is NOT a decision; recording the durable policy or abstraction behind that workflow can be. -- Avoid copying titles, bodies, checklists, raw statuses, or short-lived identifiers from authoritative project records. If a record is only meaningful as an exact status mirror or with a transient identifier, the record itself is probably session-local and should be skipped. +- Avoid copying titles, bodies, checklists, raw statees, or short-lived identifiers from authoritative project records. If a record is only meaningful as an exact state mirror or with a transient identifier, the record itself is probably session-local and should be skipped. When you have produced the JSON, call `write_extracted` and end the turn. No follow-up text.