From b43e6e8d72dec95cbf8813c5f9ce30c96ac7f78e Mon Sep 17 00:00:00 2001 From: Hare Date: Tue, 9 Jun 2026 21:42:49 +0900 Subject: [PATCH] ticket: approve profile feature flags --- .yoi/tickets/20260609-082209-001/item.md | 2 +- .yoi/tickets/20260609-082209-001/thread.md | 30 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/.yoi/tickets/20260609-082209-001/item.md b/.yoi/tickets/20260609-082209-001/item.md index 4ecc42fb..667e4218 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-09T12:38:26Z' +updated_at: '2026-06-09T12:42:04Z' 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 40035e67..b6c3565a 100644 --- a/.yoi/tickets/20260609-082209-001/thread.md +++ b/.yoi/tickets/20260609-082209-001/thread.md @@ -344,3 +344,33 @@ Validation after fix: - `cargo check --workspace` --- + + + +## Review: approve + +Fourth-pass final re-review result: approve. + +Evidence: +- Prior naming finding remains fixed: user-facing feature syntax is `feature.pods` and the controller error/test/profile surfaces use `[feature.pods]`. +- Prior role-default finding remains fixed: actual project Coder/Intake/Orchestrator/Reviewer/Companion profiles set `feature.task.enabled = false`; Orchestrator enables Ticket lifecycle, Ticket orchestration, and Pods, while Coder/Reviewer/Companion do not expose Ticket/Ticket orchestration/Pods and Intake exposes basic Ticket only. +- Prior test-coverage finding is now satisfied by the combination of: + - `actual_project_role_profiles_resolve_explicit_feature_defaults`, which loads the actual project role Lua files with `include_str!`, resolves all five role profiles, and asserts Task/Ticket/Ticket-orchestration/Pods defaults; and + - `project_role_tool_surfaces_keep_task_disabled_and_pods_role_scoped`, which verifies the controller tool definition list omits Task tools and exposes Pod tools only when the resolved feature flag enables them. +- The registration path is feature-config driven (`register_pod_tools` checks `feature_config.*.enabled`) rather than role-name driven, so the actual-profile default regression plus controller surface regression covers the previous drift mode. + +Validation run in this pass: +- `cargo test -p manifest actual_project_role_profiles_resolve_explicit_feature_defaults --lib` passed. +- `cargo test -p pod project_role_tool_surfaces_keep_task_disabled_and_pods_role_scoped --test controller_test` passed. +- `cargo fmt --check` passed. +- `git diff --check` passed. +- `cargo run -q -p yoi -- ticket doctor` passed (`doctor: ok`). +- `nix build .#yoi` passed. +- `git status --short` was clean before recording this review. + +Merge readiness: approved and merge-ready from review perspective. + +Residual risks: +- The project role coverage is compositional rather than a single E2E test that launches via `project:` selectors and asserts each actual role's live tool schema. Given the current controller path uses resolved manifest feature flags directly, this is acceptable for this Ticket; an E2E selector/schema test can be added later if the role launcher path gains additional behavior. + +---