tech-debt: stale Status option IDs in project_config.py cause silent no-op board updates
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 64/100
Hướng nghiên cứu
Start by reading scripts/lib/project_config.py, scripts/lib/project_board.py, and scripts/lib/helpers.py, then trace the /issue and /epic status commands that call update_project_status(). Verify the failure path for gh project item-edit and the six live project statuses. Done means status updates fail visibly, all six statuses are handled, and the acceptance checks pass, including end-to-end movement across the board.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
STATUS_OPTIONS in scripts/lib/project_config.py holds stale single-select option IDs that
no longer match the live project board, and it is missing three of the six statuses entirely.
update_project_status() reports success anyway, so every workflow command that moves an issue on
the board is almost certainly a no-op today.
Found while planning the Cloud Accounts & Storage
milestone.
Evidence
scripts/lib/project_config.py:
STATUS_OPTIONS = {
"In Progress": "47fc9ee4",
"Needs Review": "44687678",
"Done": "98236657",
}
Live, via gh project field-list 3 --owner jcollard:
| Status | In project_config.py |
Live board | Match |
|---|---|---|---|
| Concept | missing | c1706669 |
❌ |
| Todo | missing | a05f3ea6 |
❌ |
| Blocked | missing | 23cd6cc3 |
❌ |
| In Progress | 47fc9ee4 |
c6ed3476 |
❌ |
| Needs Review | 44687678 |
ea94e8c4 |
❌ |
| Done | 98236657 |
351c8535 |
❌ |
STATUS_FIELD_ID itself is correct (PVTSSF_lAHOADXapM4BKKH8zg6G6Vo), as are the Priority,
Effort, and Type option IDs. Only the Status option IDs have drifted.
Why it fails silently
scripts/lib/project_board.py:149-158 calls run(...) with check=False:
result, err = run(f'gh project item-edit ... --single-select-option-id {option_id}', check=False)
if result is None and err:
return False, f"Failed to update status: {err}"
return True, f"Status updated to {status}"
But scripts/lib/helpers.py:44-47 only returns None when check=True:
if check and result.returncode != 0:
return None, result.stderr
return result.stdout.strip() if capture else "", result.stderr
With check=False the function returns (stdout, stderr) regardless of exit code, so
result is None is never true and the caller reports "Status updated to ..." on a failed
gh invocation. The bad option ID and the swallowed exit code combine into a false success.
Impact
update_project_status() is called by /issue begin, /issue review, /epic begin,
/epic review, and /pr-review accept. Board status has to be maintained by hand, and the
commands actively report otherwise.
Suggested fix
- Refresh all six option IDs, including the missing
Concept,Todo, andBlocked. - Better: look the IDs up at runtime by name via
gh project field-listinstead of hardcoding
them, so the next board edit does not silently break this again. - Fix the error check in
update_project_statusso a non-zeroghexit is a failure. Either pass
check=True, or haverun()surface the return code so callers can test it directly. - Add a check that fails loudly when a status name is not present on the live board.
Acceptance criteria
- All six board statuses are settable programmatically
- A failed
gh project item-editreturns(False, ...), never a false success - Option IDs are resolved by name at runtime, or a test asserts the hardcoded IDs match the live board
- Verified end-to-end by moving a real issue between all six statuses
Priority
Medium — nothing is broken in the product, but the documented workflow silently does not do what it
says, and the failure is invisible to whoever runs it.
- Ngôn ngữ chính
- TypeScript
- Star
- 1
- Fork
- 0
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của jcollard/LuaInTheWeb
-
tech-debt
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
jcollard/LuaInTheWeb#752 ·
-
tech-debt
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 68/100
jcollard/LuaInTheWeb#690 ·
-
tech-debt
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 75/100
jcollard/LuaInTheWeb#590 ·
-
tech-debt
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
jcollard/LuaInTheWeb#518 ·
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
jcollard/LuaInTheWeb#235 ·
Tất cả issue của jcollard/LuaInTheWeb
Issue tương tự
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:other issue-rating: 🦞 diamond lobster no-stale P2
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
openclaw/openclaw#168089 · 2 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
✨ enhancement needs-discussion
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
-
[Bug]: [MCP/CLI] Bare loopback IP addresses (127.0.0.1:port) and hosts with ports fail to navigate due to erroneous scheme inferenceCó thể đã có người làm @alok-108 đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
microsoft/playwright#43263 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area:studio type:security
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement good first issue Stellar Wave trivial
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
StellarCanary/ProtocolCanary-Action#331 ·
Maintainer thường phản hồi trong vòng 1 ngày