DEV Community

Vilius
Vilius

Posted on

m365-extension-control: evidence and readiness checks for SPFx estates

SPFx teams do not only need to know whether a project builds. They need to know whether the project on disk still matches the release intent recorded by the team.

That is the problem behind m365-extension-control.

It is a small, offline, deterministic CLI for SPFx and Microsoft 365 extension estates. An estate.json file records the declared owner, lifecycle status, release channel, expected solution version, expected SPFx version, and project path. The CLI compares that declaration with bounded facts read from the project directory.

Commands:

m365-extension-control scan <project-dir>
m365-extension-control inventory --manifest estate.json
m365-extension-control evidence --manifest estate.json
m365-extension-control preflight --manifest estate.json --id <solution-id>
Enter fullscreen mode Exit fullscreen mode

The MVP reports:

  • solution and component identity;
  • solution-version drift;
  • SPFx-version drift;
  • lifecycle/channel inconsistencies;
  • ownership gaps;
  • malformed or missing project metadata;
  • explicit verified, warning, blocked, and not-tested statuses;
  • deterministic JSON and Markdown evidence;
  • local preflight decisions with exit codes suitable for CI.

The repository includes a four-solution acceptance estate covering verified, warning, blocked, and not-tested states. The implementation has 20 deterministic tests, TypeScript checks, a compiled CLI, package dry-run validation, and GitHub Actions CI.

The important boundary is deliberate: this tool does not validate a SharePoint tenant, approve an App Catalog submission, verify permissions, deploy anything, or claim production readiness. It reports local file evidence only.

This is the next layer in my SPFx tooling work:

  • spfx-factory creates governed projects;
  • spfx-assurance checks one project internally;
  • spfx-estate-doctor inventories projects on disk;
  • m365-extension-control compares declared intent with on-disk facts and produces a local release gate.

Repository: https://github.com/vystartasv/m365-extension-control

Feedback and real-world estate examples are welcome, especially cases where a release or upgrade failed because the declared state and deployed state diverged.

Tags: #opensource #typescript #sharepoint #devtools

Top comments (0)