yoi/.yoi/tickets/00001KTRG8N9J/item.md

5.2 KiB

title state created_at updated_at assignee queued_by queued_at
Project role profilesをbuiltin profilesへ移行する closed 2026-06-10T10:11:51Z 2026-06-11T00:05:19Z null workspace-panel 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 yoiyoi.profile.importyoi.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 に持たせること。