diff --git a/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/item.md b/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/item.md index 8238287d..3e8e03e0 100644 --- a/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/item.md +++ b/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/item.md @@ -8,7 +8,7 @@ priority: P1 labels: [ticket, yaml, parser, bug, panel] workflow_state: inprogress created_at: 2026-06-07T22:32:33Z -updated_at: 2026-06-07T22:59:45Z +updated_at: 2026-06-07T23:25:23Z assignee: null legacy_ticket: null queued_by: workspace-panel diff --git a/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/thread.md b/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/thread.md index 4158a9a7..2e268a7b 100644 --- a/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/thread.md +++ b/.yoi/tickets/open/20260607-223233-parse-ticket-frontmatter-as-yaml/thread.md @@ -203,3 +203,190 @@ Coder delegated: - Instructions: implement strict YAML-compatible Ticket item frontmatter parsing, migrate existing project Ticket records minimally, add parser and workspace panel regression tests, run focused validation plus `cargo fmt --check`, `git diff --check`, Ticket doctor, and `nix build .#yoi`, then commit locally on the child branch. No merge, close, main workspace edits, or cleanup delegated. --- + + + +## Implementation report + +Coder completed implementation: +- Pod: `coder-parse-ticket-frontmatter-as-yaml` +- Branch/worktree: `ticket/parse-ticket-frontmatter-as-yaml` at `.worktree/parse-ticket-frontmatter-as-yaml` +- Commit: `10d7844fc84683429e24671bf01dd57885a40084` (`ticket: parse item frontmatter as YAML`) +- Child worktree status: clean + +Implementation summary: +- Replaced raw Ticket `item.md` frontmatter parsing with strict YAML parsing in `crates/ticket/src/lib.rs`. +- Added typed handling for YAML nulls, sequences, booleans, quoted string values, and clear parse/type errors. +- Removed tolerant raw-string fallbacks that conflict with YAML semantics. +- Added focused parser tests and workspace panel regression coverage for `workflow_state: intake` plus `attention_required: null` deriving `Clarify`, not `Edit`. +- Updated `crates/ticket/Cargo.toml`, `Cargo.lock`, and `package.nix` for `serde_yaml` / Nix cargo hash. +- Migrated 48 existing `.yoi/tickets/**/item.md` files by quoting YAML-unsafe title values with colons; no bodies, threads, resolutions, or non-frontmatter content were rewritten. + +Reported validation: +- `cargo test -p ticket --lib` — passed +- `cargo test -p tui workspace_panel --lib` — passed +- `cargo fmt --check` — passed +- `git diff --check` — passed +- `target/debug/yoi ticket doctor` — passed +- `nix build .#yoi` — passed + +Next action: +- Delegate independent read-only reviewer inspection of commit `10d7844` against the Ticket intent, strict-YAML preflight boundary, migration minimality, and validation evidence before preparing a merge-ready dossier. + +--- + + + +## Implementation report + +Reviewer delegated: +- Pod: `reviewer-parse-ticket-frontmatter-as-yaml` +- Review target: commit `10d7844` on branch `ticket/parse-ticket-frontmatter-as-yaml` +- Scope: read-only child worktree plus git metadata needed to inspect the branch. +- Instructions: inspect parser semantics, clear failure behavior, minimal Ticket record migration, workspace panel regression coverage, dependency/package changes, and validation evidence; return `approve` or `request_changes` with blocker/non-blocker separation. No file edits, Ticket writes, merge, close, or cleanup delegated. + +--- + + + +## Review: request changes + +Branch-local reviewer verdict: request changes. + +Blocker: +- The parser now correctly treats schema string fields as YAML strings, but the Ticket frontmatter writer can still emit numeric-looking or otherwise ambiguous string values as plain YAML scalars. Examples such as `title: 123`, `labels: [123]`, `risk_flags: [1]`, or `assignee: 42` would be emitted as non-string YAML scalars and then rejected by the strict parser on the next read. The backend must not create/update Ticket records that its own parser rejects. + +Requested fix: +- Make string serialization conservative, preferably always quote schema string values, or prove round-trip string-ness under `serde_yaml` before emitting plain scalars. +- Add regression tests for numeric-looking strings at least for `title`, `labels`, and `risk_flags`; optional string fields such as `assignee`/`attention_required` should also be covered if they share the helper. + +Positive findings: +- Strict YAML parsing direction is correct. +- Null/list/bool parsing and clear failure behavior are covered. +- Workspace panel regression coverage is present. +- Migration appears limited to necessary `title:` frontmatter normalization. +- Dependency/package changes looked coherent and coder-reported validation was appropriate. + +Validation expected after fix: +- `cargo test -p ticket --lib` +- `cargo test -p tui workspace_panel --lib` +- `target/debug/yoi ticket doctor` or equivalent +- `nix build .#yoi` if dependency/package outputs remain changed. + +--- + + + +## Implementation report + +Coder completed reviewer-blocker fix: +- Pod: `coder-parse-ticket-frontmatter-as-yaml` +- Branch/worktree: `ticket/parse-ticket-frontmatter-as-yaml` at `.worktree/parse-ticket-frontmatter-as-yaml` +- New commit: `dbdccc5 ticket: quote frontmatter strings conservatively` +- Branch commits now: `10d7844` + `dbdccc5` +- Child worktree status: clean + +Fix summary: +- `format_yaml_string_scalar` now emits schema string values as single-quoted YAML scalars conservatively. +- Applies to scalar string fields such as `title`, `assignee`, `attention_required`, list items in `labels`/`risk_flags`, and string updates through `set_frontmatter_fields`. +- Added regression coverage for ambiguous/numeric-looking user strings: `title: "123"`, `labels: ["123", "01"]`, `risk_flags: ["1", "42"]`, `assignee: "42"`, `attention_required: "0"`, and `action_required: "true"`. +- No extra Ticket migration rewrite was needed for the fix. + +Reported validation after fix: +- `cargo test -p ticket --lib` — passed +- `cargo test -p tui workspace_panel --lib` — passed +- `cargo fmt --check` — passed +- `git diff --check` — passed +- `target/debug/yoi ticket doctor` — passed +- `nix build .#yoi` — passed + +Next action: +- Send the updated branch back to the reviewer for focused re-review of the prior blocker and final merge-ready verdict. + +--- + + + +## Implementation report + +Merge-ready dossier for `orchestrator-merge-completion` + +Ticket: +- Id: `20260607-223233-parse-ticket-frontmatter-as-yaml` +- Slug: `parse-ticket-frontmatter-as-yaml` +- Workflow state: `inprogress` + +Branch/worktree: +- Branch: `ticket/parse-ticket-frontmatter-as-yaml` +- Worktree: `.worktree/parse-ticket-frontmatter-as-yaml` +- Child worktree status: clean (`## ticket/parse-ticket-frontmatter-as-yaml`) + +Commits: +- `10d7844 ticket: parse item frontmatter as YAML` +- `dbdccc5 ticket: quote frontmatter strings conservatively` +- Diff vs `develop`: 53 files changed; source/package changes in `crates/ticket`, `crates/tui/src/workspace_panel.rs`, `Cargo.lock`, `package.nix`; 48 `.yoi/tickets/**/item.md` records minimally normalized. + +Intent/invariant check: +- Intent satisfied: Ticket `item.md` frontmatter now parses through strict YAML-compatible typed metadata rather than raw `key: value` strings. +- Human/preflight boundary followed: old tolerant raw-string semantics that conflict with YAML were not preserved. +- YAML null/list/bool semantics are handled; invalid/wrong-typed frontmatter fails clearly. +- Writer/parser round-trip invariant restored by conservative quoting of schema string values. +- Scope stayed within parser/emitter correctness, minimal project Ticket record normalization, package dependency updates, and workspace panel regression coverage; Ticket lifecycle/state/action model was not redesigned. + +Implementation summary: +- Replaced raw frontmatter parsing in `crates/ticket/src/lib.rs` with `serde_yaml::Value`-based strict parsing and typed helpers. +- Added validation/error paths for wrong YAML field types. +- Added tests for null values, quoted `"null"` as string where valid, list fields, bool fields, invalid types, and conservative string emission. +- Added workspace panel regression coverage so `workflow_state: intake` plus `attention_required: null` derives `Clarify` rather than `Edit`. +- Added `serde_yaml` to `crates/ticket/Cargo.toml`, updated `Cargo.lock`, and updated `package.nix` cargo hash. +- Normalized existing Ticket item frontmatter by quoting YAML-unsafe `title:` values containing colons; no body/thread/resolution rewrite was introduced. + +Coder evidence: +- Pod: `coder-parse-ticket-frontmatter-as-yaml` +- Initial implementation commit: `10d7844` +- Reviewer-fix commit: `dbdccc5` +- Coder-reported final status: child worktree clean. +- Coder-reported validation after fix: + - `cargo test -p ticket --lib` — passed + - `cargo test -p tui workspace_panel --lib` — passed + - `cargo fmt --check` — passed + - `git diff --check` — passed + - `target/debug/yoi ticket doctor` — passed + - `nix build .#yoi` — passed + +Reviewer evidence: +- Pod: `reviewer-parse-ticket-frontmatter-as-yaml` +- First verdict: request_changes due writer emitting ambiguous numeric-looking schema strings as plain YAML scalars. +- Blocker resolution: reviewer approved after focused re-review of commit `dbdccc5`. +- Reviewer inspected branch/worktree state, prior-to-fix delta, focused `crates/ticket/src/lib.rs` diff, migration scope, packaging/dependency diff, `git diff --check`, and `target/debug/yoi ticket doctor`. +- Final branch-local verdict: approve. + +Blockers / findings: +- Resolved blocker: strict parser could reject records written by the backend if schema strings were emitted as ambiguous plain YAML scalars. +- Fix: schema string values are conservatively single-quoted, including list entries and update paths; regression tests cover numeric/ambiguous strings. +- No remaining reviewer blockers or non-blocker required changes. + +Validation performed by orchestrator: +- Confirmed child branch HEAD, clean status, commit list, and diff stat/name-status against `develop`. +- Ran typed `TicketDoctor`: 0 errors; existing repository-wide warnings remain unrelated/truncated. + +Residual risks: +- `serde_yaml` dependency/package change is larger than parser-only code but was validated by coder-reported `nix build .#yoi` and reviewer packaging inspection. +- Ticket migration touches many item files, but the diff is intentionally limited to frontmatter title quoting needed for valid YAML parsing. +- Broader historical Ticket warnings remain but are unrelated to this change. + +Current main workspace dirty state: +- Main branch has local Ticket record modifications for this Ticket's routing/review/dossier events. +- No source-code changes are present in the main workspace outside child worktrees. + +Pods / cleanup state: +- Coder Pod is idle/reachable. +- Reviewer Pod is idle/reachable. +- Worktree and branch are retained for merge-completion. +- No merge, final main-branch approval, close, or cleanup has been performed. + +Parent/human decision needed: +- Authorize merge-completion if desired. Without explicit merge authority, stop here with this dossier. +- Merge-completion should independently verify branch/worktree/commit identity, main workspace safety, and validation requirements before merge/close/cleanup. + +--- diff --git a/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/item.md b/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/item.md index f477a050..5418f02e 100644 --- a/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/item.md +++ b/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/item.md @@ -8,7 +8,7 @@ priority: P2 labels: [workflow, ticket, orchestrator, preflight, review] workflow_state: inprogress created_at: 2026-06-07T23:00:44Z -updated_at: 2026-06-07T23:10:10Z +updated_at: 2026-06-07T23:25:49Z assignee: null legacy_ticket: null queued_by: workspace-panel diff --git a/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/thread.md b/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/thread.md index 0679b0d0..3b67021f 100644 --- a/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/thread.md +++ b/.yoi/tickets/open/20260607-230044-relax-implementation-planning-readiness/thread.md @@ -183,3 +183,53 @@ Coder delegated: - Instructions: update workflow guidance to distinguish ready-for-routing, implementation handoff with bounded implementation latitude, binding decisions/invariants, and escalation conditions; keep preflight mandatory for product/API/UX/authority-boundary uncertainty; update reviewer guidance to judge against recorded intent/constraints/acceptance/explicit decisions; run validation and commit locally. No merge, close, main workspace edits, or cleanup delegated. --- + + + +## Implementation report + +Coder completed implementation: +- Pod: `coder-relax-implementation-planning-readiness` +- Branch/worktree: `ticket/relax-implementation-planning-readiness` at `.worktree/relax-implementation-planning-readiness` +- Commit: `1e2d1d8 docs: relax implementation readiness wording` +- Child worktree status: clean + +Files changed: +- `.yoi/workflow/ticket-intake-workflow.md` +- `.yoi/workflow/ticket-orchestrator-routing.md` +- `.yoi/workflow/ticket-preflight-workflow.md` +- `.yoi/workflow/multi-agent-workflow.md` +- `crates/client/src/ticket_role.rs` + +Implementation summary: +- Clarified that `ready` means ready for Orchestrator routing, not fully implementation-planned. +- Relaxed `implementation_ready` to allow bounded coder investigation/local tactic choice when intent, constraints, acceptance criteria, reviewer judgment basis, and escalation conditions are clear. +- Preserved preflight as mandatory for product/API/UX/authority/design-boundary uncertainty or attempts to weaken explicit constraints. +- Distinguished binding decisions/invariants, implementation latitude, and escalation conditions in IntentPacket guidance. +- Clarified that `needs_preflight: true` and risk flags are strong signals, not unconditional blockers when a Ticket-recorded human/Orchestrator decision already supplies the missing boundary. +- Updated reviewer guidance to judge against recorded intent, constraints, acceptance criteria, and explicit decisions rather than unrecorded preferred tactics. +- Updated generated role guidance/tests in `ticket_role.rs` to align Orchestrator/Coder/Reviewer prompts. + +Reported validation: +- `target/debug/yoi ticket doctor` — unavailable in child +- `cargo fmt --check` — passed +- `cargo test -p client generated_prompt_covers_intake_orchestrator_coder_and_reviewer_context -- --nocapture` — passed +- `git diff --check` — passed +- `nix build .#yoi` — passed, run because generated runtime role guidance/tests changed + +Next action: +- Delegate independent read-only reviewer inspection of commit `1e2d1d8` against the Ticket intent and acceptance criteria before preparing a merge-ready dossier. + +--- + + + +## Implementation report + +Reviewer delegated: +- Pod: `reviewer-relax-implementation-planning-readiness` +- Review target: commit `1e2d1d8` on branch `ticket/relax-implementation-planning-readiness` +- Scope: read-only child worktree plus git metadata needed to inspect the branch. +- Instructions: inspect workflow wording and generated role guidance/test alignment against the Ticket's binding policy boundary; return `approve` or `request_changes` with blocker/non-blocker separation. No file edits, Ticket writes, merge, close, or cleanup delegated. + +---