ticket: record coder reports and intake refinement

This commit is contained in:
Keisuke Hirata 2026-06-09 21:08:31 +09:00
parent 2bd4e43eaa
commit 7b80a9b69c
No known key found for this signature in database
7 changed files with 140 additions and 4 deletions

View File

@ -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"
}
]
}

View File

@ -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

View File

@ -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.
---
<!-- event: decision author: intake at: 2026-06-09T11:35:09Z -->
## 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 できる。
---
<!-- event: intake_summary author: intake at: 2026-06-09T11:35:29Z -->
## 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 はない。
---
<!-- event: state_changed author: intake at: 2026-06-09T11:35:29Z from: planning to: ready reason: intake_ready field: state -->
## State changed
Intake refinement により、既存の plan store 実装との差分、current `state` vocabulary、binding invariants、implementation latitude、validation focus が整理され、Orchestrator が routing できる状態になった。
---

View File

@ -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'

View File

@ -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.
---
<!-- event: implementation_report author: coder at: 2026-06-09T12:05:22Z -->
## 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`
---

View File

@ -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'

View File

@ -142,3 +142,30 @@ Parallel-routing rationale:
- It is expected to have only small/manageable overlap with Profile feature-flag work.
---
<!-- event: implementation_report author: coder at: 2026-06-09T12:04:53Z -->
## 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`
---