ticket: use base32 project record ids
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
---
|
||||
title: "Scaffold explicit Ticket role profiles in init config"
|
||||
state: "closed"
|
||||
created_at: "2026-06-07T03:14:39Z"
|
||||
updated_at: "2026-06-07T04:05:15Z"
|
||||
---
|
||||
|
||||
## Background
|
||||
|
||||
Fallback audit found that `.yoi/ticket.config.toml` can currently contain only backend settings. In that case Ticket config parsing succeeds, but fixed Ticket role profiles fall back to `inherit`, which top-level Panel/CLI Ticket role launch rejects. This causes Panel Intake / Orchestrator launch failures such as:
|
||||
|
||||
```text
|
||||
Ticket role profile 'inherit' cannot be used for top-level launch execution; configure a concrete role profile selector
|
||||
```
|
||||
|
||||
The desired policy is to distinguish explicit builtin preset selection from implicit runtime fallback. It is acceptable for init/scaffold to generate a working config that explicitly names builtin presets. It is not acceptable for runtime to silently fill missing role config with builtin/default/inherit.
|
||||
|
||||
## Goal
|
||||
|
||||
Make project init/scaffold generate a complete, explicit Ticket role configuration suitable for Panel Intake and Orchestrator launch.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Locate or introduce the init/scaffold path that creates `.yoi/ticket.config.toml` for a workspace.
|
||||
- Generate explicit backend config:
|
||||
- `[backend] provider = "builtin:yoi_local"`
|
||||
- `root = ".yoi/tickets"`
|
||||
- Generate explicit fixed role tables for at least:
|
||||
- `[roles.intake]`
|
||||
- `[roles.orchestrator]`
|
||||
- `[roles.coder]`
|
||||
- `[roles.reviewer]`
|
||||
- `[roles.investigator]`
|
||||
- Each role table must include a concrete `profile`, not `inherit`.
|
||||
- Minimal initial implementation may explicitly use `builtin:default` if role-specific builtin profiles are not ready yet.
|
||||
- If role-specific builtin profiles are introduced, use explicit selectors such as `builtin:ticket-intake`, `builtin:ticket-orchestrator`, etc.
|
||||
- Each role table should include explicit `workflow` for readability and reproducibility:
|
||||
- intake: `ticket-intake-workflow`
|
||||
- orchestrator: `ticket-orchestrator-routing`
|
||||
- coder/reviewer: `multi-agent-workflow` or the agreed workflow for those roles
|
||||
- investigator: the agreed read/investigation workflow
|
||||
- Generated config must pass Ticket role launch validation for Panel Intake and workspace Orchestrator.
|
||||
- Do not implement runtime fallback from missing role profiles to builtin presets in this ticket.
|
||||
|
||||
## Non-goals
|
||||
|
||||
- Making builtin role profiles an implicit runtime fallback.
|
||||
- Allowing `inherit` for top-level Ticket role launch.
|
||||
- Redesigning provider/model fallback policy.
|
||||
- Implementing full Companion lifecycle.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- A newly initialized workspace has explicit concrete Ticket role profiles in `.yoi/ticket.config.toml`.
|
||||
- Panel Intake launch planning does not fail because generated role profile is `inherit` or missing.
|
||||
- Workspace Orchestrator launch planning does not fail because generated role profile is `inherit` or missing.
|
||||
- Tests cover generated config shape and successful role-launch validation against the scaffolded config.
|
||||
@@ -0,0 +1,26 @@
|
||||
Implemented, reviewed, merged, validated, and applied to this workspace config.
|
||||
|
||||
Summary:
|
||||
- Added a narrow `yoi ticket init` command.
|
||||
- The command creates `.yoi/ticket.config.toml` only when missing and refuses to overwrite an existing config with an actionable diagnostic.
|
||||
- Added `ticket_config_scaffold()` for the generated config body.
|
||||
- Generated config includes explicit backend config and fixed role tables for intake, orchestrator, coder, reviewer, and investigator.
|
||||
- Each generated role uses explicit `profile = "builtin:default"` and explicit default workflow.
|
||||
- No runtime fallback was added or loosened.
|
||||
- The generated config validates for Ticket role launch planning under the strict validation implemented by `ticket-role-launch-config-strict-validation`.
|
||||
- This repository's `.yoi/ticket.config.toml` was updated to the scaffolded explicit role-profile shape for dogfooding.
|
||||
|
||||
Implementation:
|
||||
- Child commit: `f265098 ticket: add ticket config init scaffold`
|
||||
- Merge commit: `merge: ticket init scaffold`
|
||||
|
||||
Review:
|
||||
- External reviewer `ticket-init-scaffold-reviewer-20260607` approved with no blockers.
|
||||
|
||||
Validation after merge:
|
||||
- `cargo test -p ticket config --lib`
|
||||
- `cargo test -p client ticket_role --lib`
|
||||
- `cargo test -p yoi ticket`
|
||||
- `cargo fmt --check`
|
||||
- `git diff --check`
|
||||
- `target/debug/yoi ticket doctor`
|
||||
@@ -0,0 +1,202 @@
|
||||
<!-- event: create author: LocalTicketBackend at: 2026-06-07T03:14:39Z -->
|
||||
|
||||
## Created
|
||||
|
||||
Created by LocalTicketBackend create.
|
||||
|
||||
---
|
||||
|
||||
<!-- event: plan author: hare at: 2026-06-07T03:43:33Z -->
|
||||
|
||||
## Plan
|
||||
|
||||
## Preflight / implementation intent
|
||||
|
||||
Classification: implementation-ready after `ticket-role-launch-config-strict-validation` landed.
|
||||
|
||||
Intent:
|
||||
- Add a Ticket-focused scaffold/init path that writes an explicit `.yoi/ticket.config.toml` with concrete fixed role profiles.
|
||||
- This is explicit config generation, not runtime fallback. The generated file may choose builtin presets, but the runtime must continue requiring explicit role config.
|
||||
|
||||
Current state:
|
||||
- There is no top-level `yoi init` command in `crates/yoi/src/main.rs`.
|
||||
- `yoi ticket` currently has no `init` command.
|
||||
- `yoi ticket` already documents fallback backend behavior when config is absent, but role launch validation now requires explicit role config for Panel Intake/Orchestrator launches.
|
||||
|
||||
Implementation direction:
|
||||
- Introduce a narrow `yoi ticket init` scaffold command rather than a broad product-level init redesign.
|
||||
- The command should create `.yoi/ticket.config.toml` if missing, and optionally ensure the local Ticket root `.yoi/tickets` exists.
|
||||
- Default generated config should explicitly include:
|
||||
- `[backend] provider = "builtin:yoi_local"`, `root = ".yoi/tickets"`;
|
||||
- fixed `[roles.*]` tables for intake, orchestrator, coder, reviewer, investigator;
|
||||
- each role has a concrete `profile`, initially `builtin:default` unless role-specific builtin profiles are introduced in the same small diff;
|
||||
- each role has explicit `workflow` matching the role defaults.
|
||||
- Do not overwrite an existing `.yoi/ticket.config.toml` unless an explicit force flag is intentionally added and tested. A minimal first pass can fail with an actionable diagnostic when the config already exists.
|
||||
- Generated config should pass the strict role launch validation added by the previous ticket.
|
||||
|
||||
Suggested command shape:
|
||||
- `yoi ticket init`
|
||||
- Optional flags only if small and useful:
|
||||
- `--force` is not required for first pass;
|
||||
- `--print`/dry-run is not required for first pass.
|
||||
|
||||
Code map:
|
||||
- `crates/yoi/src/ticket_cli.rs`: add parse/run/help for `init` and tests.
|
||||
- `crates/ticket/src/config.rs`: add reusable scaffold string/helper if that keeps config generation testable near config types.
|
||||
- `crates/client/src/ticket_role.rs`: use existing launch validation tests to verify generated config is launch-ready.
|
||||
- `.yoi/ticket.config.toml`: update this repository's config through the new intended shape or keep repository config update in main workspace if child worktree excludes `.yoi`; the implementation should at least make the scaffold generate that shape.
|
||||
|
||||
Non-goals:
|
||||
- Do not loosen runtime validation.
|
||||
- Do not add implicit builtin/default fallback.
|
||||
- Do not implement broad global `yoi init` unless the existing CLI structure makes it clearly smaller than `yoi ticket init`.
|
||||
- Do not design role-specific builtin profiles unless it is trivial and scoped; `builtin:default` as explicit scaffold output is acceptable for now.
|
||||
|
||||
Validation:
|
||||
- Tests should cover generated config shape, refusal to overwrite existing config, and successful role launch validation against generated config.
|
||||
- Run focused `cargo test -p ticket config --lib`, `cargo test -p client ticket_role --lib`, and `cargo test -p yoi ticket` or equivalent ticket CLI tests.
|
||||
- Run `cargo fmt --check` and `git diff --check`.
|
||||
|
||||
---
|
||||
|
||||
<!-- event: intake_summary author: INSOMNIA at: 2026-06-07T03:43:38Z -->
|
||||
|
||||
## Intake summary
|
||||
|
||||
Implementation-ready after strict role launch validation: add a narrow `yoi ticket init` scaffold path that writes explicit backend and fixed role profile config to `.yoi/ticket.config.toml`, using concrete selectors such as explicit `builtin:default` for now, without adding runtime fallback.
|
||||
|
||||
---
|
||||
|
||||
<!-- event: state_changed author: INSOMNIA at: 2026-06-07T03:43:38Z from: intake to: ready reason: intake_ready field: workflow_state -->
|
||||
|
||||
## State changed
|
||||
|
||||
Ticket intake complete; workflow_state intake -> ready.
|
||||
|
||||
|
||||
---
|
||||
|
||||
<!-- event: implementation_report author: hare at: 2026-06-07T03:44:16Z -->
|
||||
|
||||
## Implementation report
|
||||
|
||||
## Delegation
|
||||
|
||||
Implementation delegated to child Pod `ticket-init-scaffold-coder-20260607` in worktree `.worktree/ticket-init-role-profile-scaffold` on branch `work/ticket-init-role-profile-scaffold`.
|
||||
|
||||
Scope:
|
||||
- Add a narrow `yoi ticket init` scaffold command.
|
||||
- Generate explicit backend and fixed role profile/workflow config in `.yoi/ticket.config.toml`.
|
||||
- Use concrete role profiles in the generated config; explicit `builtin:default` is acceptable for the first pass.
|
||||
- Do not loosen strict role launch validation or add runtime fallback.
|
||||
- Do not overwrite existing config in the first pass.
|
||||
|
||||
The child should commit implementation work in the child worktree and report diff/tests. Merge, review, Ticket closure, and cleanup remain with the parent/human workflow.
|
||||
|
||||
---
|
||||
|
||||
<!-- event: implementation_report author: hare at: 2026-06-07T03:58:12Z -->
|
||||
|
||||
## Implementation report
|
||||
|
||||
## Implementation report
|
||||
|
||||
Coder Pod `ticket-init-scaffold-coder-20260607` completed implementation in `.worktree/ticket-init-role-profile-scaffold`.
|
||||
|
||||
Commit:
|
||||
- `f265098 ticket: add ticket config init scaffold`
|
||||
|
||||
Reported summary:
|
||||
- Added narrow `yoi ticket init`.
|
||||
- It creates `.yoi/ticket.config.toml` only when missing and ensures `.yoi/tickets` exists.
|
||||
- Existing `.yoi/ticket.config.toml` is not overwritten and fails with an actionable diagnostic.
|
||||
- Added reusable `ticket_config_scaffold()` in `crates/ticket/src/config.rs`.
|
||||
- Generated config includes backend provider/root plus fixed roles intake/orchestrator/coder/reviewer/investigator.
|
||||
- Each generated role uses explicit `profile = "builtin:default"` and explicit default `workflow`.
|
||||
- Added tests for config shape, CLI init/no-overwrite behavior, CLI help, and launch planning for Intake/Orchestrator from the scaffold.
|
||||
|
||||
Reported validation:
|
||||
- `cargo test -p ticket config --lib`
|
||||
- `cargo test -p client ticket_role --lib`
|
||||
- `cargo test -p yoi ticket`
|
||||
- `cargo fmt --check`
|
||||
- `git diff --check`
|
||||
- `nix build .#yoi`
|
||||
|
||||
External review will be delegated before merge.
|
||||
|
||||
---
|
||||
|
||||
<!-- event: review author: ticket-init-scaffold-reviewer-20260607 at: 2026-06-07T04:04:17Z status: approve -->
|
||||
|
||||
## Review: approve
|
||||
|
||||
Approved.
|
||||
|
||||
Evidence:
|
||||
- Runtime fallback was not loosened. Strict role launch validation still requires configured role table/profile and rejects top-level `inherit` before launch.
|
||||
- `ticket_config_scaffold()` writes explicit backend config and all fixed role tables: intake, orchestrator, coder, reviewer, investigator.
|
||||
- Each generated role has explicit `profile = "builtin:default"` and explicit default `workflow`.
|
||||
- Launch validation coverage plans both Intake and Orchestrator from the scaffolded config.
|
||||
- `yoi ticket init` refuses to overwrite existing `.yoi/ticket.config.toml`, uses create-new behavior, and reports an actionable diagnostic.
|
||||
- Command shape is scoped to `yoi ticket init`; no broad product init or runtime implicit fallback was introduced.
|
||||
|
||||
Reviewer validation:
|
||||
- `cargo test -p ticket config --lib`
|
||||
- `cargo test -p client ticket_role --lib`
|
||||
- `cargo test -p yoi ticket`
|
||||
- `cargo fmt --check`
|
||||
- `git diff --check develop...HEAD`
|
||||
- `nix build --no-link .#yoi`
|
||||
|
||||
Merge readiness:
|
||||
- Branch is behind current `develop` only by Ticket metadata changes.
|
||||
- Implementation changes are limited to `crates/client/src/ticket_role.rs`, `crates/ticket/src/config.rs`, and `crates/yoi/src/ticket_cli.rs`.
|
||||
- `git merge-tree` showed no conflicts.
|
||||
|
||||
Dogfooding note:
|
||||
- The main workspace's existing `.yoi/ticket.config.toml` remains backend-only, so a separate main-workspace config update is needed after merge if this workspace should use explicit Ticket role profiles.
|
||||
|
||||
---
|
||||
|
||||
<!-- event: state_changed author: hare at: 2026-06-07T04:05:15Z from: ready to: done reason: closed field: workflow_state -->
|
||||
|
||||
## State changed
|
||||
|
||||
Ticket closed; workflow_state set to done.
|
||||
|
||||
|
||||
---
|
||||
|
||||
<!-- event: close author: hare at: 2026-06-07T04:05:15Z status: closed -->
|
||||
|
||||
## Closed
|
||||
|
||||
Implemented, reviewed, merged, validated, and applied to this workspace config.
|
||||
|
||||
Summary:
|
||||
- Added a narrow `yoi ticket init` command.
|
||||
- The command creates `.yoi/ticket.config.toml` only when missing and refuses to overwrite an existing config with an actionable diagnostic.
|
||||
- Added `ticket_config_scaffold()` for the generated config body.
|
||||
- Generated config includes explicit backend config and fixed role tables for intake, orchestrator, coder, reviewer, and investigator.
|
||||
- Each generated role uses explicit `profile = "builtin:default"` and explicit default workflow.
|
||||
- No runtime fallback was added or loosened.
|
||||
- The generated config validates for Ticket role launch planning under the strict validation implemented by `ticket-role-launch-config-strict-validation`.
|
||||
- This repository's `.yoi/ticket.config.toml` was updated to the scaffolded explicit role-profile shape for dogfooding.
|
||||
|
||||
Implementation:
|
||||
- Child commit: `f265098 ticket: add ticket config init scaffold`
|
||||
- Merge commit: `merge: ticket init scaffold`
|
||||
|
||||
Review:
|
||||
- External reviewer `ticket-init-scaffold-reviewer-20260607` approved with no blockers.
|
||||
|
||||
Validation after merge:
|
||||
- `cargo test -p ticket config --lib`
|
||||
- `cargo test -p client ticket_role --lib`
|
||||
- `cargo test -p yoi ticket`
|
||||
- `cargo fmt --check`
|
||||
- `git diff --check`
|
||||
- `target/debug/yoi ticket doctor`
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user