main · last commit
18 hours ago ·
8tmadfpi
spec-3vz Phase 4: review plane — approve/reject in a browser
Past Stand
bd reopen spec-3vz
| Created by | Eugene Blikh |
| Owner | bigbes@gmail.com |
| Created | 2026-07-23T04:09:25Z |
| Started | 2026-07-23T06:31:53Z |
| Updated | 2026-07-23T06:52:55Z |
| Closed | 2026-07-23T06:52:55Z |
Proposal pages at stable URLs (returned by every write), the inbox, prose diff, approve (merges immediately) / reject, status lifecycle, and the digest of policy-merged firehose content.
Productionise prosediff (the Phase 0 spike) into the review UI. CRITICAL requirement from the Phase 0 verdict: 13% of real prose modifications shred into interleaved fragments (similarity <= 0.73), so the UI MUST switch to a two-column old/new view below ~0.75 and inline word diffs above it — building only the inline renderer makes one review in eight unreadable. The prosediff package already emits the (Hash, HeadingPath, Ordinal) comment-anchor tuple. Reads a proposal branch via service.ReadDocumentAtRef (the deliberately-awkward bypass), never the normal read path.
spec-by6
— Phase 5: comments, webhooks, mutations, vector search
blocks
spec-by6
— Phase 5: comments, webhooks, mutations, vector search
blocks
open
spec-by6.3
— Phase 5b: inline comments on proposals
parent-child
closed
spec-by6.3.2
— service: comment API + policy auto-merge gate
parent-child
closed
spec-by6.3.4
— mcpsrv: spec_comment tool (read + reply, no resolve)
blocks
closed
spec-by6.3.3
— web: commentable diff — context blocks, anchor ids, comment UI
blocks
closed
spec-by6.3.1
— Comment anchors: core type + db schema
parent-child
closed
spec-by6.3.5
— Port review UI to a line-numbered unified prose diff
parent-child
closed
spec-3m9
— Phase 5a: webhooks + notifications on proposal lifecycle
parent-child
closed
spec-8y4
— Phase 5a-1: adopt core-go graph conventions (directives, database.Model, cursors, auth+user model)
parent-child
closed
spec-45j
— Phase 5a-2: webhook tables, SDL, resolvers, delivery on proposal open/merge/reject
parent-child
closed
spec-by6.2
— Attachments: image embeds render as visibly missing
parent-child
open
spec-by6.4
— A code fence whose only change is its info string renders as unchanged
parent-child
closed
spec-by6.1
— GraphQL complexity limit on the /query surface
parent-child
open
spec-by6.5
— prosediff: an equal span's Space flag is read from the old side only
parent-child
closed
| id | spec-3vz |
| content_hash | 9f3be3e241f18287f989301fe6cea7e81ffd2c66663911b2ec0f2eec9b4425ff |
| title | Phase 4: review plane — approve/reject in a browser |
| description | Proposal pages at stable URLs (returned by every write), the inbox, prose diff, approve (merges immediately) / reject, status lifecycle, and the digest of policy-merged firehose content. |
| design | Productionise prosediff (the Phase 0 spike) into the review UI. CRITICAL requirement from the Phase 0 verdict: 13% of real prose modifications shred into interleaved fragments (similarity <= 0.73), so the UI MUST switch to a two-column old/new view below ~0.75 and inline word diffs above it — building only the inline renderer makes one review in eight unreadable. The prosediff package already emits the (Hash, HeadingPath, Ordinal) comment-anchor tuple. Reads a proposal branch via service.ReadDocumentAtRef (the deliberately-awkward bypass), never the normal read path. |
| acceptance_criteria | |
| notes | |
| status | closed |
| priority | 2 |
| issue_type | feature |
| assignee | Eugene Blikh |
| estimated_minutes | NULL |
| created_at | 2026-07-23T04:09:25Z |
| created_by | Eugene Blikh |
| owner | bigbes@gmail.com |
| updated_at | 2026-07-23T06:52:55Z |
| closed_at | 2026-07-23T06:52:55Z |
| closed_by_session | |
| external_ref | NULL |
| spec_id | |
| compaction_level | 0 |
| compacted_at | NULL |
| compacted_at_commit | NULL |
| original_size | NULL |
| sender | |
| ephemeral | 0 |
| wisp_type | |
| pinned | 0 |
| is_template | 0 |
| mol_type | |
| work_type | |
| source_system | |
| metadata | �{} |
| source_repo | |
| close_reason | Review plane shipped: proposal page at /~owner/space/p/<id> with the prose diff (inline word-diff above 0.75 similarity, two-column old/new below — the Phase 0 verdict's hard requirement, in web/diff.go), approve(merge)/reject as owner-only CSRF-guarded POSTs, status badges, and the /inbox review queue + policy-merged digest. service.ProposalDiff/InboxProposals/DigestProposals/MergeHuman back it; web.Reader extended. Diff reads the proposal branch by resolving its tip to a sha (pinned read) rather than the ReadDocumentAtRef bypass — cleaner and immutable. Validated: diff renderer unit tests (inline/two-column/escaping), proposal-page + approve/reject handler tests (CSRF, owner-only, stale->409, wrong-space->404), inbox tests, and PG-backed service tests. Follow-up: digest_mark 'since last seen' tracking. |
| event_kind | |
| actor | |
| target | |
| payload | |
| await_type | |
| await_id | |
| timeout_ns | 0 |
| waiters | |
| hook_bead | |
| role_bead | |
| agent_state | |
| last_activity | NULL |
| role_type | |
| rig | |
| due_at | NULL |
| defer_until | NULL |
| no_history | 0 |
| started_at | 2026-07-23T06:31:53Z |
| is_blocked | 0 |
| id | 2bc1d874-c706-5e56-abef-729376722ec7 |
| issue_id | spec-3vz |
| type | parent-child |
| created_at | 2026-07-23T07:09:25Z |
| created_by | Eugene Blikh |
| metadata | �{} |
| thread_id | |
| depends_on_issue_id | spec-ejq |
| depends_on_wisp_id | NULL |
| depends_on_external | NULL |
| id | 358c0130-0e1a-5942-870d-d417425737b6 |
| issue_id | spec-3vz |
| type | blocks |
| created_at | 2026-07-23T07:09:26Z |
| created_by | Eugene Blikh |
| metadata | �{} |
| thread_id | |
| depends_on_issue_id | spec-zqb |
| depends_on_wisp_id | NULL |
| depends_on_external | NULL |
| id | 4b3a520e-4fc2-5dfe-9fee-df66f43bf7d9 |
| issue_id | spec-by6 |
| type | blocks |
| created_at | 2026-07-23T07:09:27Z |
| created_by | Eugene Blikh |
| metadata | �{} |
| thread_id | |
| depends_on_issue_id | spec-3vz |
| depends_on_wisp_id | NULL |
| depends_on_external | NULL |
| id | 019f8d29-f61c-7c87-aa9f-c2d08aa053de |
| issue_id | spec-3vz |
| event_type | created |
| actor | Eugene Blikh |
| old_value | |
| new_value | |
| comment | NULL |
| created_at | 2026-07-23T07:09:25Z |
| id | 019f8dac-62b4-7586-b6ed-d1fd10a209a3 |
| issue_id | spec-3vz |
| event_type | claimed |
| actor | Eugene Blikh |
| old_value | {"id":"spec-3vz","title":"Phase 4: review plane — approve/reject in a browser","description":"Proposal pages at stable URLs (returned by every write), the inbox, prose diff, approve (merges immediately) / reject, status lifecycle, and the digest of policy-merged firehose content.","design":"Productionise prosediff (the Phase 0 spike) into the review UI. CRITICAL requirement from the Phase 0 verdict: 13% of real prose modifications shred into interleaved fragments (similarity \u003c= 0.73), so the UI MUST switch to a two-column old/new view below ~0.75 and inline word diffs above it — building only the inline renderer makes one review in eight unreadable. The prosediff package already emits the (Hash, HeadingPath, Ordinal) comment-anchor tuple. Reads a proposal branch via service.ReadDocumentAtRef (the deliberately-awkward bypass), never the normal read path.","status":"open","priority":2,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-23T04:09:25Z","created_by":"Eugene Blikh","updated_at":"2026-07-23T04:09:25Z"} |
| new_value | {"assignee":"Eugene Blikh","status":"in_progress"} |
| comment | NULL |
| created_at | 2026-07-23T09:31:52Z |
| id | 019f8dbf-a581-7353-ac71-aac7403f5466 |
| issue_id | spec-3vz |
| event_type | closed |
| actor | Eugene Blikh |
| old_value | |
| new_value | Review plane shipped: proposal page at /~owner/space/p/<id> with the prose diff (inline word-diff above 0.75 similarity, two-column old/new below — the Phase 0 verdict's hard requirement, in web/diff.go), approve(merge)/reject as owner-only CSRF-guarded POSTs, status badges, and the /inbox review queue + policy-merged digest. service.ProposalDiff/InboxProposals/DigestProposals/MergeHuman back it; web.Reader extended. Diff reads the proposal branch by resolving its tip to a sha (pinned read) rather than the ReadDocumentAtRef bypass — cleaner and immutable. Validated: diff renderer unit tests (inline/two-column/escaping), proposal-page + approve/reject handler tests (CSRF, owner-only, stale->409, wrong-space->404), inbox tests, and PG-backed service tests. Follow-up: digest_mark 'since last seen' tracking. |
| comment | NULL |
| created_at | 2026-07-23T09:52:55Z |
No comments.
Close reason