diff --git a/.yoi/tickets/20260608-061235-001/artifacts/relations.json b/.yoi/tickets/20260608-061235-001/artifacts/relations.json new file mode 100644 index 00000000..d9be162f --- /dev/null +++ b/.yoi/tickets/20260608-061235-001/artifacts/relations.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "relations": [ + { + "ticket_id": "20260608-061235-001", + "kind": "depends_on", + "target": "20260607-035710-001", + "note": "この Ticket の残り範囲は、既に closed 済みの OrchestrationPlan record/tool surface を前提にした re-kick / active work set discovery 層として扱う。Plan store 自体を再実装しないための canonical prerequisite 記録。", + "author": "intake", + "at": "2026-06-09T11:34:44Z" + } + ] +} diff --git a/.yoi/tickets/20260608-061235-001/item.md b/.yoi/tickets/20260608-061235-001/item.md index c5443aff..ff347e53 100644 --- a/.yoi/tickets/20260608-061235-001/item.md +++ b/.yoi/tickets/20260608-061235-001/item.md @@ -1,8 +1,8 @@ --- title: "Prevent idle starvation in Ticket orchestration planning" -state: "planning" +state: 'ready' created_at: "2026-06-08T06:12:35Z" -updated_at: "2026-06-08T06:27:33Z" +updated_at: '2026-06-09T11:35:29Z' --- ## Background diff --git a/.yoi/tickets/20260608-061235-001/thread.md b/.yoi/tickets/20260608-061235-001/thread.md index 689d677a..256d3061 100644 --- a/.yoi/tickets/20260608-061235-001/thread.md +++ b/.yoi/tickets/20260608-061235-001/thread.md @@ -48,3 +48,73 @@ This Ticket assumes that behavior exists and builds the `new_queued` / `planned_ Therefore, the OrchestrationPlan/re-kick layer should not introduce its own separate `preflight_needed` bucket or cleanup logic. --- + + + +## Decision + +## Intake refinement: ready scope for Orchestrator routing + +既存 Ticket の本文と thread を確認し、関連 work と現在の Ticket lifecycle vocabulary に合わせて、残りの実装対象を以下に整理する。 + +### Scope after related work + +- この Ticket は、Orchestrator が `queued` work を見落とさず、かつ active work を待っている最中に無駄な再 kick を繰り返さないための **active work set discovery / re-kick policy** を実装対象にする。 +- OrchestrationPlan record/tool surface は既に別 Ticket で実装済みの前提として扱い、この Ticket で plan store 自体を再実装しない。 +- 既存本文・thread の `workflow_state` という語は現在 schema の authoritative field ではない。実装では Ticket frontmatter の `state` を authority とし、既存記録中の `workflow_state = queued` などは historical wording / conceptual alias として読む。 + +### Binding decisions / invariants + +- `new_queued` / `planned_queued` / `inprogress` は新しい core Ticket state として追加しない。必要な work-set classification は、現在の Ticket `state`、OrchestrationPlan records、role/session claim、visible Pod/worktree state から導出する。 +- `queued` は Orchestrator が routing/start-if-unblocked を検討できる状態であり、implementation side effects は必ず `queued -> inprogress` が記録された後に限る。 +- Panel や local lifecycle hook が Orchestrator に attention / kick を与えることはできるが、unattended scheduler loop や常時 polling にはしない。 +- Orchestrator が active coder/reviewer/preflight/merge/cleanup 等の完了待ちである間は、queued/planned work が存在するだけでは再 kick しない。 +- `planned_queued` work を開始しない理由が capacity / dependency / conflict / dirty workspace 等で説明できる場合は、bounded reason を OrchestrationPlan record または既存の適切な durable artifact に残し、Panel/user が理解できるようにする。 +- duplicate start を避けるため、Ticket state、role/session claims、Plan records、visible Pod/worktree state を確認してから attention/kick/acceptance を行う。 + +### Implementation latitude + +- どの runtime/panel boundary で idle Orchestrator を検出して kick するか、どの view-model/helper に work-set derivation を置くか、bounded payload の具体形は実装側で選んでよい。 +- 既存 OrchestrationPlan types で waiting/capacity reason が足りない場合、最小の typed extension は検討してよい。ただし core Ticket lifecycle state の増殖や旧 `workflow_state` 復活は避ける。 +- Panel 表示は state-first / heuristic-free の原則を維持する。title text、labels、thread event の有無、Pod 名 substrings を lifecycle authority にしない。 + +### Acceptance criteria + +- Orchestrator が idle/not occupied のとき、new queued work を検出して plan incorporation または bounded work-list attention に進める。 +- Inprogress work が存在せず、planned queued work が unblocked かつ capacity/policy 上開始可能なとき、Orchestrator が次の acceptance/routing を行える。 +- Active inprogress operation の完了待ち中は、queued/planned work の存在だけで再 kick しない。 +- 開始しない planned queued work には、ユーザーが確認できる bounded waiting/blocking reason が残る。 +- 既存の human gate、`queued -> inprogress` acceptance step、dirty-workspace/dependency/conflict/capacity checks を迂回しない。 +- duplicate Orchestrator/coder/reviewer/worktree start を起こさない。 + +### Validation + +- `nix build .#yoi` を通す。 +- Ticket / panel / orchestrator routing 周辺の既存テストまたは追加テストで、少なくとも idle queued detection、active-work wait suppression、waiting reason recording、duplicate-start prevention の主要分岐を確認する。 +- 実装報告では、どの authority を work-set classification に使ったか、implementation side effects が `queued -> inprogress` 後に限定されていることを明示する。 + +### Readiness + +- readiness: implementation_ready +- risk_flags: [orchestration-policy, panel-lifecycle, persistence, role-session, authority-boundary, duplicate-start] +- blocking open questions: none + +この refinement により、Orchestrator はこの Ticket を implementation candidate として routing できる。 + +--- + + + +## Intake summary + +Ticket 20260608-061235-001 は implementation_ready。残り範囲は既に実装済みの OrchestrationPlan record/tool surface を前提にした active work set discovery / Orchestrator re-kick policy。`new_queued` / `planned_queued` / `inprogress` は新しい core Ticket state ではなく、現在の Ticket `state`、OrchestrationPlan records、role/session claims、visible Pod/worktree state から導出する分類として扱う。Panel/lifecycle hook は idle Orchestrator に bounded attention を与えるが、unattended scheduler loop や常時 polling にはしない。`queued -> inprogress` acceptance 前の implementation side effects、blind spawn、duplicate start は禁止。active coder/reviewer/preflight/merge/cleanup 待ち中は queued/planned work の存在だけで re-kick しない。risk_flags: [orchestration-policy, panel-lifecycle, persistence, role-session, authority-boundary, duplicate-start]。blocking open questions はない。 + +--- + + + +## State changed + +Intake refinement により、既存の plan store 実装との差分、current `state` vocabulary、binding invariants、implementation latitude、validation focus が整理され、Orchestrator が routing できる状態になった。 + +--- diff --git a/.yoi/tickets/20260609-082209-001/item.md b/.yoi/tickets/20260609-082209-001/item.md index 68f70d53..70c045da 100644 --- a/.yoi/tickets/20260609-082209-001/item.md +++ b/.yoi/tickets/20260609-082209-001/item.md @@ -2,7 +2,7 @@ title: 'Profile feature flagsでtool surfaceを制御する' state: 'inprogress' created_at: '2026-06-09T08:22:09Z' -updated_at: '2026-06-09T11:31:52Z' +updated_at: '2026-06-09T12:05:22Z' assignee: null queued_by: 'workspace-panel' queued_at: '2026-06-09T10:31:11Z' diff --git a/.yoi/tickets/20260609-082209-001/thread.md b/.yoi/tickets/20260609-082209-001/thread.md index 7a582d86..a2767bf5 100644 --- a/.yoi/tickets/20260609-082209-001/thread.md +++ b/.yoi/tickets/20260609-082209-001/thread.md @@ -116,3 +116,29 @@ Parallel-routing rationale: - It is expected to have only small/manageable overlap with the Ticket schema field cleanup running in parallel. --- + + + +## Implementation report + +Implemented Profile feature flags for built-in tool-surface registration. + +Summary: +- Added resolved `feature` config with explicit flags for `task`, `memory`, `web`, `pod_management`, `ticket`, and `ticket_orchestration` plus Ticket `access = "read_only" | "lifecycle"`. +- Changed controller registration so optional built-in surfaces are registered only when enabled by Profile/config; core filesystem/process tools remain static and scope-gated. +- Kept safety boundaries: web tools still fail closed under web config, memory feature requires `[memory]`, pod-management feature requires non-empty delegation scope, Ticket tools still use backend host authority. +- Split Ticket base and orchestration tool declarations so Ticket orchestration can be surfaced independently. +- Migrated project role profiles and builtin default profile to explicit feature settings. + +Validation passed: +- `cargo test -p manifest feature --lib` +- `cargo test -p pod feature --tests` +- `cargo test -p pod pod_management_feature_requires_delegation_scope --test controller_test` +- `cargo test -p tools --test integration` +- `cargo fmt --check` +- `git diff --check` +- `cargo run -q -p yoi -- ticket doctor` +- `cargo check --workspace` +- `nix build .#yoi` + +--- diff --git a/.yoi/tickets/20260609-095518-001/item.md b/.yoi/tickets/20260609-095518-001/item.md index 87c84843..13e9bda7 100644 --- a/.yoi/tickets/20260609-095518-001/item.md +++ b/.yoi/tickets/20260609-095518-001/item.md @@ -2,7 +2,7 @@ title: 'action_requiredとattention_requiredをTicket schemaから削除する' state: 'inprogress' created_at: '2026-06-09T09:55:18Z' -updated_at: '2026-06-09T11:31:52Z' +updated_at: '2026-06-09T12:04:53Z' assignee: null queued_by: 'workspace-panel' queued_at: '2026-06-09T10:11:38Z' diff --git a/.yoi/tickets/20260609-095518-001/thread.md b/.yoi/tickets/20260609-095518-001/thread.md index 4d757008..dea6bdeb 100644 --- a/.yoi/tickets/20260609-095518-001/thread.md +++ b/.yoi/tickets/20260609-095518-001/thread.md @@ -142,3 +142,30 @@ Parallel-routing rationale: - It is expected to have only small/manageable overlap with Profile feature-flag work. --- + + + +## Implementation report + +Implemented removal of `action_required` and `attention_required` from current Ticket schema/tool/API/panel behavior. + +Summary: +- Removed both fields from `NewTicket`, parsed/public metadata structs, list/show JSON output, TicketCreate params/schema, CLI list hints, and workspace panel row state. +- Removed Panel ready-ticket blocker and safe-close guards that depended on those fields; relation blockers continue to block via existing relation metadata. +- Added doctor obsolete-frontmatter diagnostics for both fields and updated focused tests to assert new writes/schema/output omit them. +- Updated maintained Intake/Orchestrator workflow guidance and development routing classification text away from the obsolete fields. +- Checked local `.yoi/tickets/**/item.md` frontmatter: no `action_required` or `attention_required` entries were present, so no non-null current values required migration or replacement. + +Validation: +- `cargo test -p ticket` +- `cargo test -p tui workspace_panel` +- `cargo test -p tui ticket_close_action` +- `cargo test -p yoi ticket` +- `cargo fmt --check` +- `git diff --check` +- `cargo run -q -p yoi -- ticket doctor` +- `cargo check --workspace` +- frontmatter grep/awk check for `.yoi/tickets/*/item.md` +- `nix build .#yoi` + +---