Phase C: Code review (internal/review) #6
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#6
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 C: Code review —
internal/reviewSpec:
docs/features/04_code_review.md(normative) + P1–P9 indocs/features/README.md.Rollout: Wave C in
docs/features/09_rollout.md§3 (parallel with pulls). Depends on 02 (thread pattern), 03 (PR objects, merge task, PR page).Recommended implementation (verified against the doc)
internal/review:RouteProvider(Seam 1, both lanes viaapi.Lanes) + policy effectrequired-reviews(Seam 3,policy.RegisterEffect). Registers NO task kinds — the only long work is 03's merge task, which owns the gate.repos/<o>/<r>/pulls/<num>/sidecar subtree;num= shared P2 number;tid= 8-hex thread id):reviews/<seq:012x>.json(immutableCreate:{kind:review, seq, at, by, state: APPROVED|CHANGES_REQUESTED|COMMENTED, commit_sha == PR head at submit or 409, body}+ compensatingreview_dismissed(maintain only)).threads/<tid>/thread.json(CAS'd: anchor + resolved/resolved_by/resolved_at + counters) +threads/<tid>/events/<seq:012x>.json(review_thread_comment, immutable).review-requests.json(CAS'd current-state index; timeline audit via 03'sreview_requested/review_request_removedevents).next_review_seq+next_thread_numlive on the PR header — ONE CAS arbitration point.{path, side: NEW|OLD, old_start/old_lines, new_start/new_lines, commit_sha, context_sha}wherecontext_sha= hex SHA-256 overpath + "\n"+ ≤3 context lines each side (trailing-whitespace-trimmed, LF-joined). Drift is DERIVED at view time (client recomputes from diff) — mismatch renders outdated, never relocated/mutated. Single implementation:anchorContextSha(hunk, range)inlib/diff.js.review_summary {decision, latest{}, approvals, requested, threads_total, threads_unresolved}denormalized on PR header — pure function of immutable events recomputed inside the CAS loop (racers converge); latest-wins per reviewer, dismissal demotes to DISMISSED; staleness derived (commit_sha != head), never written.required-reviews {min_approvals, dismiss_stale, bypass}: push-time half denies direct pushes at receive-pack (honest, enforceable); merge-time half evaluated by 03's merge task against the base ref (most-restrictive across matching rules; surviving approvals ≥ min, no surviving CHANGES_REQUESTED, stale dismissed when flagged). Gate re-derives by scanning review events — NEVER trusts the denormalized summary.review-suggestmerges access.json ≥ read + team members + head-branch commit authors (20/page).Acceptance criteria
no-store; discovery in/api/v1 endpoints[]with provenancereview; SSEreview(with fresh summary) +threadframes on the repo stream.repo.pulls.reviews/threads/requests/suggest(or deferred to Wave D with a note).make cover≥ 95% oninternal/review;-raceclean; table-driven httptest per handler.Wave C2 starting: implementing docs/features/04 (code review) on branch feat/review — new package internal/review, required-reviews gate wired into 03's merge task via a review-provided gate function (no merge fork), UI on the PR page + SDK.
Wave C2 ready for review: #10 (branch feat/review). Summary, test/coverage results, and known gaps are in the PR description. Not merging per instructions.
Wave C2 review (PR #10,
719c3ac) — CLEAN, ready to merge.Spec conformance (docs/features/04 + P1–P9):
Seams/laws: no new deps (go.mod untouched; only internal+stdlib imports), core never imports review, pulls↔review one-directional via ReviewGate interface. Merge wiring is ONE call site (merge.go:161) with the live head; narration on failure. EvaluateProtect split verified by experiment: reverting pulls/policy.go:151 to Evaluate fails corr-g3 with "rejected by rule pr-gate" (the exact pre-fix symptom); restored, passes. Non-PR push behavior unchanged — receive-pack path (internal/api/policy.go:281) still uses full Evaluate, and pure-protect docs evaluate identically.
Verification (scratch worktree /tmp/pr10, since removed): gofmt clean; go vet clean; go test -race review PASS (96.2% ≥95%); policy PASS (97.2%); pulls -race PASS (incl. merge-gate wiring); node --test diff-review + sdk-reviews 8/8. go build of affected packages OK (./... embed failure is only the unbuilt web/dist in a fresh worktree — environmental).
No fixes pushed — nothing to fix. MERGE RECOMMENDATION: ready to merge.
Wave C2 complete: PR #10 reviewed with no defects found, merged as
7e796be. internal/review 96.2% coverage, -race clean. Closing.