From 978d97a90a1afbed66428d258fcc37d7d7d36748 Mon Sep 17 00:00:00 2001 From: Hare Date: Wed, 10 Jun 2026 20:17:47 +0900 Subject: [PATCH] ticket: record builtin role profile routing wait --- .yoi/tickets/00001KTRG8N9J/artifacts/.gitkeep | 0 .../artifacts/orchestration-plan.jsonl | 1 + .yoi/tickets/00001KTRG8N9J/item.md | 80 +++++++++++++ .yoi/tickets/00001KTRG8N9J/thread.md | 106 ++++++++++++++++++ 4 files changed, 187 insertions(+) create mode 100644 .yoi/tickets/00001KTRG8N9J/artifacts/.gitkeep create mode 100644 .yoi/tickets/00001KTRG8N9J/artifacts/orchestration-plan.jsonl create mode 100644 .yoi/tickets/00001KTRG8N9J/item.md create mode 100644 .yoi/tickets/00001KTRG8N9J/thread.md diff --git a/.yoi/tickets/00001KTRG8N9J/artifacts/.gitkeep b/.yoi/tickets/00001KTRG8N9J/artifacts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/.yoi/tickets/00001KTRG8N9J/artifacts/orchestration-plan.jsonl b/.yoi/tickets/00001KTRG8N9J/artifacts/orchestration-plan.jsonl new file mode 100644 index 00000000..b7812f18 --- /dev/null +++ b/.yoi/tickets/00001KTRG8N9J/artifacts/orchestration-plan.jsonl @@ -0,0 +1 @@ +{"id":"orch-plan-20260610-111729-1","ticket_id":"00001KTRG8N9J","kind":"waiting_capacity_note","note":"Queue notification was received and Ticket/relation/orchestration context was checked. Acceptance is temporarily blocked by unrelated dirty Ticket records in the main workspace (`00001KTFQ109R`, untracked `00001KTRKZ14C`) and a live Intake Pod for `00001KTRKZ14C`; implementation side effects are intentionally not started until that dirty/project-record state is committed or settled. Ticket has no relation blockers and appears implementation-ready once workspace state is safe.","author":"orchestrator","at":"2026-06-10T11:17:29Z"} diff --git a/.yoi/tickets/00001KTRG8N9J/item.md b/.yoi/tickets/00001KTRG8N9J/item.md new file mode 100644 index 00000000..a397e96f --- /dev/null +++ b/.yoi/tickets/00001KTRG8N9J/item.md @@ -0,0 +1,80 @@ +--- +title: 'Project role profilesをbuiltin profilesへ移行する' +state: 'queued' +created_at: '2026-06-10T10:11:51Z' +updated_at: '2026-06-10T11:17:29Z' +assignee: null +queued_by: 'workspace-panel' +queued_at: '2026-06-10T11:16:43Z' +--- + +## 背景 + +現在、この workspace の Ticket role 用 Profile は project-local な `.yoi/profiles/*.lua` と `.yoi/profiles.toml` で定義されている。 + +対象例: + +- `.yoi/profiles/_base.lua` +- `.yoi/profiles/companion.lua` +- `.yoi/profiles/intake.lua` +- `.yoi/profiles/orchestrator.lua` +- `.yoi/profiles/coder.lua` +- `.yoi/profiles/reviewer.lua` + +これらは Yoi の標準的な role behavior / feature policy として汎用性が高く、各 project が個別に持つより builtin profile として提供した方がよい。Lua Profile API も `global yoi`、`yoi.profile.import`、`yoi.profile.extend` へ拡張済みなので、builtin default を base にした role-specific builtin profile を表現できる。 + +この Ticket は、現状 project 定義になっている標準 role profiles を `resources/profiles` 配下の builtin profiles へ移し、project config は builtin selector を参照するだけにするための follow-up である。 + +## 要件 + +- Ticket role 用の標準 Profile を builtin profile として追加する。 + - `builtin:companion` + - `builtin:intake` + - `builtin:orchestrator` + - `builtin:coder` + - `builtin:reviewer` +- builtin role profiles は `resources/profiles` 配下で管理し、compile-time embedded resource として登録する。 +- 既存 `builtin:default` と同じ Profile registry / resolver 経路で選択できるようにする。 +- role profile は Lua Profile API の標準形を使う。 + - global `yoi` object を使う。 + - 必要なら `yoi.profile.extend("builtin:default", overrides)` などで default を base にする。 + - `require("yoi.*")` 前提にはしない。 +- 現在 project-local profiles が持っている feature/tool policy を builtin profile へ移す。 + - Companion: direct implementation worker ではなく、Ticket/Pods/Task などの権限を持たない相談・状況把握 role とする。 + - Intake: Ticket intake workflow 用の権限境界を維持する。 + - Orchestrator: Ticket orchestration workflow に必要な権限を維持する。 + - Coder: scoped implementation worker として必要な権限を維持する。 + - Reviewer: review worker として必要な権限を維持する。 +- `.yoi/ticket.config.toml` の role profile selector を project-local selector から builtin selector へ移行する。 + - 例: `profile = "builtin:intake"` +- `.yoi/profiles.toml` と `.yoi/profiles/*.lua` の扱いを整理する。 + - builtin 移行後に不要な project-local role profiles は削除するか、明示的な project override sample として残すかを判断し、理由を記録する。 + - 残す場合は builtin を override する project-local profile として意味が明確であること。 +- user/project 側で同名 profile を上書き・追加できる既存 registry semantics を壊さない。 +- Profile import/extend は raw Profile artifact レベルで行い、resolved Manifest や runtime-bound field を builtin role profile に混ぜない。 +- LLM-facing prompt / workflow 文言は Profile 内や Rust code に直書きしない。 + - role behavior の文言は `.yoi/workflow` または `resources/prompts` の既存方針に従う。 + - Profile は model / feature / permissions / memory / web / scope などの configuration に留める。 + +## 受け入れ条件 + +- `target/debug/yoi profile` または既存の profile listing/showing 経路で、role builtin profiles が確認できる。 +- `builtin:companion` / `builtin:intake` / `builtin:orchestrator` / `builtin:coder` / `builtin:reviewer` が resolver で解決できる。 +- `.yoi/ticket.config.toml` の roles が builtin profile selector を参照している。 +- Ticket role launcher が builtin role profiles を使って既存通り起動できる。 +- 現在の project-local role profiles と同等の feature/tool policy が維持されている。 +- builtin role profiles は `resources/profiles/default.lua` と同じく global `yoi` style で書かれている。 +- project-local `profiles.toml` / `.yoi/profiles/*.lua` の残存有無について、実装報告で理由が説明されている。 +- Profile validation により、builtin role profiles が runtime-bound field や concrete authority を含まないことが確認されている。 +- manifest crate の builtin profile registry / resolver test が追加・更新されている。 +- Ticket role config / launcher 側の targeted test が必要に応じて追加・更新されている。 +- `cargo test -p manifest profile` または該当 targeted test が通る。 +- `target/debug/yoi ticket doctor` が通る。 + +## 非目標 + +- role workflow 本体を builtin profile に埋め込むこと。 +- LLM-facing prompt 文言を profile file に移すこと。 +- project が独自 role profile を定義・override できる能力を消すこと。 +- Profile registry / selector semantics の大規模再設計。 +- runtime-bound `pod.name`、resolved path、concrete delegated `scope.allow` を builtin profile に持たせること。 diff --git a/.yoi/tickets/00001KTRG8N9J/thread.md b/.yoi/tickets/00001KTRG8N9J/thread.md new file mode 100644 index 00000000..b57b341a --- /dev/null +++ b/.yoi/tickets/00001KTRG8N9J/thread.md @@ -0,0 +1,106 @@ + + +## 作成 + +LocalTicketBackend によって作成されました。 + +--- + + + +## Plan + +## Intake refinement + +Readiness: `implementation_ready`。 + +既存 Ticket `00001KTRG8N9J` の body/thread/artifacts を確認した。artifacts は `.gitkeep` のみで、thread は作成イベントのみ。新規 duplicate Ticket は作成しない。 + +関連確認: +- closed `00001KTR6D3C5`: Lua Profile の global `yoi` API と `yoi.profile.import/extend` は実装済み。この Ticket はその follow-up として成立している。 +- closed `00001KTR6YVDB`: LLM-facing Ticket role launch prompt prose は `resources/prompts` 側へ移行済み。Profile に prompt / workflow 文言を埋め込まない非目標と整合している。 +- closed `00001KTNQK1V8`: role profile の feature/tool policy は明示 feature flags として整理済み。現在の `.yoi/profiles/*.lua` から builtin role profiles へ移す対象が明確。 +- closed `00001KTG16J8S` / `00001KTG16J8R`: Ticket role launch config は明示 concrete profile selector を要求する方針で、`.yoi/ticket.config.toml` の `project:*` selector を `builtin:*` selector へ移行する要件と整合している。 + +現在の workspace 状態として、`.yoi/ticket.config.toml` は `project:intake` / `project:orchestrator` / `project:coder` / `project:reviewer` を参照し、`.yoi/profiles.toml` と `.yoi/profiles/*.lua` が role profiles を定義している。`resources/profiles/default.lua` は global `yoi` style で、builtin role profiles の base として使える前提がある。 + +Blocking open questions: なし。 + +Implementation latitude: +- `.yoi/profiles.toml` / `.yoi/profiles/*.lua` を削除するか、builtin override sample として残すかは実装時に判断してよい。ただし残す場合は project override としての意味を明確にし、実装報告に理由を残す。 +- exact な test 配置は実装時に選んでよいが、builtin registry/resolver と Ticket role launcher/config の回帰を両方カバーすること。 + +Risk flags / reviewer focus: `profile-manifest`, `runtime-resource`, `authority-boundary`, `tool-surface`, `role-launch-config`, `prompt-boundary`, `packaging-resource`。 + +Escalation conditions: +- builtin role profile に resolved Manifest、runtime-bound field、concrete delegated scope/path、Pod/session 固有情報を入れる必要が出た場合。 +- role workflow / LLM-facing prompt 文言を Profile へ移す必要が出た場合。 +- `project:*` override semantics や existing registry selector semantics を壊す必要が出た場合。 +- role profiles の tool/feature policy を現行より広く grant する必要が出た場合。 + +Validation focus: +- `builtin:companion` / `builtin:intake` / `builtin:orchestrator` / `builtin:coder` / `builtin:reviewer` が resolver で解決できること。 +- `.yoi/ticket.config.toml` の role selectors が builtin selectors になり、Ticket role launcher が起動計画を作れること。 +- manifest crate の profile tests と、必要なら client Ticket role tests を更新すること。 +- runtime resource / packaging に触れるため、完了前に `nix build .#yoi` まで確認すること。 + +--- + + + +## Intake summary + +既存 Ticket の body/thread/artifacts と関連 closed Tickets、現在の `.yoi/ticket.config.toml` / `.yoi/profiles*` / `resources/profiles/default.lua` を確認した。新規 duplicate は作成しない。Ticket は Project role profiles を builtin profiles へ移行する concrete work item として実装可能で、blocking open questions はない。risk flags / reviewer focus は `profile-manifest`, `runtime-resource`, `authority-boundary`, `tool-surface`, `role-launch-config`, `prompt-boundary`, `packaging-resource`。実装時は builtin selector 解決、role launcher/config、現行 feature/tool policy 維持、project-local profile 残存理由、`nix build .#yoi` まで確認する。 + +--- + + + +## State changed + +Intake refinement により要件・受け入れ条件・invariants・implementation latitude・validation focus が揃ったため、Orchestrator が routing できる状態として ready にする。 + +--- + + + +## Decision + +## Decision: builtin role profile と project-specific parameter の分離 + +`00001KTRG8N9J` の実装方針として、builtin role profiles へ移す対象は **role-level feature/tool policy と reusable Profile defaults** に限定する。現行 project-local profiles をそのまま完全コピーして builtin 化するのではなく、Yoi の role contract / safety boundary と、この workspace 固有の dogfooding parameter を分離する。 + +Builtin 化してよいもの: +- role ごとの tool surface / feature policy。 + - Intake: Ticket 基本操作あり、Pods / ticket orchestration / Task なし。 + - Orchestrator: Ticket lifecycle / ticket orchestration / Pods を持てる。 + - Coder: 実装用 profile として、実際の権限は launch 側の委譲 scope に従う。 + - Reviewer: review 用で、orchestration / broad lifecycle 操作は持たない。 + - Companion: 相談・状況把握用で、実装・orchestration 権限を持たない。 +- role が持つべき抽象 scope の姿勢。ただし concrete path、Pod 名、session state、resolved Manifest、runtime-bound field は含めない。 +- `builtin:default` から継承できる Yoi の標準運用値。 +- role の `slug` / description / feature flags。 +- global `yoi` style の Profile authoring。LLM-facing prompt prose や workflow 本体は Profile に入れない。 + +Project/user config 側に残すべきもの: +- `ticket.language` や worker language など、この repository の運用言語設定。 +- exact model/provider pin。例: `codex-oauth/gpt-5.5` は dogfooding 運用値であり、role contract そのものではない。 +- web provider / secret ref。例: Brave provider や `api_key_secret` は環境依存。 +- Ticket backend root、Ticket language、workflow mapping、project-specific workflow override。 +- 公開前 dogfooding のための一時的な高 reasoning / 特定 model などの project-local override。 + +実装上の期待: +- builtin role profiles は「この repository 専用の完成済み Profile」ではなく、`builtin:default` を base にした role policy preset として扱う。 +- `.yoi/ticket.config.toml` の role selector は `builtin:intake` などへ移行してよいが、project 固有の language/backend/workflow 設定は config 側に残す。 +- project-local profiles を削除するか薄い override として残すかは実装時に判断してよい。ただし残す場合は、builtin role contract ではなく project override である理由を実装報告に残す。 + +--- + + + +## State changed + +Ticket を `workspace-panel` が queued にしました。 + + +---