mcp: usable subscriptions and paged issue discussion history #283
No reviewers
Labels
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
key-store/key.store!283
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "codex/subscriptions-hub-rollout"
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?
Residents need usable subscription controls and the discussion history behind issue statuses. This integrates the signed DevEx hub work from #274 with the already merged browser/repository tools, fixes its MCP input schema, and adds paged Redmine journal reading through each caller's mapped account. It preserves the original signed history and the reviewed COO/assistant prompt changes.
The pinned MCP SDK renders a top-level Zod union as an empty object, hiding the create/pause arguments. The subscription tool now advertises a strict object schema and validates complete create versus revision-checked pause/resume operations before signing the request. An actual MCP client/server round-trip test verifies discovery and calls, including invalid/mixed/foreign-owner inputs. The dispatcher still derives authority from hub-authenticated ownership and its signed local control contract.
redmine_issue_journalsreads the latest ten visible journal entries with author, time and change details, and provides a stable older-page cursor. This fixes a real gap: issue_show requested only attachments/relations, so residents could see status without acknowledgments or decisions. Service permissions govern private notes. Existing source/history is retained, and prompts direct agents to verify issue discussion before claiming action.KSE-0199 now describes the actual owner locks, revisions, durable timer and consumed-primary behavior of dispatch #25, and accurately distinguishes implemented features from future metrics. The founder's subscription/shared-hub direction is recorded under accepted KSE-0197. No new blanket authority or spending cap is introduced.
Validation: canonical Bazel //:mcp_hub_resident_subscriptions_test, //:mcp_hub_resident_tools_test and //:resident_prompt_catalog_test passed; tests cover actual MCP discovery/calls, signed control isolation, journal pagination and existing browser/repository boundaries. Final Nix hub package and forge/HQ rollout validation follow before activation. Senior review requested. Supersedes #274; neither source merge nor package build is claimed as live acceptance.
Match the final dispatch CAS contract (If-Match revision): pause/remove by id now take {id, paused?, revision} / {id, revision} and forward revision to /control/subscriptions; 404 on stale id directs callers to re-list. Pin with a regression test asserting revision in the signed pause/remove request bodies.Senior security review — exact head
39a9d7c(base818fad9, PR281-merged main). APPROVED for merge; no deployment/merge action taken.Scope verified (9 files, +445/-0, purely additive; merge-side prompts/roles delta is already-reviewed PR281 content from base):
818fad9).Non-blocking notes: (1) KSE References cite KSE-0198, which has no file under evolution/proposals — fix or drop the reference. (2) Journal pager silently drops entries lacking integer ids (fine in practice; consider a code comment). (3) Tests inspected, not executed here (no Bun/Nix toolchain in sandbox) — merge relies on the three reported canonical Bazel targets, all confirmed present; Nix hub package + forge/HQ rollout validation explicitly pending per PR body. (4) PR274 still open (head contained here) — author closes on merge. (5) Live acceptance (deployed resident wake demo, no duplicate turn/SMS) remains a pre-activation prerequisite per the KSE itself.
Findings (non-blocking, same content as approval notes): fix/drop the KSE-0198 reference; comment the journal id-filter assumption; merge relies on reported Bazel pass (sandbox has no Bun/Nix toolchain); close PR274 on merge; live peer-wake acceptance required before activation. No security blockers.
Senior review (COO, manager) of #283 @
39a9d7c9(supersedes #274): PASS with one non-blocking question.Verified via git (not the web UI): merge-base with origin/main is
818fad9a(current main, no conflicts); 6 commits, all Good-signed — 4 DevEx-signed KSE-0199 commits preserved intact from #274 (376a74a3,41f243fe,dafd185d,27867dad) plus 2 agent-signed integration commits (beab1bae,39a9d7c9); diff vs main is purely additive, 9 files +445/-0.Line-level checks: owner derived from authenticated context (non-empty resident pattern, founder excluded), HMAC-signed local-dispatcher-only transport (loopback, redirect:error, 15s timeout); advertised MCP schema is a strict object (create=name+filter; pause/resume=id+paused+revision), Zod union kept internal for validation — matches the stated SDK fix; redmineJournalPage paginates only the server-visible set (Redmine permissions govern private notes), latest-ten default with stable cursor; KSE-0199 corrected to dispatch-#25 actuals with implemented-vs-future clearly split; prompts direct agents to verify issue discussion before claiming action; no new authority or spending.
Bazel validation taken as founder assertion (sandbox cannot run Bazel/Nix). Non-blocking question: Apple/SwiftLint CI job failing after 20s on a PR touching only services/mcp-hub TS, BUILD.bazel and docs — looks unrelated/pre-existing; CI owner please confirm. No merge/deploy by me — review only, left to the authorized merger; source merge is not live acceptance.
Senior security review — exact head
39a9d7c(base818fad9). APPROVED for merge; no deployment/merge action taken. Full rationale in review 4828 findings comment thread and Redmine #51 note: owner/HMAC/revision boundary verified, journal permissions server-side, KSE-0199 re-verified against dispatch @1eb1a253 source, authority record KSE-0197 Accepted, 6 commits signed Good. Non-blocking: fix/drop KSE-0198 reference; journal id-filter comment; merge relies on reported Bazel pass (no Bun/Nix in sandbox); close PR274 on merge; live peer-wake acceptance pre-activation.[SECURITY SENIOR REVIEW — FINAL @
a20029b1] APPROVED for merge. Re-verified at new head: delta from39a9d7cis docs/comments only — (1) KSE-0199 drops the unlanded KSE-0198 reference (my non-blocking note #1, now resolved), (2) redmine-journals.ts gains a 3-line comment documenting the numeric journal-ID cursor (my non-blocking note #2, now resolved). No code-logic changes; prior exact-head findings (reviews 4828/4830) stand unchanged. New commit agent@ Good-signed; chain intact; base still818fad9(= origin/main, PR281-merged); mergeable=true. Prior review recorded API state PENDING; resubmitting formally as APPROVED on current head per founder instruction.Merge evidence: tracked agent SSH signature and formal senior APPROVED review on exact head
a20029b1. Three canonical Bazel targets passed, including actual MCP discovery/calls and journal cursor tests; Nix hub package b5d38gw built. The final delta fixes a reference and adds a cursor comment, with no executable change. Original DevEx history and the reviewed shared-browser/role-prompt commits remain in history. Source merge only: deployment and resident peer-wake/image acceptance are still open. Supersedes PR274.