---
title: 'Project role profilesをbuiltin profilesへ移行する'
state: 'closed'
created_at: '2026-06-10T10:11:51Z'
updated_at: '2026-06-11T00:05:19Z'
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 に持たせること。
