Phase B: Issues (internal/issues) #4
Labels
No labels
actions
bug
cli
duplicate
enhancement
fork
forum
git storage
help wanted
insights
invalid
issues
moderation
oidc
ownership transfer
packages
pr/merge protection rules
projects
pull requests
question
releases
sponsorships
tags
webhooks
wiki
wontfix
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
crueber/walhub#4
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Phase B: Issues —
internal/issuesSpec:
docs/features/02_issues.md(normative) + P1–P9 indocs/features/README.md.Rollout: Wave B in
docs/features/09_rollout.md§3 (parallel with checks + notify core trays). Depends on 01 (roles, access.json). Proves the thread pattern end to end.Recommended implementation (verified against the doc)
internal/issues: oneapi.RouteProvider(Seam 1, viaapi.Lanes— every route on both/{o}/{r}/api/…and/api-browser/…) + one task kindissue-index-compact(Seam 5). No other task kinds — mutations are synchronous (P8).repos/<o>/<r>/prefix;<num:06x>hex keys, decimal on the wire):meta/next_num— P2 shared counter with PRs (CAS loop; human-rate, contention a non-issue).issues/<num>/thread.json(CAS'd P3 header: num/kind/title/state/state_reason/labels/assignees/milestone/participants/next_event_seq/comment_count/reaction_summary/version) +issues/<num>/events/<seq:012x>.json(immutable,Createonly).issues/index.json(P4 CAS'd card index for BOTH kinds; 02 owns schema; joins frozen overwritable list) — header-then-index order, repair-on-next-mutation, LIST fallback.meta/labels.json(CAS'd; names immutable — rename = delete + create with compensating events) +meta/milestones/<id:06x>.json+ allocatormeta/milestones/index.json.Createevent; gaps allowed). No cross-feature/cross-thread locks — CAS loops only (13 §3/§5).#Nparsed at WRITE time in the commenting handler (fence/code-span skipper, cap 100, dedup by (source seq, target)); best-effort P3 two-step on target thread; missing target silently skipped.fixes #N): parsed at PR MERGE time only — merge task calls 02-owned seamApplyClosingReferences(repo, pr_num, merged_sha, texts…); never on the push path.reaction_summaryin header (same CAS); emoji allowlist; unique per (principal, target, content).assigned,mentioned(@-parse),subscribed(fromparticipants[]); 06 must not scan the event log.Acceptance criteria
(repo, kind)single-flight, SSE-attachable.make cover≥ 95% oninternal/issues;-raceclean; table-driven httptest per handler.Wave B started: new internal/issues package (P2 numbering, P3 threads/events, labels, milestones, refs, reactions, index+compact, notify seam) on both API lanes, plus SDK/UI/EVIDENCE.
Wave B ready for review: PR #8 (#8) — internal/issues end to end per docs/features/02. Race-clean, 96.3% cover, live-stack verified. Not merging.
PR #8 review (feat/issues, Wave B) — round 1 findings, all fixed in review commit:
Must-fix, fixed:
Notes (no code change):
Tests: gofmt clean, go vet clean, go test -race ./internal/issues/... ok, coverage 96.3% (≥95% gate), go test -race ./internal/server/... ok, node --test sdk-issues 2/2 pass, Issue.jsx esbuild-compiles.
PR #8 review round 2 (post-fix re-review): all 5 findings verified fixed; no new findings. Labels page uses the 200 {threads_affected} delete report correctly. Final: gofmt clean, vet clean, issues -race ok at 96.3% coverage, server -race ok, sdk js 2/2, Issue.jsx esbuild-compiles. Recommendation: ready to merge (merge itself left to you per instructions).
Wave B complete: PR #8 reviewed (5 findings fixed in
0ac7e52), merged as99742ba. internal/issues 96.3% coverage, -race clean. Closing.