Classic confinement request for MemStrata Coder

name: memstrata-coder

description: MemStrata Coder is a local developer tool that maintains a compact, current map of user-selected source repositories and exposes that map to coding agents through IDE, MCP, and terminal integrations. It watches Git working trees, runs a loopback-only daemon and dashboard, and configures supported IDE/CLI integrations only at the user’s explicit request.

snapcraft: https://github.com/yadu9989/memstrata-coder/blob/bac7f543bd04be1c36c14cca68e3cf7e3e72e279/snap/snapcraft.yaml

upstream: https://github.com/yadu9989/memstrata-coder

upstream-relation: Called It Inc. is the upstream author, owner, and Snap Store publisher of MemStrata Coder.

supported-category: IDEs and tools for local, non-root user driven configuration of/switching to development workspaces/environments.

reasoning: I understand that strict confinement is preferred. We evaluated the existing home, removable-media, personal-files, and portal-based options. They cannot provide the required behavior because MemStrata Coder must:

  • read and watch arbitrary repositories explicitly selected by the user, including repositories outside $HOME;
  • follow repository moves and work with the user’s existing Git executable;
  • configure supported IDE and terminal integrations in their normal host configuration locations after explicit user consent;
  • invoke user-selected development commands and IDE CLIs in the host environment; and
  • preserve the host toolchain’s paths, credentials, and environment rather than replacing it with a separate sandboxed toolchain.

The repository and tool paths are user-defined and cannot be enumerated in advance. Strict confinement also cannot provide the necessary host command execution and workspace/IDE integration semantics. Classic is not requested to avoid packaging dependencies: the Python runtime and dependencies are included in the snap.

Security boundaries:

  • The service binds only to 127.0.0.1; it does not expose a LAN listener.
  • Project discovery and indexing are local. Repository contents are not uploaded by the discovery/indexing feature.
  • Startup is disabled by default and requires a separate user opt-in.
  • Tool configuration and project registration require explicit user actions or consented onboarding choices.
  • The application runs as the invoking non-root user and does not call sudo or pkexec.
  • The snap is not a third-party installer and does not install other snaps, native packages, AppImages, or Flatpaks.

Validation evidence:

The exact 0.6.5 amd64 snap was built from commit bac7f543bd04be1c36c14cca68e3cf7e3e72e279 using Snapcraft 9.0.1. It was installed locally with --dangerous --classic, reported version 0.6.5 and product profile coder, executed its normal CLI help path successfully, and was then removed. SHA-256: 957ae3abcbc980e8208e4eeeffa077429acdd23662894dfd78f7076fa13020ff.

We request classic-confinement approval for the memstrata-coder snap ID before releasing this revision to a Store channel.

This request has been added to the queue for review by the @reviewers team.

Hey @yadu9991

I would like to point out that listed github repository, https://github.com/yadu9989/memstrata-coder, is not accessible. Could you please first clarify if this is intentional (e.g. the project is intended to be closed source)?

Hi Jorge, yes this is intentional. MemStrata Coder is proprietary, closed-source commercial software, so the upstream GitHub repository is private.

The product itself is publicly installable from PyPI at https://pypi.org/project/memstrata-coder/ using python -m pip install memstrata-coder, and users receive six months of free use after sign-in and activation.

The classic-confinement request is needed for the host IDE, terminal, MCP, user-selected repository, and local development-tool integrations described above. If the review team needs source or build access for review, we can provide it privately through Canonical’s preferred reviewer channel. Please let me know the appropriate mechanism.

Thank you.