Rename BoardItemType 'issue' to 'ticket' for semantic clarity #181

Open
opened 2026-03-28 01:30:34 +00:00 by forgejo_admin · 5 comments
Contributor

Type

Feature

Lineage

Standalone -- discovered during board item creation workflows where item_type="issue" causes semantic confusion with Forgejo issues.

Repo

Cross-repo: forgejo_admin/pal-e-docs, forgejo_admin/pal-e-docs-sdk, forgejo_admin/pal-e-mcp, forgejo_admin/claude-custom

User Story

As a platform operator managing board items via MCP tools and hooks
I want the board item type for Forgejo-linked kanban cards to be called ticket instead of issue
So that "issue" unambiguously means "Forgejo issue" (the spec) and "ticket" means "board item" (the kanban card) throughout the pal-e-agency system

Context

The BoardItemType enum uses issue for board items that represent Forgejo issues. But "issue" is overloaded in the pal-e-agency system:

  • Forgejo issue = the spec document (lives in Forgejo, has a URL)
  • Board item / ticket = the kanban card (lives in pal-e-docs, tracks workflow state)

The established convention is: "issues" are Forgejo issues, "tickets" are board items. Using item_type="issue" for the board item type creates confusion in hooks, skills, agent prompts, and SOPs. The rename aligns the API with the established vocabulary.

This is a breaking change for all MCP consumers. Every hook, skill, agent prompt, and test that passes item_type="issue" must be updated. The database stores the string value, so existing rows need a data migration. Deploy order: API first (with backward compat accepting both), SDK second, MCP third, hooks/skills fourth, then remove backward compat.

File Targets

Files the agent should modify or create:

pal-e-docs (API server) -- ~/pal-e-docs

  • src/pal_e_docs/models.py:33-39 -- BoardItemType enum: rename issue = "issue" to ticket = "ticket"
  • src/pal_e_docs/schemas.py:228 -- BoardItemTypeType Literal: replace "issue" with "ticket"
  • src/pal_e_docs/schemas.py:262-268 -- BoardItemCounts model: rename issue: int = 0 field to ticket: int = 0
  • src/pal_e_docs/routes/boards.py:395 -- Comment: item_type=issue in sync docstring
  • src/pal_e_docs/routes/boards.py:488 -- item_type=BoardItemType.issue in sync endpoint
  • src/pal_e_docs/routes/boards.py:602-605 -- Validation: body.item_type == "issue" and error message
  • tests/test_boards.py -- ~20 references to "item_type": "issue" and ?item_type=issue in query strings
  • tests/test_board_issue_sync.py -- ~8 references to item_type=issue and item["item_type"] == "issue"
  • tests/test_pagination_activity.py:49 -- "item_type": "issue" test fixture
  • NEW alembic/versions/xxxx_rename_issue_to_ticket.py -- data migration: UPDATE board_items SET item_type = 'ticket' WHERE item_type = 'issue'

pal-e-docs (Alembic -- existing migrations, reference only)

  • alembic/versions/f6a7b8c9d0e1_sprint_schema_expansion.py:30-31 -- OLD_ITEM_TYPES and NEW_ITEM_TYPES tuples contain "issue" (historical, do not modify -- add forward migration instead)

pal-e-docs-sdk -- ~/pal-e-docs-sdk

  • src/pal_e_sdk/boards.py:101-116 -- add_board_item() docstring: "issue items require" -> "ticket items require"
  • tests/test_boards.py:140-145 -- item_type="issue" in test_get_backlog_with_item_type
  • tests/test_boards.py:165-167 -- item_type="issue" in list_board_items test
  • tests/test_boards.py:198-205 -- item_type="issue" in add_board_item test

pal-e-mcp (MCP server) -- ~/pal-e-mcp

  • src/pal_e_mcp/tools/boards.py:104 -- list_board_items tool: item_type description lists 'issue'
  • src/pal_e_mcp/tools/boards.py:138 -- create_board_item tool: item_type field description lists 'issue'
  • src/pal_e_mcp/tools/boards.py:160 -- forgejo_issue_url field description references "issue-type items"
  • src/pal_e_mcp/tools/boards.py:180-181 -- create_board_item docstring: categorises with issue, "For issue items"
  • src/pal_e_mcp/tools/boards.py:302 -- get_backlog tool: item_type description lists 'issue'
  • tests/test_param_alignment.py:349,357,365,372,379 -- 5 test fixtures use item_type="issue"

claude-custom -- ~/claude-custom

  • hooks/check-board-item.sh:52-57 -- case statement: issue) branch rename to ticket)
  • skills/review-ticket/SKILL.md:27 -- item_type list: (phase, issue, incident, repo) -> (phase, ticket, incident, repo)
  • skills/review-ticket/SKILL.md:40-42 -- "For issue items" section rename to "For ticket items"

Files the agent should NOT touch:

  • alembic/versions/f6a7b8c9d0e1_sprint_schema_expansion.py -- historical migration, do not rewrite
  • alembic/versions/n4i5j6k7l8m9_replace_sprints_with_boards.py -- historical migration, do not rewrite
  • alembic/versions/e5f6a7b8c9d0_add_sprint_tables.py -- historical migration, do not rewrite

Acceptance Criteria

  • BoardItemType enum has ticket instead of issue
  • All API endpoints accept item_type="ticket" and reject item_type="issue" (after transition period)
  • Alembic data migration converts all existing "issue" rows to "ticket" in board_items table
  • SDK add_board_item() docstring and tests reference ticket not issue
  • MCP create_board_item tool description shows ticket in the valid values list
  • MCP list_board_items and get_backlog tool descriptions show ticket in valid values
  • MCP tests in test_param_alignment.py use item_type="ticket"
  • check-board-item.sh hook validates ticket) case instead of issue)
  • review-ticket skill references ticket item type
  • No remaining references to item_type="issue" (as a BoardItemType value) in any of the four repos

Test Expectations

  • Unit test: all existing board tests in pal-e-docs/tests/test_boards.py pass with "ticket" replacing "issue"
  • Integration test: test_board_issue_sync.py passes with item_type=ticket for Forgejo-synced items
  • SDK test: pal-e-docs-sdk/tests/test_boards.py passes with item_type="ticket"
  • MCP test: pal-e-mcp/tests/test_param_alignment.py passes with item_type="ticket"
  • Run command: pytest tests/test_boards.py tests/test_board_issue_sync.py tests/test_board_sync.py tests/test_pagination_activity.py -v

Constraints

  • Historical Alembic migrations must not be modified -- add a new forward migration only
  • Consider a backward compatibility transition where the API accepts both "issue" and "ticket" during rollout, logging a deprecation warning for "issue"
  • Deploy order matters: API (with backward compat) -> SDK -> MCP -> hooks/skills -> remove backward compat
  • The item_type column is String(20) -- "ticket" fits within the constraint

Decomposition

This parent ticket is decomposed into 4 child tickets with strict deploy order (see comment #9353):

Order Ticket Repo Scope Status
A pal-e-api#229 pal-e-api Enum + schema + routes + Alembic migration + transition alias todo
B pal-e-sdk#40 pal-e-sdk Docstrings + test fixtures todo (blocked on A)
C pal-e-mcp#53 pal-e-mcp Tool descriptions + test fixtures + SDK bump todo (blocked on B)
D claude-custom#191 claude-custom Hook case branch + SKILL.md routing todo (blocked on C)

Deploy order: A -> B -> C -> D. No direct work on this parent ticket.

Discovered Scope

  • claude-custom#192 -- Bug: review-ticket/SKILL.md lists phantom incident item_type that does not exist in the enum.

Checklist

  • PR opened (one per repo: pal-e-docs, pal-e-docs-sdk, pal-e-mcp, claude-custom)
  • Tests pass in all four repos
  • No unrelated changes
  • Data migration tested against a database with existing "issue" rows
  • All 4 child tickets merged, then close this parent
  • pal-e-agency -- project this affects (board system is part of the agency platform)
  • convention-todo-lifecycle -- references board item types
  • template-ticket -- ticket template that creates board items
  • board-pal-e-agency -- board that will contain this item
### Type Feature ### Lineage Standalone -- discovered during board item creation workflows where `item_type="issue"` causes semantic confusion with Forgejo issues. ### Repo Cross-repo: `forgejo_admin/pal-e-docs`, `forgejo_admin/pal-e-docs-sdk`, `forgejo_admin/pal-e-mcp`, `forgejo_admin/claude-custom` ### User Story As a platform operator managing board items via MCP tools and hooks I want the board item type for Forgejo-linked kanban cards to be called `ticket` instead of `issue` So that "issue" unambiguously means "Forgejo issue" (the spec) and "ticket" means "board item" (the kanban card) throughout the pal-e-agency system ### Context The `BoardItemType` enum uses `issue` for board items that represent Forgejo issues. But "issue" is overloaded in the pal-e-agency system: - **Forgejo issue** = the spec document (lives in Forgejo, has a URL) - **Board item / ticket** = the kanban card (lives in pal-e-docs, tracks workflow state) The established convention is: "issues" are Forgejo issues, "tickets" are board items. Using `item_type="issue"` for the board item type creates confusion in hooks, skills, agent prompts, and SOPs. The rename aligns the API with the established vocabulary. This is a **breaking change** for all MCP consumers. Every hook, skill, agent prompt, and test that passes `item_type="issue"` must be updated. The database stores the string value, so existing rows need a data migration. Deploy order: API first (with backward compat accepting both), SDK second, MCP third, hooks/skills fourth, then remove backward compat. ### File Targets Files the agent should modify or create: **pal-e-docs (API server) -- `~/pal-e-docs`** - `src/pal_e_docs/models.py:33-39` -- `BoardItemType` enum: rename `issue = "issue"` to `ticket = "ticket"` - `src/pal_e_docs/schemas.py:228` -- `BoardItemTypeType` Literal: replace `"issue"` with `"ticket"` - `src/pal_e_docs/schemas.py:262-268` -- `BoardItemCounts` model: rename `issue: int = 0` field to `ticket: int = 0` - `src/pal_e_docs/routes/boards.py:395` -- Comment: `item_type=issue` in sync docstring - `src/pal_e_docs/routes/boards.py:488` -- `item_type=BoardItemType.issue` in sync endpoint - `src/pal_e_docs/routes/boards.py:602-605` -- Validation: `body.item_type == "issue"` and error message - `tests/test_boards.py` -- ~20 references to `"item_type": "issue"` and `?item_type=issue` in query strings - `tests/test_board_issue_sync.py` -- ~8 references to `item_type=issue` and `item["item_type"] == "issue"` - `tests/test_pagination_activity.py:49` -- `"item_type": "issue"` test fixture - **NEW** `alembic/versions/xxxx_rename_issue_to_ticket.py` -- data migration: `UPDATE board_items SET item_type = 'ticket' WHERE item_type = 'issue'` **pal-e-docs (Alembic -- existing migrations, reference only)** - `alembic/versions/f6a7b8c9d0e1_sprint_schema_expansion.py:30-31` -- `OLD_ITEM_TYPES` and `NEW_ITEM_TYPES` tuples contain `"issue"` (historical, do not modify -- add forward migration instead) **pal-e-docs-sdk -- `~/pal-e-docs-sdk`** - `src/pal_e_sdk/boards.py:101-116` -- `add_board_item()` docstring: "issue items require" -> "ticket items require" - `tests/test_boards.py:140-145` -- `item_type="issue"` in `test_get_backlog_with_item_type` - `tests/test_boards.py:165-167` -- `item_type="issue"` in list_board_items test - `tests/test_boards.py:198-205` -- `item_type="issue"` in add_board_item test **pal-e-mcp (MCP server) -- `~/pal-e-mcp`** - `src/pal_e_mcp/tools/boards.py:104` -- `list_board_items` tool: item_type description lists `'issue'` - `src/pal_e_mcp/tools/boards.py:138` -- `create_board_item` tool: item_type field description lists `'issue'` - `src/pal_e_mcp/tools/boards.py:160` -- `forgejo_issue_url` field description references "issue-type items" - `src/pal_e_mcp/tools/boards.py:180-181` -- `create_board_item` docstring: categorises with `issue`, "For issue items" - `src/pal_e_mcp/tools/boards.py:302` -- `get_backlog` tool: item_type description lists `'issue'` - `tests/test_param_alignment.py:349,357,365,372,379` -- 5 test fixtures use `item_type="issue"` **claude-custom -- `~/claude-custom`** - `hooks/check-board-item.sh:52-57` -- `case` statement: `issue)` branch rename to `ticket)` - `skills/review-ticket/SKILL.md:27` -- item_type list: `(phase, issue, incident, repo)` -> `(phase, ticket, incident, repo)` - `skills/review-ticket/SKILL.md:40-42` -- "For `issue` items" section rename to "For `ticket` items" Files the agent should NOT touch: - `alembic/versions/f6a7b8c9d0e1_sprint_schema_expansion.py` -- historical migration, do not rewrite - `alembic/versions/n4i5j6k7l8m9_replace_sprints_with_boards.py` -- historical migration, do not rewrite - `alembic/versions/e5f6a7b8c9d0_add_sprint_tables.py` -- historical migration, do not rewrite ### Acceptance Criteria - [ ] `BoardItemType` enum has `ticket` instead of `issue` - [ ] All API endpoints accept `item_type="ticket"` and reject `item_type="issue"` (after transition period) - [ ] Alembic data migration converts all existing `"issue"` rows to `"ticket"` in `board_items` table - [ ] SDK `add_board_item()` docstring and tests reference `ticket` not `issue` - [ ] MCP `create_board_item` tool description shows `ticket` in the valid values list - [ ] MCP `list_board_items` and `get_backlog` tool descriptions show `ticket` in valid values - [ ] MCP tests in `test_param_alignment.py` use `item_type="ticket"` - [ ] `check-board-item.sh` hook validates `ticket)` case instead of `issue)` - [ ] `review-ticket` skill references `ticket` item type - [ ] No remaining references to `item_type="issue"` (as a BoardItemType value) in any of the four repos ### Test Expectations - [ ] Unit test: all existing board tests in `pal-e-docs/tests/test_boards.py` pass with `"ticket"` replacing `"issue"` - [ ] Integration test: `test_board_issue_sync.py` passes with `item_type=ticket` for Forgejo-synced items - [ ] SDK test: `pal-e-docs-sdk/tests/test_boards.py` passes with `item_type="ticket"` - [ ] MCP test: `pal-e-mcp/tests/test_param_alignment.py` passes with `item_type="ticket"` - Run command: `pytest tests/test_boards.py tests/test_board_issue_sync.py tests/test_board_sync.py tests/test_pagination_activity.py -v` ### Constraints - Historical Alembic migrations must not be modified -- add a new forward migration only - Consider a backward compatibility transition where the API accepts both `"issue"` and `"ticket"` during rollout, logging a deprecation warning for `"issue"` - Deploy order matters: API (with backward compat) -> SDK -> MCP -> hooks/skills -> remove backward compat - The `item_type` column is `String(20)` -- `"ticket"` fits within the constraint ### Decomposition This parent ticket is decomposed into 4 child tickets with strict deploy order (see [comment #9353](https://forgejo.tail5b443a.ts.net/forgejo_admin/claude-custom/issues/181#issuecomment-9353)): | Order | Ticket | Repo | Scope | Status | |-------|--------|------|-------|--------| | A | [`pal-e-api#229`](https://forgejo.tail5b443a.ts.net/forgejo_admin/pal-e-api/issues/229) | pal-e-api | Enum + schema + routes + Alembic migration + transition alias | todo | | B | [`pal-e-sdk#40`](https://forgejo.tail5b443a.ts.net/forgejo_admin/pal-e-sdk/issues/40) | pal-e-sdk | Docstrings + test fixtures | todo (blocked on A) | | C | [`pal-e-mcp#53`](https://forgejo.tail5b443a.ts.net/forgejo_admin/pal-e-mcp/issues/53) | pal-e-mcp | Tool descriptions + test fixtures + SDK bump | todo (blocked on B) | | D | [`claude-custom#191`](https://forgejo.tail5b443a.ts.net/forgejo_admin/claude-custom/issues/191) | claude-custom | Hook case branch + SKILL.md routing | todo (blocked on C) | Deploy order: `A -> B -> C -> D`. No direct work on this parent ticket. ### Discovered Scope - [`claude-custom#192`](https://forgejo.tail5b443a.ts.net/forgejo_admin/claude-custom/issues/192) -- Bug: `review-ticket/SKILL.md` lists phantom `incident` item_type that does not exist in the enum. ### Checklist - [ ] PR opened (one per repo: pal-e-docs, pal-e-docs-sdk, pal-e-mcp, claude-custom) - [ ] Tests pass in all four repos - [ ] No unrelated changes - [ ] Data migration tested against a database with existing `"issue"` rows - [ ] All 4 child tickets merged, then close this parent ### Related - `pal-e-agency` -- project this affects (board system is part of the agency platform) - `convention-todo-lifecycle` -- references board item types - `template-ticket` -- ticket template that creates board items - `board-pal-e-agency` -- board that will contain this item
Author
Contributor

Decomposition (2026-03-27)

Review review-181-2026-03-27 found this ticket violates the 5-minute and 3-thing rules: 4 repos, 27+ files. Decomposed into 4 child tickets with strict deploy order.

Child Tickets

Order Ticket Repo Scope Status
A forgejo_admin/pal-e-api#229 pal-e-api Enum + schema + routes + Alembic migration + transition alias todo
B forgejo_admin/pal-e-sdk#40 pal-e-sdk Docstrings + test fixtures todo (blocked on A)
C forgejo_admin/pal-e-mcp#53 pal-e-mcp Tool descriptions + test fixtures + SDK bump todo (blocked on B)
D forgejo_admin/claude-custom#191 claude-custom Hook case branch + SKILL.md routing todo (blocked on C)

Deploy Order

A (pal-e-api) -> B (pal-e-sdk) -> C (pal-e-mcp) -> D (claude-custom)

A ships first with a transition alias (API accepts both "issue" and "ticket"). Each downstream ticket updates to the new canonical value. D is last.

Discovered Scope

  • forgejo_admin/claude-custom#192 -- Bug: review-ticket/SKILL.md lists phantom incident item_type that does not exist in the enum. Also missing plan, project, todo from the valid values list.

Resolution

This parent ticket (#181) should be closed once all 4 child tickets merge. No direct work on this ticket.

## Decomposition (2026-03-27) Review `review-181-2026-03-27` found this ticket violates the 5-minute and 3-thing rules: 4 repos, 27+ files. Decomposed into 4 child tickets with strict deploy order. ### Child Tickets | Order | Ticket | Repo | Scope | Status | |-------|--------|------|-------|--------| | A | [`forgejo_admin/pal-e-api#229`](https://forgejo.tail5b443a.ts.net/forgejo_admin/pal-e-api/issues/229) | pal-e-api | Enum + schema + routes + Alembic migration + transition alias | todo | | B | [`forgejo_admin/pal-e-sdk#40`](https://forgejo.tail5b443a.ts.net/forgejo_admin/pal-e-sdk/issues/40) | pal-e-sdk | Docstrings + test fixtures | todo (blocked on A) | | C | [`forgejo_admin/pal-e-mcp#53`](https://forgejo.tail5b443a.ts.net/forgejo_admin/pal-e-mcp/issues/53) | pal-e-mcp | Tool descriptions + test fixtures + SDK bump | todo (blocked on B) | | D | [`forgejo_admin/claude-custom#191`](https://forgejo.tail5b443a.ts.net/forgejo_admin/claude-custom/issues/191) | claude-custom | Hook case branch + SKILL.md routing | todo (blocked on C) | ### Deploy Order ``` A (pal-e-api) -> B (pal-e-sdk) -> C (pal-e-mcp) -> D (claude-custom) ``` A ships first with a transition alias (API accepts both `"issue"` and `"ticket"`). Each downstream ticket updates to the new canonical value. D is last. ### Discovered Scope - [`forgejo_admin/claude-custom#192`](https://forgejo.tail5b443a.ts.net/forgejo_admin/claude-custom/issues/192) -- Bug: `review-ticket/SKILL.md` lists phantom `incident` item_type that does not exist in the enum. Also missing `plan`, `project`, `todo` from the valid values list. ### Resolution This parent ticket (#181) should be closed once all 4 child tickets merge. No direct work on this ticket.
Author
Contributor

Scope Review: NEEDS_REFINEMENT

Review note: review-479-2026-03-27

Template is complete and traceability labels are solid. Two issues found:

  • Missing repo: pal-e-mcp -- The MCP server tool description (pal-e-mcp/src/pal_e_mcp/tools/boards.py:180-181) and 5 tests (tests/test_param_alignment.py) reference item_type="issue". This is where AC #5 ("MCP create_board_item tool description") actually lives. Add as fourth repo.
  • Inaccurate file target -- docs/superpowers/specs/2026-03-18-review-ticket-design.md:41 references the field name item_type, not the value "issue". No change needed; remove from targets.
  • Needs decomposition -- 4 repos, 15+ file targets, 8 AC, breaking change with data migration + ordered deploy. Recommend template-board split: (A) API enum+migration, (B) SDK+MCP, (C) hooks/skills, (D) backward compat removal.
## Scope Review: NEEDS_REFINEMENT Review note: `review-479-2026-03-27` Template is complete and traceability labels are solid. Two issues found: - **Missing repo: `pal-e-mcp`** -- The MCP server tool description (`pal-e-mcp/src/pal_e_mcp/tools/boards.py:180-181`) and 5 tests (`tests/test_param_alignment.py`) reference `item_type="issue"`. This is where AC #5 ("MCP create_board_item tool description") actually lives. Add as fourth repo. - **Inaccurate file target** -- `docs/superpowers/specs/2026-03-18-review-ticket-design.md:41` references the field name `item_type`, not the value `"issue"`. No change needed; remove from targets. - **Needs decomposition** -- 4 repos, 15+ file targets, 8 AC, breaking change with data migration + ordered deploy. Recommend `template-board` split: (A) API enum+migration, (B) SDK+MCP, (C) hooks/skills, (D) backward compat removal.
Author
Contributor

Body Refinement (2026-03-27)

Responding to review-479-2026-03-27. Three changes applied to issue body:

1. Added pal-e-mcp to repo scope

  • Repo section now lists 4 repos (was 3): added forgejo_admin/pal-e-mcp
  • New pal-e-mcp file targets section: 6 references in boards.py (lines 104, 138, 160, 180-181, 302) + 5 test fixtures in test_param_alignment.py
  • AC updated: added MCP-specific criteria (#5 expanded, new #6 and #7)
  • Test expectations: added MCP test line
  • Checklist: "three repos" -> "four repos"
  • Deploy order: API -> SDK -> MCP -> hooks/skills (was API -> SDK -> hooks/skills)

2. Removed inaccurate file target

  • Removed docs/superpowers/specs/2026-03-18-review-ticket-design.md:41 -- that line references the field name item_type in a fetch call, not the enum value "issue". No rename needed there.

3. Added decomposition to body

  • Promoted the child ticket table from comment #9353 into a Decomposition section in the body itself, so the deploy order and child ticket links are visible without scrolling to comments.
  • Added Discovered Scope section (claude-custom#192 phantom incident type).
  • Added final checklist item: "All 4 child tickets merged, then close this parent."
## Body Refinement (2026-03-27) Responding to `review-479-2026-03-27`. Three changes applied to issue body: ### 1. Added `pal-e-mcp` to repo scope - Repo section now lists 4 repos (was 3): added `forgejo_admin/pal-e-mcp` - New **pal-e-mcp** file targets section: 6 references in `boards.py` (lines 104, 138, 160, 180-181, 302) + 5 test fixtures in `test_param_alignment.py` - AC updated: added MCP-specific criteria (#5 expanded, new #6 and #7) - Test expectations: added MCP test line - Checklist: "three repos" -> "four repos" - Deploy order: API -> SDK -> **MCP** -> hooks/skills (was API -> SDK -> hooks/skills) ### 2. Removed inaccurate file target - Removed `docs/superpowers/specs/2026-03-18-review-ticket-design.md:41` -- that line references the field name `item_type` in a fetch call, not the enum value `"issue"`. No rename needed there. ### 3. Added decomposition to body - Promoted the child ticket table from comment #9353 into a **Decomposition** section in the body itself, so the deploy order and child ticket links are visible without scrolling to comments. - Added **Discovered Scope** section (claude-custom#192 phantom `incident` type). - Added final checklist item: "All 4 child tickets merged, then close this parent."
Author
Contributor

Decomposition Verification

All 4 child issues from the decomposition plan already exist and are confirmed open:

Order Ticket Repo Status
A pal-e-api#229 pal-e-api open
B pal-e-sdk#40 pal-e-sdk open (blocked on A)
C pal-e-mcp#53 pal-e-mcp open (blocked on B)
D claude-custom#191 claude-custom open (blocked on C)

Discovered scope issue also exists: claude-custom#192 (phantom incident item_type).

No new issues needed — decomposition was already executed.

## Decomposition Verification All 4 child issues from the decomposition plan already exist and are confirmed open: | Order | Ticket | Repo | Status | |-------|--------|------|--------| | A | [`pal-e-api#229`](https://forgejo.tail5b443a.ts.net/forgejo_admin/pal-e-api/issues/229) | pal-e-api | open | | B | [`pal-e-sdk#40`](https://forgejo.tail5b443a.ts.net/forgejo_admin/pal-e-sdk/issues/40) | pal-e-sdk | open (blocked on A) | | C | [`pal-e-mcp#53`](https://forgejo.tail5b443a.ts.net/forgejo_admin/pal-e-mcp/issues/53) | pal-e-mcp | open (blocked on B) | | D | [`claude-custom#191`](https://forgejo.tail5b443a.ts.net/forgejo_admin/claude-custom/issues/191) | claude-custom | open (blocked on C) | Discovered scope issue also exists: [`claude-custom#192`](https://forgejo.tail5b443a.ts.net/forgejo_admin/claude-custom/issues/192) (phantom `incident` item_type). No new issues needed — decomposition was already executed.
Author
Contributor

Scope Review: READY

Review note: review-479-2026-03-29

Ticket is well-scoped. All 15+ file targets verified against filesystem. Template complete, traceability triangle satisfied (story:pm-scope, arch:note-system, Forgejo issue open). Already decomposed into 4 child tickets (pal-e-api#229 -> pal-e-sdk#40 -> pal-e-mcp#53 -> claude-custom#191) with correct deploy ordering. No blockers, no refinement needed. Ready for execution via child tickets.

## Scope Review: READY Review note: `review-479-2026-03-29` Ticket is well-scoped. All 15+ file targets verified against filesystem. Template complete, traceability triangle satisfied (story:pm-scope, arch:note-system, Forgejo issue open). Already decomposed into 4 child tickets (pal-e-api#229 -> pal-e-sdk#40 -> pal-e-mcp#53 -> claude-custom#191) with correct deploy ordering. No blockers, no refinement needed. Ready for execution via child tickets.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ldraney/claude-custom#181
No description provided.