~bigbes/sr-ht-spec · parade

main · last commit 18 hours ago · 8tmadfpi

← Back to the parade

spec-3vz Phase 4: review plane — approve/reject in a browser Past Stand

status: closed P2 feature @Eugene Blikh
bd reopen spec-3vz
Created byEugene Blikh
Ownerbigbes@gmail.com
Created2026-07-23T04:09:25Z
Started2026-07-23T06:31:53Z
Updated2026-07-23T06:52:55Z
Closed2026-07-23T06:52:55Z
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.

Depends on

  • spec-ejq — spec.sr.ht — reviewable document storage for humans and agents parent-child open
  • spec-zqb — Phase 3: write plane — agents propose blocks closed

Depended on by

  • spec-by6 — Phase 5: comments, webhooks, mutations, vector search blocks

Unblocks — everything waiting on this, transitively

  • 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

No comments.

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.
  • Eugene Blikh added under epic spec-ejq · 2026-07-23T07:09:25Z
  • Eugene Blikh created the issue · 2026-07-23T07:09:25Z
  • Eugene Blikh added dependency on spec-zqb · 2026-07-23T07:09:26Z
  • Eugene Blikh spec-by6 now depends on this · 2026-07-23T07:09:27Z
  • Eugene Blikh claimed · 2026-07-23T09:31:52Z
  • Eugene Blikh closed the issue · 2026-07-23T09:52:55Z
    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.
Stored rows — what this pane was built from, as read
issues 1 row
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
dependencies 3 rows
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
events 3 rows
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