Skip to content

Expose authorized ThreadDesk commands through dynamic MCP and add whiteboard lifecycle - #97

Merged
landjunge merged 3 commits into
mainfrom
feat/dynamic-mcp-whiteboards-20261030
Oct 30, 2026
Merged

landjunge merged 3 commits into
mainfrom
feat/dynamic-mcp-whiteboards-20261030

Conversation

@landjunge

@landjunge landjunge commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner

ThreadDesk now derives concrete MCP tools directly from its command registry. Each authorized command advertises its domain JSON Schema, parameters, scopes, workspace binding and revision/operation contract; execution returns a verifiable result digest and durable operation receipt where applicable. Registry/module changes refresh discovery, including idle tools/list_changed notifications. Local schema references retain their resource root. Owner-only commands remain restricted. The catalog contains 141 commands: 133 available through MCP on JSON and 136 on SQLite, or 172/175 discovery tools including compatibility tools.

Whiteboards keep their existing thread and append-only log. They can be created, opened, closed, edited, renamed, archived, restored and moved to trash. Stable graph nodes and relationships follow canonical state and restoration. Reversible deletion explicitly confirms moving the owning thread and its notes; the existing trash traffic light and permanent-purge preview, digest and approval remain enforced. Both packaged entrypoints support standalone --mcp. Open/closed denotes persisted board state, not an acknowledgement from an operating-system window.

Merged normally as 067a525798817629ae1d2b8e741d109230f54d08, built from that clean integrated pin and installed in /Applications/ThreadDesk.app. Independent installation review approved the actual package, signature and running original workspace. All 3,791 canonical files retained identical hashes; only two disposable search indexes regenerated and passed their integrity check. The previous app and private installation evidence are retained for rollback.

Validation:

  • Complete pre-merge CI: two full runs of 2,518 tests each, zero failures/errors/skips, plus required browser and JavaScript checks. Desktop installer gates also passed. The integrated runtime source tree equals the reviewed and tested head.
  • Real installed stdio MCP processes passed JSON and SQLite whiteboard lifecycle, discovery, CAS/replay, stable graph restoration and rejection of unapproved purge, with 35 canonical result digests verified per backend. No source-environment fallback was used.
  • Native installed-app captures show the closed board inspector and the same graph node becoming active after an MCP open. Package audit independently matched 179 bundled code objects and 76 assets to source. Independent code and installation reviews have no open findings.
  • Integrated-main test results: downloaded JUnit artifacts again confirm two full runs of 2,518 cases, zero failures/errors/skips. Main desktop installers and Linux TLS restore passed.

Inventory, contracts and reproducible source evidence include the preserved initial CI failures and their corrections. Final installation, native screenshots, data-preservation manifests and independent review are recorded in the private local dynamic-mcp-whiteboards-20261030/integration.json evidence bundle.

KiraBridge code, app, configuration and terminal control remain unchanged. A final read-only counterpart probe still advertises 34 old tools from its configured 770bbc9 snapshot. Selecting the new standalone endpoint and exercising it through the actual KiraBridge principal remains an external integration dependency; this PR does not claim that end-to-end result.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-30T19:03:19.824036Z eb82df9 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bd6dfb7bb2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +35 to +37
marker = entry.metadata.get("whiteboard_edit")
if (not isinstance(marker, dict) or not isinstance(marker.get("entry_id"), str)
or not isinstance(marker.get("previous_entry_id"), str)):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reserve correction markers for the whiteboard edit operation

When an append-only module supplies a valid metadata.whiteboard_edit marker, this projection treats its contribution as an authorized correction of another author's entry. ModuleContext.append_whiteboard() forwards arbitrary metadata after checking only whiteboard:append, so a module can replace the displayed text under an existing human entry's ID and actor header while its own contribution disappears from the displayed log. Reserve these markers in public/module append paths and create them only through the controlled edit operation.

Useful? React with 👍 / 👎.

Comment on lines +126 to +129
fields = {"actor": actor, "actor_type": actor_type, "entry_type": "note", "content": content,
"metadata": {"whiteboard_edit": {"entry_id": entry_id, "previous_entry_id": previous}},
"task_id": original.task_id, "handoff_id": original.handoff_id, "run_id": original.run_id,
"room_id": original.room_id}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Apply corrections to current-state and handoff consumers

When a user edits a task contribution, the UI displays the corrected task, but whiteboard.stand still reports the original text as open_task: stand() reads raw task entries, whereas this operation appends a note. Handoffs likewise serialize both texts without the correction relationship because history_for_handoff() drops metadata. This leaves downstream consumers with stale or ambiguous instructions despite a successful edit. Apply the effective-entry projection to current-state consumers and either project corrections or preserve their relationship in handoff context.

Useful? React with 👍 / 👎.

@landjunge
landjunge merged commit 067a525 into main Oct 30, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants