Feedback

A drop-in feedback capability for any MeshWeaver deployment. A user types /feedback <message> in any thread; the flow captures the message plus the context that makes it actionable, files it as a draft, and shows the user a polished preview with a Submit button — so they see exactly what will be sent before it goes. Only when they click Submit does it reach the shared Feedback space, where Systemorph reviews it.

What gets captured

Every submission is a Feedback/Feedback node whose FeedbackContent records:

Field Source Notes
message the user's words, verbatim the record itself
submittedBy / submittedByName # Current User context who
timestamp server, stamped on submit real ISO-8601 UTC; a client can't backdate
mainNodePath / mainNodeTitle / mainNodeGist # Current Application Context where they were (the main panel) + a gist
sidePanel the agent, if reachable related area open beside the main panel
extraContext the agent, opportunistically role, repro detail, related paths, …
category inferred, only if obvious bug | idea | praise | question — and answer, filed by /wrong-answer for a qualitative miss
status server Draft on capture (invisible to reviewers); flips to New when the user hits Submit; a reviewer then moves it to Triaged / Resolved / WontFix
issueUrl the control instance the GitHub issue the Systemorph triage agent filed for it, written back when the feedback was submitted here and turned out to be actionable; empty otherwise

Every context field is optional — the agent fills what it can reach and leaves the rest empty (shown as "not captured" in the review view). A submission never fails because a field couldn't be filled.

The pieces

After Submit: technical feedback is handed to the Systemorph triage agent

Maintainer, 2026-09-12: "the feedback skill must do exactly this ⇒ if it is a technical issue / bug report / feature request ⇒ hand over to systemorph-com triage agent."

When the user clicks Submit — and never before — the submission reads New, and its OWN hub hands it over (FeedbackHandover.HandOverOnActivation, Source/FeedbackHandover.cs): the hub observes its node, and whenever the node reads New, technical, and not yet stamped handedOverAt, it sends ONE signed event and writes the stamp. Publish merely flips Draft → New; it no longer hands over inline. Since 2026-09-20 this is the ONLY hand-over path, and it is the RequestedX + owning-hub-watcher shape for a reason: a submission created New by anyone — the /feedback skill, an agent through MCP, the platform's thread supervisor filing an exhausted thread (Doc/Architecture/ThreadSupervision) — is handed over the moment its hub activates, not only when a person pressed a button in this process. Creation alone activates nothing (the create is handled by the owner namespace's hub), so FeedbackSubmitter.Submit reads the node once after creating it — the same wake hub.StartThread gives a thread — and an agent creating the node directly must read it once too. handedOverAt on the submission is the proof it went; a technical New submission without it on a portal whose control inbox is configured is one whose hub never activated.

What is handed over is unchanged:

The feedback What happens
category: bug or idea handed over, always
category: question, or no category handed over when the message reads as technical — it names a defect or a feature (FeedbackHandover.LooksTechnical)
category: praise, or a non-technical message stays in this instance's Inbox; nothing is sent
category: answer (a /wrong-answer report) stays in this instance's Inbox even when the message reads as technical — its addressee is the agent's owner, a space owner or a content owner here (Wrong answers); the one kind that is a platform defect is filed as bug by the skill and takes the first row

"Handed over" means ONE signed feedback event on the control instance's pooled inbox (https://memex.systemorph.com/api/hooks/Hosting/PlatformBuilds) — the same URL and HMAC every fleet repository's CI posts to. There it becomes a Hosting/TriageItem, a thread with the triage agent, and — for what is actionable — a GitHub issue, filed via systemorph-com in the repository that owns the Space the feedback was given on (else Systemorph/MeshWeaver.Feedback). When the feedback was submitted on the control instance itself, the issue URL is written back onto the Feedback node (issueUrl). The mechanism end to end is Hosting's Triage page.

Configuration — two keys, both required, defined once per portal:

Key Value
Hosting:ControlInbox:Url https://memex.systemorph.com/api/hooks/Hosting/PlatformBuilds
Hosting:ControlInbox:Secret the control inbox's HMAC secret — the same value as the control instance's Hosting:PlatformWebhookSecret (Key Vault), mapped e.g. as memexcloud-Hosting-ControlInbox-Secret

With either key absent the plugin logs one warning per technical submission naming both keys and keeps today's behaviour — the submission stays in the Inbox. The control instance itself needs neither: it lists Hosting/PlatformBuilds as a webhook target and holds the watcher's secret, so it delivers the same signed event into its own inbox. A hand-over that fails for any reason (network, a refused signature) is logged and never fails the submission.

Where submissions live

Feedback/_Submissions/{id} — an underscore container (kept out of catalogs). The Feedback space's Inbox area lists them for reviewers. Feedback is admin-reviewed: seed the space so only platform admins read it.

Tests

Reconnecting…
The connection to the server was interrupted. Trying to restore it…
Trying again…
The connection could not be restored. Reloading the page…
The server was updated. Reloading the page to pick up the latest version.