37 KiB
作成
LocalTicketBackend によって作成されました。
Decision
Scope expansion: simplify core Ticket frontmatter, not only identity
Expand this Ticket beyond identity cleanup. The same simplification pass should also review and reduce the core Ticket frontmatter shape.
Unify status and workflow_state
The current split between local status and workflow_state creates an invalid two-axis state model. Combinations such as status: closed with workflow_state: inprogress are not meaningful.
Direction:
- Use one canonical lifecycle state field.
- Final name can be
stateor retained asworkflow_state, but there should not be bothstatusandworkflow_stateas independent current fields.
- Final name can be
- Treat
openas a derived range of states rather than a stored independent status.- Example:
open = planning | ready | queued | inprogress | done. - Terminal closed state should be represented by the same lifecycle model, e.g.
closedor equivalent.
- Example:
- Decide whether
doneandclosedremain distinct.done: implementation/review/merge complete, close/resolution may still be pending.closed: resolution recorded and Ticket lifecycle ended.
- Revisit or remove the
pendingbucket/status. If a concept is still needed, define it as a lifecycle state such asdeferred/parked, not as a second axis. - Update path layout expectations if needed.
- Directory buckets may be derived caches or UI grouping, but frontmatter should not duplicate contradictory state.
Remove kind
kind currently behaves like a single typed category but is a freeform string with unclear management and little semantic authority. Most Tickets are work items and can be described by their title/body.
Direction:
- Remove
kindfrom the required/current schema unless a small typed enum with clear semantics is explicitly justified. - Do not keep required freeform
kind. - If the title follows a convention such as
area: verb object, it already communicates the work class better than an unconstrainedkind: taskfield.
Remove labels
labels are useful for search, but without a registry/canonical vocabulary they create inconsistent taxonomy and can be confused with state, relation, risk, component, or priority.
Direction:
- Remove
labelsfrom the core required/current schema in this simplification pass. - Do not use labels to represent state, dependency, blockers, risk, priority, or ownership.
- If tag-like search is needed later, add it as a separate feature with a project-managed registry/canonicalization model.
- Prefer descriptive titles and body content for search. A title convention such as
component: concise actioncan carry much of the useful categorization without an unmanaged labels field.
Resulting target direction
The target core Ticket identity/frontmatter may be as small as:
id: 20260608-103842 # or path-derived primary key
title: component: concise action
state: planning
created_at: ...
updated_at: ...
Additional fields should justify a concrete behavior. Search/display hints without management authority should be removed or moved to separately designed features.
Plan
Intake assessment: requirements sync needed
この Ticket は既存 identity simplification に加えて、status / workflow_state / kind / labels を含む core Ticket frontmatter simplification へ scope が拡張されている。方向性は明確だが、実装前に schema/API/UX と移行方針として固定すべき判断が残っているため、現時点では workflow_state: planning のまま requirements sync が必要。
既に決まっていること
- canonical Ticket identity は title-derived slug words を含めない timestamp/counter primary key へ寄せる。
slugは required/current frontmatter および canonical lookup key から外す。- agents / Orchestrator は ID/title だけから意味を推測せず、routing/実装前に
TicketShowの body/thread/artifacts を読む。 - core frontmatter simplification は identity だけでなく lifecycle/kind/labels も対象に含める。
kindは required freeform field として残さない方向。labelsは unmanaged taxonomy として core required/current schema から外す方向。
実装前に固定すべき open questions
- lifecycle field の最終名を
stateに変更するか、既存名workflow_stateを保持して single lifecycle field にするか。 doneとclosedを distinct lifecycle states として残すか、close/resolution の表現をどう統合するか。pendingbucket/status を完全に廃止するか、deferred/parkedなどの lifecycle state として置き換えるか。- canonical ID を frontmatter に
idとして保持するか、directory name から derive するか。 - legacy slug/path lookup を migration-only としてどこまで読むか。unreleased local data として一括 migration し、current schema では permanent alias を作らない方針でよいか。
kind/labelsremoval をこの Ticket の実装 scope に含めて同時 migration するか、identity/lifecycle の破壊的変更と分けるか。
Risk flags / reviewer focus
ticket-schemastorage-migrationworkflow-statepanel-actionsorchestrator-routingbackward-compatibilitytyped-tool-api
Reviewer は diff だけでなく、CLI / typed Ticket tools / Panel / Orchestrator routing / local role-session claims / future relation metadata が、slug や two-axis state を authority として残していないことを確認する必要がある。
次の Intake action
上記 open questions に user/maintainer decision が入れば、Ticket を implementation_ready として ready にできる。未回答のまま進める場合は、先に design/spike として routing し、実装 Ticket とは分けるのが安全。
Decision
User decision: target Ticket schema and storage shape
User/maintainer decision for this Ticket:
- Lifecycle field は
stateに統一する。statusとworkflow_stateの二軸 current state は廃止する。 doneとclosedは一旦 distinct states として分離したままにする。done: 実装・review・merge 等は完了しているが、resolution/close 処理前の状態。closed: resolution が記録され、Ticket lifecycle が終了した状態。
pendingは不要。pending bucket/status は current model から削除する。- filesystem layout は状態 bucket を持たず、すべて平坦に
.yoi/tickets/<ticket-id>/に置く。- open/pending/closed directory bucket は authority ではなくなり、current layout からも外す。
- canonical Ticket ID は directory name から derive し、frontmatter には
idを重複保存しない。 kind/labels等の core frontmatter 削除もこの Ticket の scope に含める。
Updated target direction
Current frontmatter は少なくとも以下へ縮小する方向で実装する。
title: component: concise action
state: planning
created_at: ...
updated_at: ...
Canonical identity は .yoi/tickets/<ticket-id>/ の <ticket-id>。slug、frontmatter id、directory bucket、freeform kind、unmanaged labels は current schema authority から外す。
Implementation latitude
- Timestamp/counter ID の exact format、collision suffix、高解像度 timestamp のどれを使うかは、opaque ID・安定 lookup・testability を満たす範囲で実装側が選べる。
- Existing local records は新 layout/schema に migration する。unreleased local data として扱い、明示的に必要にならない限り permanent slug alias や旧 bucket layout の長期互換層は作らない。
priority、action_required、attention_required、queued_at等の周辺 field は、削除・置換・維持の判断を「具体的な現在動作を持つか」で監査し、core identity/lifecycle simplification を歪めない範囲で扱う。
Reviewer focus
Reviewer は、CLI / typed Ticket tools / Panel / role-session claims / Orchestrator guidance / relation metadata が、旧 slug、frontmatter id、status/workflow_state 二軸、open/pending/closed bucket を authority として残していないことを重点確認する。
Intake summary
Ticket schema simplification の binding decisions が揃った。Lifecycle は state に統一し、done と closed は一旦分離、pending は廃止する。Filesystem layout は .yoi/tickets/<ticket-id>/ の平坦構造にし、canonical ID は directory name から derive して frontmatter に重複保存しない。slug、frontmatter id、freeform kind、unmanaged labels、open/pending/closed bucket、status/workflow_state 二軸 state は current schema authority から外す。実装前に Orchestrator/Coder は CLI・typed tools・Panel・role-session claims・Orchestrator guidance・relation metadata の旧 identity/state 依存を監査し、local records を新 layout/schema に migrate すること。
State changed
必要な schema/lifecycle/storage layout の判断が user decision として記録されたため、Orchestrator が実装 routing できる状態になった。
State changed
Ticket を workspace-panel が queued にしました。
State changed
Accepted queued implementation after reading the Ticket body/thread, binding user decisions from Intake, current workspace state, and visible worktree/Pod state. No active implementation worktree remains. This is high-risk/broad Ticket schema/storage migration, but the required decisions are explicit enough to proceed with strict implementation invariants, migration evidence, and reviewer focus rather than returning to planning.
Decision
Routing decision: implementation_ready
Evidence checked:
- Ticket body, expanded scope decision, Intake assessment, user binding decision, Intake summary, and queued event.
- Current workspace state: clean after committing queued event.
- Worktree list: only main workspace, no active implementation worktree.
- Visible Pods: no active sibling coder/reviewer from previous work remains.
Reason:
- This is a broad and high-risk schema/storage migration, but the Ticket now contains explicit binding decisions for identity, lifecycle, path layout, and core frontmatter simplification.
- Returning to planning would need a concrete missing decision; after reading the Ticket/thread, the main open questions have user decisions.
- Proceed with a strict audit-first implementation and reviewer focus.
IntentPacket:
Intent:
- Simplify current Ticket identity/storage/frontmatter around path-derived opaque timestamp/counter IDs, a single lifecycle
state, and minimal current frontmatter, while migrating local Ticket records and updating all current Ticket surfaces.
Binding decisions / invariants:
- Canonical Ticket identity is the directory name under flat
.yoi/tickets/<ticket-id>/. - The canonical ID must be opaque timestamp/counter style and must not include title/slug words.
- Frontmatter must not duplicate canonical identity as current
id. slugis not a required/current field and is not a canonical lookup key.statusandworkflow_statemust not remain independent current state axes; use one canonical lifecycle field namedstate.doneandclosedremain distinct states for now:done: implementation/review/merge complete but resolution/close handling not yet final;closed: resolution recorded and Ticket lifecycle ended.
pendingbucket/status is removed from the current model.- Current filesystem layout is flat
.yoi/tickets/<ticket-id>/, not.yoi/tickets/{open,pending,closed}/.... kindand unmanagedlabelsare removed from current required/core frontmatter.- New Ticket records should use minimal current frontmatter, approximately
title,state,created_at,updated_atplus only fields with concrete current behavior that survive audit. - Existing local
.yoi/ticketsrecords must be migrated to the new layout/schema. - Permanent slug aliases / long-term old bucket compatibility should not be added unless a concrete current requirement is discovered; this is unreleased local data.
- Exact canonical ID lookup remains; title/search UX may be list/search-oriented but must not make slug canonical.
- Panel actions, role/session claims, tool/API outputs, Ticket doctor, CLI, Orchestrator guidance, and future relation/orchestration-plan references must use canonical IDs, not slug/path-derived title words.
- Agents/Orchestrator guidance must reinforce reading
TicketShowbody/thread/artifacts before routing/implementation; do not infer requirements from ID/title alone. - Do not implement full typed Ticket relation metadata here.
- Do not remove
title. - Do not change Pod protocol/history/session semantics except where Ticket storage references are legitimately updated.
Implementation latitude:
- Coder may choose timestamp collision strategy (counter suffix or higher-resolution timestamp) if deterministic/testable and ID remains opaque.
- Coder may keep tightly scoped migration-only parser/lookup helpers if needed to read old local records during migration, but current writers/tools/docs must emit/use the new schema/layout.
- Coder may split implementation internally into commits if useful, but should report a coherent final branch state.
- Coder should stop and report if the change proves too large to keep the repository buildable or if a hidden external compatibility requirement requires long-term legacy aliases.
Reviewer focus:
- Verify there is no old authoritative dependency on slug, frontmatter id, open/pending/closed buckets, status/workflow_state two-axis state, freeform kind, or unmanaged labels in current CLI/tools/panel/backend/claims/docs.
- Verify local record migration is complete and
ticket doctorvalidates the new flat layout/schema. - Verify exact lookup and user-facing display remain usable with
id + title. - Verify close/resolution semantics distinguish
donevsclosedas decided. - Verify legacy compatibility is migration-only and does not reintroduce permanent slug authority.
Escalate if:
- Implementation requires a broad backward-compatibility layer for old slug/bucket layouts.
- The change cannot keep the repo in a buildable state while migrating records.
- Existing code depends on old directory buckets in a way that requires a larger storage-provider redesign.
- Tool schema changes would require external plugin/capability redesign beyond Ticket built-in tools.
Validation:
- Focused Ticket backend/parser/writer/doctor/create/list/show/query tests for flat layout, path-derived ID,
state, collision handling, and migrated records. - Focused tool schema/output tests for TicketCreate/List/Show/WorkflowState/Close/Status-equivalent behavior.
- Focused panel/role-session/orchestrator guidance tests where surfaces changed.
cargo fmt --check.git diff --check.cargo run -q -p yoi -- ticket doctoror the new equivalent if command behavior changes.cargo check --workspace.nix build .#yoi.
Implementation report
Implementation routing started.
Worktree/branch:
- Worktree:
.worktree/simplify-ticket-identity-fields - Branch:
simplify-ticket-identity-fields - Base/routing commit:
48efcc7 ticket: route identity simplification
Spawned sibling Coder Pod:
coder-simplify-ticket-identity-fields- Scope: non-recursive read on parent workspace root plus recursive write limited to the child worktree.
Routing context:
- The workspace was clean and no active implementation worktree existed before acceptance.
- This is a broad/high-risk schema/storage migration, so the handoff emphasizes audit-first implementation, complete local Ticket record migration, buildable coherent stopping points, and escalation if permanent legacy compatibility or a larger storage-provider redesign is discovered.
Decision
Human completion-boundary decision for this Ticket:
For simplify-ticket-identity-fields, stop at the merge-complete boundary.
Reason:
- The branch migrates local Ticket records from the old bucket layout to the new flat identity/state schema.
- At merge time, the repository data layout changes, while the currently running Orchestrator/Ticket tools may still be the pre-merge binary/schema.
Operational rule:
- Continue coder fix-loop and reviewer workflow normally.
- If reviewer approves and post-review checks are clean, merge the branch.
- After the merge commit and immediate validation/build as appropriate, stop and report.
- Do not close the Ticket, delete the worktree/branch, or continue queued routing until the runtime/tooling has been deliberately refreshed or the user gives explicit follow-up instructions for post-migration completion.
This Ticket intentionally overrides the broader standing instruction to auto-close/cleanup reviewer-approved work, because the migration changes the Ticket storage schema used by those completion tools.
Implementation report
Coder fix-loop completed and is ready for sibling review.
Coder Pod:
coder-simplify-ticket-identity-fields- Implementation commit:
191a875 ticket: simplify ticket identity fields - Fix-loop commit:
591db3f test: update ticket schema expectations - Worktree status before review: clean branch
simplify-ticket-identity-fields - Stopped after collecting output to reclaim delegated worktree scope.
Fix-loop summary:
- Updated Ticket crate tests from stale bucket/status/workflow_state/slug expectations to the new flat layout, canonical ID, and
stateschema. - Updated close tests to distinguish
donevsclosedand assertstate: closedplusresolution.md. - Updated doctor/tool tests for legacy bucket detection, obsolete frontmatter field detection, invalid
state, canonical ID lookup,statefilters, and orchestration-plan canonical-ID references. - No unresolved design conflict was reported.
Coder validation reported passed:
cargo test -p ticket-> 59 passed, 0 failedcargo fmt --checkgit diff --checkcargo run -q -p yoi -- ticket doctor->doctor: okcargo check --workspacenix build .#yoi
Completion boundary reminder:
- Per human instruction, if review approves and the branch merges cleanly, stop at merge-complete/validation boundary. Do not close this Ticket or clean up the worktree/branch until runtime/tooling is refreshed or explicit follow-up is given, because the merge changes the Ticket storage schema/layout.
Review: request changes
Review result: request_changes
The core direction is aligned, but current authoritative surfaces still expose old status / pending / slug / bucket-model behavior, and focused CLI/panel tests fail.
Blocking issues:
-
Ticket tool/backend surface still exposes
TicketStatus/pending.crates/ticket/src/tool.rsstill registersTicketStatusas a mutating tool.TicketStatusParam::{Open, Pending}andTicketStatusToolstill accept/return pending-style state.crates/ticket/src/lib.rsstill hasset_status()mapping oldTicketStatus::Pendinginto planning.- This violates the invariant that pending bucket/status is removed and
stateis canonical.
-
Panel/TUI still has pending/status dependencies.
crates/tui/src/workspace_panel.rsderive_ticket_state()still treatsTicketStatus::Pendingspecially for Defer.cargo test -p tui ticket_action --no-runfails with stale references (TicketStatus,workflow_state_field, oldTicketPanelEntryfields, pending defer action test).
-
CLI unit tests still assert old slug/status/bucket behavior.
cargo test -p yoi ticket_clifails: 5 passed, 3 failed.- Failing tests still pass
--slugand panic onunknown create argument: --slug.
-
AGENTS.mdstill presents old commands/layout as authoritative guidance.- Mentions
--slug,--kind,--label,--status,open|pending|closed,id-or-slug,.yoi/tickets/{open,pending,closed}/<id>/, and close moving toclosed/.
- Mentions
Positive evidence:
- Flat
.yoi/tickets/<ticket-id>/layout is present. cargo run -q -p yoi -- ticket doctorpasses withdoctor: ok.ticket list --state alland exact ID show work.- Old slug lookup fails as expected.
cargo test -p ticket,cargo fmt --check,git diff --check,cargo check --workspace, andnix build .#yoipassed.
Required fix direction:
- Remove or explicitly retire
TicketStatus/pendingfrom current Ticket tools/backend mutation surface, or make retained compatibility non-current and not user/tool-visible. - Update panel/current action model to use canonical
stateonly, with no pending/defer status path. - Update
cargo test -p yoi ticket_clitests to new CLI behavior:create --title,list --state,state <id> ..., exact ID lookup, flat path assertions. - Update TUI/panel tests to compile and assert canonical ID/state behavior.
- Update
AGENTS.mdto the new Ticket commands/layout and exact ID guidance.
Implementation report
Fix loop update: removed current TicketStatus mutating tool/backend status move path and pending status handling; updated panel/TUI action model to state-only Queue/Close/Edit/Wait/Open without Defer; refreshed yoi ticket CLI tests to canonical ID, list --state, state, and flat .yoi/tickets/<ticket-id>/ assertions; updated AGENTS.md current Ticket guidance. Validation passed locally: cargo test -p ticket, cargo test -p yoi ticket_cli, cargo test -p tui ticket_action --no-run, cargo test -p tui workspace_panel, cargo test -p tui ticket_action, cargo fmt --check, git diff --check, cargo run -q -p yoi -- ticket doctor, cargo check --workspace, and nix build .#yoi.
Implementation report
Coder fix-loop for reviewer request_changes completed and is ready for re-review.
Coder Pod:
coder-simplify-ticket-identity-fields- New fix commit:
21114fd fix: remove stale ticket status surfaces - Branch status after fix: clean
- Stopped after collecting output to reclaim delegated worktree scope.
Fix summary:
- Removed current
TicketStatusmutating tool surface and related schema registration. - Removed backend
set_status()and stale pending status mutation path. - Removed panel/TUI
Defer/ pending-status current action path and updated focused tests to canonicalstatebehavior. - Updated yoi CLI tests away from
--slug,--status, bucket paths, and old lookup expectations toward canonical IDs,list --state,state <ticket-id> ..., and flat paths. - Updated
AGENTS.mdto flat.yoi/tickets/<ticket-id>/, canonical exact ID,statelifecycle, and no slug/bucket/pending authority.
Coder validation reported passed:
cargo test -p ticketcargo test -p yoi ticket_clicargo test -p tui ticket_action --no-runcargo test -p tui workspace_panelcargo test -p tui ticket_actioncargo fmt --checkgit diff --checkcargo run -q -p yoi -- ticket doctor->doctor: okcargo check --workspacenix build .#yoi(dirty-tree warning only; build succeeded)
Coder reports no remaining risks or unresolved removal conflicts.
Review: request changes
Review result: request_changes
The requested focused validation now passes, but stale old-layout/current-guidance surfaces remain and block merge.
Blockers:
-
Built-in Ticket feature still requires old bucket layout.
crates/pod/src/feature/builtin/ticket.rsusable_backend_root()still requiresopen,pending, andcloseddirectories.- In the new flat
.yoi/tickets/<ticket-id>/layout this would cause built-in Ticket tool registration to be warning-skipped. - Tests encode the stale expectation:
make_ticket_root()creates old buckets anddoes_not_register_ticket_tools_when_root_lacks_state_dirsasserts old behavior. - Fix direction: validate the flat Ticket backend root/current marker semantics instead, and update pod feature tests accordingly. Do not reintroduce open/pending/closed buckets.
-
Workflow guidance still exposes
TicketStatus/ pending routing..yoi/workflow/ticket-intake-workflow.mdstill mentionsTicketStatusandopen / pending Ticketlookup..yoi/workflow/ticket-orchestrator-routing.mdstill mentionsTicketStatus, pending/open state cleanup,defer_pending, routing targetpending, and moving Tickets to pending.- Fix direction: update guidance to canonical
statelifecycle and remove pending/TicketStatus/defer_pending current routing target. Defer/block decisions should be expressed through planning/queued/inprogress/done/closed plus attention/planning records as appropriate, not pending status.
-
Maintained development docs still contain old pending/create guidance.
docs/development/work-items.mdstill mentionsdefer_pending,yoi ticket state <id> open|pending, and oldcreate --kind --labelstyle.- Fix direction: update to current flat layout, canonical ID,
state, and new minimal create/list/state guidance.
Validation evidence from reviewer:
- Passed:
cargo test -p yoi ticket_cli,cargo test -p tui ticket_action --no-run,cargo test -p ticket,cargo test -p tui workspace_panel,cargo test -p tui ticket_action,cargo fmt --check,git diff --check,cargo run -q -p yoi -- ticket doctor,cargo check --workspace,nix build .#yoi. - Additional
cargo test -p pod ticketpassed but with stale old-bucket expectations, confirming the remaining issue is encoded authority/guidance rather than a compile failure.
Positive evidence:
- The flat Ticket layout and canonical
statemodel are mostly implemented. TicketStatusTool/TicketStatusParamare no longer in current ticket tool registration.- Exact canonical ID lookup works.
Required before re-review:
- Fix the built-in Ticket feature root validation/tests for flat layout.
- Remove/update stale
TicketStatus/ pending /defer_pendingguidance from maintained workflow/docs. - Run at minimum:
cargo test -p pod ticket,cargo test -p ticket,cargo test -p yoi ticket_cli,cargo test -p tui ticket_action --no-run,cargo fmt --check,git diff --check,cargo run -q -p yoi -- ticket doctor,cargo check --workspace,nix build .#yoi.
Implementation report
Coder fix-loop for second reviewer request_changes completed and is ready for re-review.
Coder Pod:
coder-simplify-ticket-identity-fields- New fix commit:
8fe4b82 fix: align ticket flat-state surfaces - Branch status after fix: clean
- Stopped after collecting output to reclaim delegated worktree scope.
Fix summary:
- Updated built-in Ticket feature backend-root validation to accept flat
.yoi/tickets/<ticket-id>/root and removedopen/,pending/,closed/bucket requirements. - Updated pod feature tests so flat backend root registers Ticket tools instead of requiring old bucket dirs.
- Removed stale
TicketStatus/ pending guidance from Intake and Orchestrator workflows. - Removed
pending/defer_pendingrouting target guidance and described defer/block via attention/action-required or orchestration plan blocker/waiting-capacity records. - Updated
docs/development/work-items.mdfor flat layout, canonical opaque Ticket IDs, currentcreate/list/stateguidance, and distinctdonevsclosedclose semantics.
Coder validation reported passed:
cargo test -p pod ticketcargo test -p ticketcargo test -p yoi ticket_clicargo test -p tui ticket_action --no-runcargo test -p tui workspace_panelcargo fmt --checkgit diff --checkcargo run -q -p yoi -- ticket doctor->doctor: okcargo check --workspacenix build .#yoi
Coder reports no remaining requested surface or design conflict.
Review: request changes
Review result: request_changes
The previous three blockers were fixed, and the requested validation set passed. However, one stale old-bucket TUI test setup remains and a focused test fails.
Blocking issue:
crates/tui/src/multi_pod.rsstill contains an old bucket path in test setup:.yoi/tickets/open/done-ticket
- Focused test failure:
cargo test -p tui ticket_close_action_blocks_existing_resolution_without_moving_ticket- exits 101 because the test writes
resolution.mdunder.yoi/tickets/open/done-ticket/, but the current flat layout no longer creates that parent path.
This is a test/helper path rather than production runtime behavior, but the Ticket requires completion of the flat .yoi/tickets/<ticket-id>/ migration and no current old-bucket route. Executable tests should not encode old bucket paths.
Positive evidence:
- Built-in Ticket feature root validation no longer requires
open/,pending/,closed/buckets. - Maintained workflows/docs no longer expose
TicketStatus, pending routing, ordefer_pendingas current guidance. - Main requested validation passed:
cargo test -p pod ticket,cargo test -p ticket,cargo test -p yoi ticket_cli,cargo test -p tui ticket_action --no-run,cargo test -p tui workspace_panel,cargo fmt --check,git diff --check,cargo run -q -p yoi -- ticket doctor,cargo check --workspace,nix build .#yoi.
Required fix:
- Update the stale TUI test setup in
crates/tui/src/multi_pod.rsto the flat layout/current state schema. - Run the failing focused test:
cargo test -p tui ticket_close_action_blocks_existing_resolution_without_moving_ticket. - Re-run the relevant focused validation and core checks before re-review.
Implementation report
Third review fix-loop update: removed the remaining stale old-bucket TUI test setup in crates/tui/src/multi_pod.rs by writing resolution.md under the flat .yoi/tickets/<ticket-id>/ test fixture path. Re-scanned crates/tui/src for .yoi/tickets/open, .yoi/tickets/pending, and .yoi/tickets/closed; no matches remain. Focused pending/slug-current-authority searches only found non-Ticket pending UI/task terminology and local role-session display slug metadata, not old Ticket bucket/current-state setup.
Validation passed:
cargo test -p tui ticket_close_action_blocks_existing_resolution_without_moving_ticketcargo test -p tui ticket_action --no-runcargo test -p tui workspace_panelcargo test -p ticketcargo test -p yoi ticket_clicargo test -p pod ticketcargo fmt --checkgit diff --checkcargo run -q -p yoi -- ticket doctor(doctor: ok)cargo check --workspacenix build .#yoi(dirty-tree warning only while uncommitted)
No remaining risks identified for the requested blocker.
Implementation report
Coder fix-loop for third reviewer request_changes completed and is ready for re-review.
Coder Pod:
coder-simplify-ticket-identity-fields- New fix commit:
6ca27f3 fix: use flat ticket path in tui test - Branch status after fix: clean
- Stopped after collecting output to reclaim delegated worktree scope.
Fix summary:
- Updated
crates/tui/src/multi_pod.rstest fixtureticket_close_action_blocks_existing_resolution_without_moving_ticketfrom old.yoi/tickets/open/<ticket-id>/resolution.mdto flat.yoi/tickets/<ticket-id>/resolution.md. - Re-searched
crates/tui/srcfor.yoi/tickets/open,.yoi/tickets/pending,.yoi/tickets/closed; coder reports no matches.
Coder validation reported passed:
cargo test -p tui ticket_close_action_blocks_existing_resolution_without_moving_ticketcargo test -p tui ticket_action --no-runcargo test -p tui workspace_panelcargo test -p ticketcargo test -p yoi ticket_clicargo test -p pod ticketcargo fmt --checkgit diff --checkcargo run -q -p yoi -- ticket doctor->doctor: okcargo check --workspacenix build .#yoi
Coder reports no remaining risks.
Review: request changes
Review result: request_changes
The previous TUI flat-path blocker is fixed and all requested validation passed, but two stale current-authority/guidance surfaces remain.
Blockers:
-
.yoi/workflow/ticket-intake-workflow.mdstill asks Intake to propose old identity/core metadata:Ticket record fields proposal: title / canonical id / kind / priority / labels / body / explicit acceptance conditions.Proposed title / canonical id / priority / labels.Proposed title / canonical id / kind / priority / labels;
This conflicts with the current invariants:
- canonical ID is opaque/path-derived and should not be proposed by Intake as an external/current field;
kindand unmanagedlabelsare no longer current core frontmatter authority.
-
crates/ticket/src/lib.rsstill emits generated thread/audit text with staleworkflow_statevocabulary:planning_ready: workflow_state planning -> ready.workflow_state planning -> ready.
Frontmatter uses
state; generated current-visible audit text should saystate planning -> readyor equivalent.
Positive evidence:
- Previous TUI blocker is fixed.
crates/tui/srchas no.yoi/tickets/open|pending|closedmatches.- Current
.yoi/tickets/*/item.mdfrontmatter scan found all records usingstateand no obsoleteid,slug,kind,labels,status,workflow_state,legacy_ticket, orneeds_preflightfrontmatter. - Validation passed: targeted TUI close test,
cargo test -p pod ticket,cargo test -p ticket,cargo test -p yoi ticket_cli,cargo test -p tui ticket_action --no-run,cargo test -p tui workspace_panel,cargo fmt --check,git diff --check,cargo run -q -p yoi -- ticket doctor,cargo check --workspace,nix build .#yoi.
Required fix:
- Update Intake workflow guidance so Intake proposes title/body/acceptance/current behavioral metadata only, not canonical id/kind/labels as core fields.
- Update generated event text in
crates/ticket/src/lib.rsfromworkflow_stateto canonicalstatevocabulary. - Re-run focused validation and core checks before re-review.
Implementation report
Coder fix-loop for fourth reviewer request_changes completed and is ready for re-review.
Coder Pod:
coder-simplify-ticket-identity-fields- New fix commit:
a6326a9 fix: align ticket intake state wording - Branch status after fix: clean
- Stopped after collecting output to reclaim delegated worktree scope.
Fix summary:
- Updated
.yoi/workflow/ticket-intake-workflow.mdso Intake no longer proposes canonical ID,kind, or unmanagedlabelsas current/core fields. - Clarified that storage assigns the opaque/path-derived canonical ID.
- Reframed Intake draft/core guidance around title, priority, body/request snapshot, acceptance conditions, readiness/action/attention fields.
- Updated
crates/ticket/src/lib.rsgenerated intake-ready audit/error text fromworkflow_state ... -> readytostate ... -> ready.
Coder validation reported passed:
- Focused grep/text validation: removed old Intake proposal patterns and stale
workflow_state planning -> readygenerated vocabulary; positive check shows generated text now usesstate {from} -> ready. cargo test -p ticketcargo test -p yoi ticket_clicargo test -p tui ticket_close_action_blocks_existing_resolution_without_moving_ticketcargo test -p pod ticketcargo fmt --checkgit diff --checkcargo run -q -p yoi -- ticket doctor->doctor: okcargo check --workspacenix build .#yoi
Coder reports no remaining risks.