main · last commit
18 hours ago ·
8tmadfpi
spec-by6.3.4 mcpsrv: spec_comment tool (read + reply, no resolve)
Past Stand
bd reopen spec-by6.3.4
| Created by | Eugene Blikh |
| Owner | bigbes@gmail.com |
| Created | 2026-07-24T18:57:18Z |
| Updated | 2026-07-24T19:44:55Z |
| Closed | 2026-07-24T19:44:55Z |
The agent half of the loop. spec_comment lets an agent list the comments on a proposal it authored and reply to them; it must NOT resolve one, since an agent marking its own critique resolved defeats the auto-merge gate. Reuses the Phase 3 provenance path (agent + agent_session) for reply authorship, and the existing owner+agents read gate from spec-jjo. mcpsrv/mcpsrv.go:39 still documents spec_comment as deliberately absent — update that comment when it lands.
Implemented. Divergence from this issue's original text, accepted: reads are NOT narrowed to 'a proposal the agent authored'. Agent identity is self-declared (X-Agent/X-Agent-Session headers) and all agents share one token, so an authorship check would gate on a string the caller chooses — stricter on paper than the owner+agents read plane (spec-jjo) it sits in, while enforcing nothing. Revisit if/when per-agent token scoping lands (spec-by6 backlog). No-resolve is enforced by TYPE: Commenter names only Threads/ReplyTo/GetProposal/ProposalDiff, so service.CommentOn and service.ResolveThread are unreachable from the handler however service/ grows. Writer is now Proposer+Commenter. Extra beyond the issue: replying requires proposal+thread and checks membership, because a thread id is global and service.ReplyTo takes only the id — a mistyped id would otherwise reply on a stranger's proposal.
spec-by6.3.2
— service: comment API + policy auto-merge gate
blocks
closed
spec-by6.3
— Phase 5b: inline comments on proposals
parent-child
closed
Nothing depends on this issue.
spec-by6.3.2
— service: comment API + policy auto-merge gate
blocks
closed
spec-by6.3
— Phase 5b: inline comments on proposals
parent-child
closed
spec-by6
— Phase 5: comments, webhooks, mutations, vector search
parent-child
open
spec-3vz
— Phase 4: review plane — approve/reject in a browser
blocks
closed
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
spec-by6.3.1
— Comment anchors: core type + db schema
blocks
closed
| id | spec-by6.3.4 |
| content_hash | 9a60d8cbdadc7a62b1b132d40e77bcd0d794e4d0a6a37c0c7120b2bc59085889 |
| title | mcpsrv: spec_comment tool (read + reply, no resolve) |
| description | The agent half of the loop. spec_comment lets an agent list the comments on a proposal it authored and reply to them; it must NOT resolve one, since an agent marking its own critique resolved defeats the auto-merge gate. Reuses the Phase 3 provenance path (agent + agent_session) for reply authorship, and the existing owner+agents read gate from spec-jjo. mcpsrv/mcpsrv.go:39 still documents spec_comment as deliberately absent — update that comment when it lands. |
| design | |
| acceptance_criteria | |
| notes | Implemented. Divergence from this issue's original text, accepted: reads are NOT narrowed to 'a proposal the agent authored'. Agent identity is self-declared (X-Agent/X-Agent-Session headers) and all agents share one token, so an authorship check would gate on a string the caller chooses — stricter on paper than the owner+agents read plane (spec-jjo) it sits in, while enforcing nothing. Revisit if/when per-agent token scoping lands (spec-by6 backlog). No-resolve is enforced by TYPE: Commenter names only Threads/ReplyTo/GetProposal/ProposalDiff, so service.CommentOn and service.ResolveThread are unreachable from the handler however service/ grows. Writer is now Proposer+Commenter. Extra beyond the issue: replying requires proposal+thread and checks membership, because a thread id is global and service.ReplyTo takes only the id — a mistyped id would otherwise reply on a stranger's proposal. |
| status | closed |
| priority | 3 |
| issue_type | task |
| assignee | NULL |
| estimated_minutes | NULL |
| created_at | 2026-07-24T18:57:18Z |
| created_by | Eugene Blikh |
| owner | bigbes@gmail.com |
| updated_at | 2026-07-24T19:44:55Z |
| closed_at | 2026-07-24T19:44: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 | spec_comment: list threads with anchor state + reply; no-resolve enforced by interface. 9 tests green, no DB needed. Committed f82d90a. |
| 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 | NULL |
| is_blocked | 0 |
| id | 0bcd2cb8-91ff-5495-af9b-118d58218cb0 |
| issue_id | spec-by6.3.4 |
| type | blocks |
| created_at | 2026-07-24T21:57:30Z |
| created_by | Eugene Blikh |
| metadata | �{} |
| thread_id | |
| depends_on_issue_id | spec-by6.3.2 |
| depends_on_wisp_id | NULL |
| depends_on_external | NULL |
| id | 7e0d0f19-7eb9-5aae-ad63-b01c54c304ca |
| issue_id | spec-by6.3.4 |
| type | parent-child |
| created_at | 2026-07-24T21:57:17Z |
| created_by | Eugene Blikh |
| metadata | �{} |
| thread_id | |
| depends_on_issue_id | spec-by6.3 |
| depends_on_wisp_id | NULL |
| depends_on_external | NULL |
| id | 019f957d-310a-7bbf-b9e0-a4a74e4eca7b |
| issue_id | spec-by6.3.4 |
| event_type | created |
| actor | Eugene Blikh |
| old_value | |
| new_value | |
| comment | NULL |
| created_at | 2026-07-24T21:57:17Z |
| id | 019f95a8-c52f-776a-a83c-3e53ca1eda2b |
| issue_id | spec-by6.3.4 |
| event_type | updated |
| actor | Eugene Blikh |
| old_value | {"id":"spec-by6.3.4","title":"mcpsrv: spec_comment tool (read + reply, no resolve)","description":"The agent half of the loop. spec_comment lets an agent list the comments on a proposal it authored and reply to them; it must NOT resolve one, since an agent marking its own critique resolved defeats the auto-merge gate. Reuses the Phase 3 provenance path (agent + agent_session) for reply authorship, and the existing owner+agents read gate from spec-jjo. mcpsrv/mcpsrv.go:39 still documents spec_comment as deliberately absent — update that comment when it lands.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-07-24T18:57:18Z","created_by":"Eugene Blikh","updated_at":"2026-07-24T18:57:18Z"} |
| new_value | {"notes":"Implemented. Divergence from this issue's original text, accepted: reads are NOT narrowed to 'a proposal the agent authored'. Agent identity is self-declared (X-Agent/X-Agent-Session headers) and all agents share one token, so an authorship check would gate on a string the caller chooses — stricter on paper than the owner+agents read plane (spec-jjo) it sits in, while enforcing nothing. Revisit if/when per-agent token scoping lands (spec-by6 backlog).\n\nNo-resolve is enforced by TYPE: Commenter names only Threads/ReplyTo/GetProposal/ProposalDiff, so service.CommentOn and service.ResolveThread are unreachable from the handler however service/ grows. Writer is now Proposer+Commenter.\n\nExtra beyond the issue: replying requires proposal+thread and checks membership, because a thread id is global and service.ReplyTo takes only the id — a mistyped id would otherwise reply on a stranger's proposal."} |
| comment | NULL |
| created_at | 2026-07-24T22:44:53Z |
| id | 019f95a8-cbc7-7080-831a-ec34bf9de8cf |
| issue_id | spec-by6.3.4 |
| event_type | closed |
| actor | Eugene Blikh |
| old_value | |
| new_value | spec_comment: list threads with anchor state + reply; no-resolve enforced by interface. 9 tests green, no DB needed. Committed f82d90a. |
| comment | NULL |
| created_at | 2026-07-24T22:44:55Z |
No comments.
Close reason