{
  "id": 4681079,
  "title": "m365-extension-control: evidence and readiness checks for SPFx estates",
  "url": "https://urgent.news/2026/08/31/m365-extension-control-evidence-and-readiness-checks-for-spfx-estates",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-08-31T17:19:57.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/vystartasv/m365-extension-control-evidence-and-readiness-checks-for-spfx-estates-2a5h"
  },
  "original_language": "en",
  "account": "Microsoft 365 SPFx projects require more than just confirming a successful build. They need assurance that the project's current state mirrors the team's intended release. This is where m365-extension-control comes into play. It's a compact, offline, and deterministic command-line interface tailored for SPFx and Microsoft 365 extension estates.\n\nAt the heart of m365-extension-control is an estate.json file. This file records crucial information such as the project's owner, lifecycle status, release channel, expected solution version, required SPFx version, and project directory path. The CLI then compares this declared information against actual facts extracted from the project directory.\n\nThe tool offers several commands to assist in this comparison:\n- scan project-dir: Initiates a scan of the specified project directory.\n- inventory --manifest estate.json: Generates an inventory report using the estate.json file.\n- evidence --manifest estate.json: Provides evidence in JSON and Markdown format, detailing the project's status.\n- preflight --manifest estate.json --id solution-id: Performs a preflight check for a specific solution, identifying potential issues.\n\nThe MVP version of m365-extension-control reports on a range of aspects, including solution and component identity, any drift between the solution and its components, discrepancies in SPFx versions, inconsistencies in lifecycle and release channels, ownership gaps, and issues with project metadata.\n\nThe repository includes a comprehensive acceptance estate covering four different scenarios: verified, warning, blocked, and not-tested states. The implementation boasts 20 deterministic tests, TypeScript checks, a compiled CLI, package dry-run validation, and integration with GitHub Actions for CI pipelines.\n\nHowever, it's important to note the tool's limitations. m365-extension-control is not designed to validate a SharePoint tenant, approve an App Catalog submission, verify permissions, deploy anything, or claim production readiness. It solely reports on local file evidence.\n\nThis tool represents a crucial layer in the author's SPFx tooling arsenal. The previous tools, spfx-factory, spfx-assurance, and spfx-estate-doctor, work together to ensure projects are governed, internally checked, inventoried, and ultimately compared against declared intent for a local release gate. The repository for m365-extension-control is available at https://github.com/vystartasv/m365-extension-control. The author welcomes feedback and real-world estate examples, particularly instances where a release or upgrade failed due to a discrepancy between the declared and deployed states.",
  "summary": "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…",
  "key_points": [
    "m365-extension-control is a CLI tool for SPFx estates",
    "estate.json records project details for comparison",
    "Provides evidence of project state against declared intent"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}