<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vilius</title>
    <description>The latest articles on DEV Community by Vilius (@vystartasv).</description>
    <link>https://dev.to/vystartasv</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F133303%2F50baa34e-e011-4576-8b1a-5974d272fc34.jpg</url>
      <title>DEV Community: Vilius</title>
      <link>https://dev.to/vystartasv</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vystartasv"/>
    <language>en</language>
    <item>
      <title>m365-extension-control: evidence and readiness checks for SPFx estates</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Mon, 31 Aug 2026 17:19:57 +0000</pubDate>
      <link>https://dev.to/vystartasv/m365-extension-control-evidence-and-readiness-checks-for-spfx-estates-2a5h</link>
      <guid>https://dev.to/vystartasv/m365-extension-control-evidence-and-readiness-checks-for-spfx-estates-2a5h</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;That is the problem behind &lt;a href="https://github.com/vystartasv/m365-extension-control" rel="noopener noreferrer"&gt;m365-extension-control&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is a small, offline, deterministic CLI for SPFx and Microsoft 365 extension estates. An &lt;code&gt;estate.json&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;Commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;m365-extension-control scan &amp;lt;project-dir&amp;gt;
m365-extension-control inventory &lt;span class="nt"&gt;--manifest&lt;/span&gt; estate.json
m365-extension-control evidence &lt;span class="nt"&gt;--manifest&lt;/span&gt; estate.json
m365-extension-control preflight &lt;span class="nt"&gt;--manifest&lt;/span&gt; estate.json &lt;span class="nt"&gt;--id&lt;/span&gt; &amp;lt;solution-id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The MVP reports:&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;This is the next layer in my SPFx tooling work:&lt;/p&gt;

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

&lt;p&gt;Repository: &lt;a href="https://github.com/vystartasv/m365-extension-control" rel="noopener noreferrer"&gt;https://github.com/vystartasv/m365-extension-control&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Tags: #opensource #typescript #sharepoint #devtools&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>typescript</category>
      <category>sharepoint</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Turning spfx-factory Into an Evidence-Gated SPFx Agent</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Mon, 31 Aug 2026 16:15:46 +0000</pubDate>
      <link>https://dev.to/vystartasv/turning-spfx-factory-into-an-evidence-gated-spfx-agent-53cd</link>
      <guid>https://dev.to/vystartasv/turning-spfx-factory-into-an-evidence-gated-spfx-agent-53cd</guid>
      <description>&lt;h1&gt;
  
  
  Turning spfx-factory Into an Evidence-Gated SPFx Agent
&lt;/h1&gt;

&lt;p&gt;AI can generate an SPFx project. That is not the same as proving the project is ready.&lt;/p&gt;

&lt;p&gt;The latest &lt;code&gt;spfx-factory&lt;/code&gt; release adds an evidence ledger around the existing generation workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;SCAFFOLD&lt;/code&gt; — whether the official scaffold completed;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CODEX&lt;/code&gt; — whether implementation was requested and completed;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POLICY&lt;/code&gt; — whether static policy checks passed;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LOCAL&lt;/code&gt; — whether requested local npm checks passed;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ASSURANCE&lt;/code&gt; — whether an independent &lt;code&gt;spfx-assurance&lt;/code&gt; check ran;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TENANT&lt;/code&gt; — always explicitly &lt;code&gt;not-tested&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every check reports one of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;verified&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;warning&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;blocked&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;not-tested&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The existing factory report status remains backward compatible. Evidence is recorded in a parallel &lt;code&gt;evidence&lt;/code&gt; field rather than silently changing the old contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Independent assurance without hidden installation
&lt;/h2&gt;

&lt;p&gt;The factory can invoke &lt;code&gt;spfx-assurance&lt;/code&gt; when it is already available through &lt;code&gt;SPFX_ASSURANCE_BIN&lt;/code&gt; or &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It does not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;call &lt;code&gt;npx&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;download a dependency;&lt;/li&gt;
&lt;li&gt;import the ESM checker into the CommonJS factory;&lt;/li&gt;
&lt;li&gt;access a tenant;&lt;/li&gt;
&lt;li&gt;claim permissions or App Catalog approval;&lt;/li&gt;
&lt;li&gt;fabricate a successful check when the tool is unavailable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the checker is absent, the result is &lt;code&gt;not-tested&lt;/code&gt; with an actionable explanation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspect evidence
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;spfx-factory inspect &lt;span class="nt"&gt;--output&lt;/span&gt; ./generated
spfx-factory inspect &lt;span class="nt"&gt;--output&lt;/span&gt; ./generated &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The inspection command is read-only. It reads the existing &lt;code&gt;factory-report.json&lt;/code&gt;, prints the evidence, and does not rerun generation or verification.&lt;/p&gt;

&lt;p&gt;Warnings do not break an otherwise green run by default. Teams that want warning-gating can opt in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;spfx-factory generate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--spec&lt;/span&gt; specs/document-review.json &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; ./generated &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--fail-on&lt;/span&gt; warning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Verification boundary
&lt;/h2&gt;

&lt;p&gt;This is local evidence, not tenant validation. A green local report does not prove:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SharePoint permissions;&lt;/li&gt;
&lt;li&gt;App Catalog approval;&lt;/li&gt;
&lt;li&gt;tenant deployment;&lt;/li&gt;
&lt;li&gt;production data access;&lt;/li&gt;
&lt;li&gt;runtime behaviour in a specific tenant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That limitation is part of the report, not a footnote hidden outside it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;The useful product boundary for AI-assisted SPFx development is not “the model wrote code.” It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The system cannot call the work complete without showing what was checked, what passed, and what remains unknown.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The project is open source:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vystartasv/spfx-factory" rel="noopener noreferrer"&gt;https://github.com/vystartasv/spfx-factory&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The release adds an evidence layer to the factory while preserving its existing generation and policy behaviour.&lt;/p&gt;

</description>
      <category>spfx</category>
      <category>microsoft365</category>
      <category>opensource</category>
      <category>devtools</category>
    </item>
    <item>
      <title>spfx-estate-doctor: Inventory an SPFx Estate Without Touching a Tenant</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Mon, 31 Aug 2026 16:01:41 +0000</pubDate>
      <link>https://dev.to/vystartasv/spfx-estate-doctor-inventory-an-spfx-estate-without-touching-a-tenant-3o89</link>
      <guid>https://dev.to/vystartasv/spfx-estate-doctor-inventory-an-spfx-estate-without-touching-a-tenant-3o89</guid>
      <description>&lt;h1&gt;
  
  
  spfx-estate-doctor: Inventory an SPFx Estate Without Touching a Tenant
&lt;/h1&gt;

&lt;p&gt;A single SPFx project can be inspected deeply. An organisation's collection of projects is a different problem.&lt;/p&gt;

&lt;p&gt;Which solutions are present? Which use old SPFx versions? Which have no owner information? Which projects reuse a component or solution ID? Which directories are not packaged solutions at all?&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/vystartasv/spfx-estate-doctor" rel="noopener noreferrer"&gt;spfx-estate-doctor&lt;/a&gt; as an offline, read-only scanner for that shallow-but-wide view.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx spfx-estate-doctor scan ./webparts/alpha ./webparts/bravo &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--json&lt;/span&gt; estate.json &lt;span class="nt"&gt;--md&lt;/span&gt; estate.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For larger explicit sets, provide a newline-delimited manifest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# projects.txt
../webparts/alpha
../webparts/bravo
../webparts/legacy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx spfx-estate-doctor scan &lt;span class="nt"&gt;--manifest&lt;/span&gt; projects.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is deliberately no recursive discovery. The tool scans only directories explicitly supplied by the operator.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it checks
&lt;/h2&gt;

&lt;p&gt;Per project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;package identity;&lt;/li&gt;
&lt;li&gt;SPFx dependency and version;&lt;/li&gt;
&lt;li&gt;SPFx-to-Node compatibility snapshot;&lt;/li&gt;
&lt;li&gt;solution manifest shape;&lt;/li&gt;
&lt;li&gt;component manifest shape;&lt;/li&gt;
&lt;li&gt;owner information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Across the estate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;duplicate component IDs across projects;&lt;/li&gt;
&lt;li&gt;duplicate solution IDs across projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Missing files are reported as &lt;code&gt;skipped&lt;/code&gt;, not quietly marked healthy. That distinction matters: no &lt;code&gt;package-solution.json&lt;/code&gt; means “not checked,” not “verified.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it is intentionally boring
&lt;/h2&gt;

&lt;p&gt;The scanner makes no network calls, executes no project commands, reads no credentials, invokes no Microsoft 365 CLI, and writes no files inside inspected projects. Its JSON output contains no timestamps or absolute machine paths, so the same estate produces a byte-identical report that can be diffed over time.&lt;/p&gt;

&lt;p&gt;The report says exactly what it knows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Offline inventory of local project files only. This is not tenant validation, App Catalog state, deployment status, or a security audit.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It cannot tell you what is deployed, whether a tenant permission is granted, whether a project builds, or whether the code is secure. Those are separate checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relationship to spfx-assurance
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/vystartasv/spfx-assurance" rel="noopener noreferrer"&gt;spfx-assurance&lt;/a&gt; is the one-project deep verifier. &lt;code&gt;spfx-estate-doctor&lt;/code&gt; is the many-projects shallow inventory layer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spfx-estate-doctor  →  What exists across the estate?
spfx-assurance      →  Does this project look shippable locally?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both produce explicit evidence rather than a vague health score.&lt;/p&gt;

&lt;p&gt;Verified locally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;15 deterministic tests passing;&lt;/li&gt;
&lt;li&gt;TypeScript check and build passing;&lt;/li&gt;
&lt;li&gt;package dry run containing 9 intended runtime files;&lt;/li&gt;
&lt;li&gt;zero npm audit vulnerabilities;&lt;/li&gt;
&lt;li&gt;strict pre-publish scrub passing;&lt;/li&gt;
&lt;li&gt;compiled CLI detecting cross-project duplicate IDs;&lt;/li&gt;
&lt;li&gt;deterministic report and read-only behavior verified.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No live SharePoint tenant validation has been performed.&lt;/p&gt;

&lt;p&gt;Repository: &lt;strong&gt;&lt;a href="https://github.com/vystartasv/spfx-estate-doctor" rel="noopener noreferrer"&gt;github.com/vystartasv/spfx-estate-doctor&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The public question is simple: does this remain useful when pointed at real project directories, without turning into an invasive dashboard or a machine that invents certainty?&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>sharepoint</category>
      <category>spfx</category>
      <category>opensource</category>
    </item>
    <item>
      <title>spfx-assurance: Offline Release Checks for SharePoint Framework Projects</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Mon, 31 Aug 2026 15:46:10 +0000</pubDate>
      <link>https://dev.to/vystartasv/spfx-assurance-offline-release-checks-for-sharepoint-framework-projects-26f1</link>
      <guid>https://dev.to/vystartasv/spfx-assurance-offline-release-checks-for-sharepoint-framework-projects-26f1</guid>
      <description>&lt;h1&gt;
  
  
  spfx-assurance: Offline Release Checks for SharePoint Framework Projects
&lt;/h1&gt;

&lt;p&gt;Creating an SPFx web part is usually not the difficult part. The expensive failures happen later: invalid manifests, duplicated component IDs, unsafe URLs, committed secrets, missing tenant approval signals, or a build that only fails after someone starts a release.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/vystartasv/spfx-assurance" rel="noopener noreferrer"&gt;spfx-assurance&lt;/a&gt; as a small, offline CLI for checking an existing SharePoint Framework project before release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx spfx-assurance check &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt; assurance.json &lt;span class="nt"&gt;--md&lt;/span&gt; assurance.md &lt;span class="nt"&gt;--fail-on&lt;/span&gt; blocked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The MVP checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;package and SPFx metadata;&lt;/li&gt;
&lt;li&gt;Node engine mismatch;&lt;/li&gt;
&lt;li&gt;solution metadata and four-part version;&lt;/li&gt;
&lt;li&gt;component manifest shape and duplicate IDs;&lt;/li&gt;
&lt;li&gt;secret-shaped assignments;&lt;/li&gt;
&lt;li&gt;unsafe URL schemes at obvious sinks;&lt;/li&gt;
&lt;li&gt;non-local HTTP URLs;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;webApiPermissionRequests&lt;/code&gt; requiring tenant admin approval;&lt;/li&gt;
&lt;li&gt;configured build/test commands.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reports contain stable &lt;code&gt;verified&lt;/code&gt;, &lt;code&gt;warning&lt;/code&gt;, &lt;code&gt;blocked&lt;/code&gt;, and &lt;code&gt;skipped&lt;/code&gt; statuses, plus a mandatory scope declaration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local verification only. This is not tenant validation, App Catalog approval, or a security audit.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That boundary is deliberate. A local tool cannot prove tenant permissions, App Catalog approval, deployment behavior, or every security property.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safety choices
&lt;/h2&gt;

&lt;p&gt;Configured commands are argv arrays rather than shell strings. Executables are allow-listed, &lt;code&gt;shell: false&lt;/code&gt; is used, destructive-looking arguments are rejected, and report output cannot be written inside the inspected project.&lt;/p&gt;

&lt;p&gt;The tool makes no network calls, accepts no credentials, and does not modify the project being inspected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this exists
&lt;/h2&gt;

&lt;p&gt;PnPjs, the Microsoft 365 CLI, SPFx Toolkit, and the PnP sample ecosystem already cover platform access, scaffolding, deployment, and reusable components. This project targets the missing handoff between “the code exists” and “the change is supported by evidence.”&lt;/p&gt;

&lt;p&gt;The first release includes clean and deliberately broken SPFx-shaped fixtures, deterministic tests, a GitHub Actions workflow, JSON/Markdown reports, and explicit limitations.&lt;/p&gt;

&lt;p&gt;Verified locally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;9 tests passing;&lt;/li&gt;
&lt;li&gt;TypeScript check and build passing;&lt;/li&gt;
&lt;li&gt;package dry run passing;&lt;/li&gt;
&lt;li&gt;zero npm audit vulnerabilities;&lt;/li&gt;
&lt;li&gt;strict pre-publish secret scan passing;&lt;/li&gt;
&lt;li&gt;compiled CLI verified against clean and dirty fixtures.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No live SharePoint tenant validation has been performed yet.&lt;/p&gt;

&lt;p&gt;Repository: &lt;strong&gt;&lt;a href="https://github.com/vystartasv/spfx-assurance" rel="noopener noreferrer"&gt;github.com/vystartasv/spfx-assurance&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The useful test is not whether this catches an intentionally broken fixture. It is whether the rules stay trustworthy on real SPFx repositories without becoming a noisy false-positive machine.&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>sharepoint</category>
      <category>spfx</category>
      <category>opensource</category>
    </item>
    <item>
      <title>A Typed Repository Layer for SharePoint CRUD in SPFx</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Mon, 31 Aug 2026 12:19:23 +0000</pubDate>
      <link>https://dev.to/vystartasv/a-typed-repository-layer-for-sharepoint-crud-in-spfx-5gbp</link>
      <guid>https://dev.to/vystartasv/a-typed-repository-layer-for-sharepoint-crud-in-spfx-5gbp</guid>
      <description>&lt;h1&gt;
  
  
  A Typed Repository Layer for SharePoint CRUD in SPFx
&lt;/h1&gt;

&lt;p&gt;PnPjs is a good low-level client for SharePoint. The problem is what application code starts to look like when every feature repeats list names, internal field names, lookup expansion, ETag handling, response mapping, and error translation.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/vystartasv/spfx-data-kit" rel="noopener noreferrer"&gt;spfx-data-kit&lt;/a&gt; as a small repository layer above &lt;code&gt;@pnp/sp&lt;/code&gt; v4.&lt;/p&gt;

&lt;h2&gt;
  
  
  The contract
&lt;/h2&gt;

&lt;p&gt;A feature works with a domain-oriented resource:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Updated&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;approved&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;etag&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The feature does not need to know that &lt;code&gt;title&lt;/code&gt; maps to SharePoint's &lt;code&gt;Title&lt;/code&gt; field, or that an update may return no response body.&lt;/p&gt;

&lt;p&gt;The public contract currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;list&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;remove&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Single-item results carry the current ETag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;etag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;"7"&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lists keep entities ergonomic and expose ETags separately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;etags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;42&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;"7"&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What it adds above PnPjs
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;spfx-data-kit&lt;/code&gt; is not a replacement for PnPjs and does not attempt to cover all SharePoint APIs. It adds application-level conventions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explicit domain-to-SharePoint field mapping;&lt;/li&gt;
&lt;li&gt;typed create and update inputs;&lt;/li&gt;
&lt;li&gt;stable error kinds for validation, not-found, conflict, permission, transient, and unknown failures;&lt;/li&gt;
&lt;li&gt;first-class optimistic-concurrency inputs through ETags;&lt;/li&gt;
&lt;li&gt;update re-reads after SharePoint's possible &lt;code&gt;204 No Content&lt;/code&gt; response;&lt;/li&gt;
&lt;li&gt;bounded async paging with &lt;code&gt;pageSize&lt;/code&gt;, &lt;code&gt;maxPages&lt;/code&gt;, and an overall &lt;code&gt;top&lt;/code&gt; cap;&lt;/li&gt;
&lt;li&gt;a local in-memory adapter implementing the same CRUD contract;&lt;/li&gt;
&lt;li&gt;cloning at local adapter boundaries to prevent accidental shared-state mutation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps TanStack Query in its proper place: TanStack can manage cache, refetch, invalidation, and optimistic UI while the repository owns SharePoint semantics.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React feature
    ↓
TanStack Query
    ↓
spfx-data-kit
    ↓
PnPjs v4
    ↓
SharePoint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why a local adapter?
&lt;/h2&gt;

&lt;p&gt;A mocked PnPjs fluent chain tests whether a particular call sequence happened. It does not provide much confidence that the feature's CRUD behavior is coherent.&lt;/p&gt;

&lt;p&gt;The local adapter lets contract tests exercise validation, ETag conflicts, cloning, IDs, and CRUD behavior without a tenant. Tenant validation remains a separate responsibility: permissions, required fields, content types, and tenant configuration cannot be proven locally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current status
&lt;/h2&gt;

&lt;p&gt;This is an early MVP, released as source on GitHub rather than presented as a finished enterprise framework.&lt;/p&gt;

&lt;p&gt;Verified locally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;9 deterministic tests passing;&lt;/li&gt;
&lt;li&gt;TypeScript build passing;&lt;/li&gt;
&lt;li&gt;no-emission type check passing;&lt;/li&gt;
&lt;li&gt;package dry-run passing;&lt;/li&gt;
&lt;li&gt;npm dependency audit reporting zero vulnerabilities;&lt;/li&gt;
&lt;li&gt;pre-publish secret scrub passing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not yet validated against a live SharePoint tenant. That is the next honest test: initialize it after &lt;code&gt;super.onInit()&lt;/code&gt;, connect it to a real list, and verify permissions, field requirements, live CRUD, and stale-ETag conflicts.&lt;/p&gt;

&lt;p&gt;The repository is open for review:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/vystartasv/spfx-data-kit" rel="noopener noreferrer"&gt;github.com/vystartasv/spfx-data-kit&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Feedback on the contract matters more than adding another layer of abstractions. If this is only a shorter spelling of PnPjs, it is not useful enough. The goal is a small, explicit boundary that makes SharePoint application code easier to test and harder to get subtly wrong.&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>sharepoint</category>
      <category>spfx</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Building a Verified SPFx Factory Instead of Another Code Generator</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Mon, 31 Aug 2026 11:08:41 +0000</pubDate>
      <link>https://dev.to/vystartasv/building-a-verified-spfx-factory-instead-of-another-code-generator-1mno</link>
      <guid>https://dev.to/vystartasv/building-a-verified-spfx-factory-instead-of-another-code-generator-1mno</guid>
      <description>&lt;p&gt;A chatbot that emits an SPFx React snippet is not much of a product. It wraps scaffolding, produces plausible code, and leaves the hard part—whether the result actually works—to the user.&lt;/p&gt;

&lt;p&gt;I built a small local alternative: an SPFx Factory that turns structured requirements into an official SharePoint Framework scaffold, an implementation task for Codex, and a bounded verification report.&lt;/p&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/vystartasv/spfx-factory" rel="noopener noreferrer"&gt;https://github.com/vystartasv/spfx-factory&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The factory boundary
&lt;/h2&gt;

&lt;p&gt;The factory is deliberately local:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node 22 CLI&lt;/li&gt;
&lt;li&gt;Official &lt;code&gt;spfx create&lt;/code&gt; scaffolding&lt;/li&gt;
&lt;li&gt;React &lt;code&gt;webpart-react&lt;/code&gt; projects&lt;/li&gt;
&lt;li&gt;Codex execution only behind explicit &lt;code&gt;--execute&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Verification only behind explicit &lt;code&gt;--verify&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;No tenant login, deployment, credentials, telemetry, browser automation, or Git operations inside generated tasks&lt;/li&gt;
&lt;li&gt;Static policy scanning for secrets, permissions, unsafe URLs, and unauthorized mutations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The default path is safe and boring. It validates a specification, creates the official scaffold, renders &lt;code&gt;FACTORY_TASK.md&lt;/code&gt;, and performs policy checks. It does not silently install packages or run an agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verification is the product boundary
&lt;/h2&gt;

&lt;p&gt;The generated project is not accepted because an agent says “done”. The factory records separate stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;official scaffold&lt;/li&gt;
&lt;li&gt;Codex implementation&lt;/li&gt;
&lt;li&gt;policy scan&lt;/li&gt;
&lt;li&gt;dependency installation&lt;/li&gt;
&lt;li&gt;explicit test script&lt;/li&gt;
&lt;li&gt;build&lt;/li&gt;
&lt;li&gt;package&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Missing &lt;code&gt;scripts.test&lt;/code&gt; fails verification. Project warnings fail verification even when the command exits zero. Optional package scripts are reported as skipped instead of being silently omitted.&lt;/p&gt;

&lt;p&gt;Verification child processes receive a Node heap override of 8 GB through &lt;code&gt;NODE_OPTIONS&lt;/code&gt;. Existing non-heap options are preserved; the host macOS memory configuration is not changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writable web parts are explicit
&lt;/h2&gt;

&lt;p&gt;Read-only remains the default. Writable generation requires &lt;code&gt;"mode": "writable"&lt;/code&gt; and explicit positive create/read/update/delete intent.&lt;/p&gt;

&lt;p&gt;The writable policy is not “disable security checks”. It allows only narrow typed SharePoint/PnP mutation patterns while continuing to reject secrets, permission requests, unsafe URL schemes, raw HTTP mutation patterns, and other unrelated operations.&lt;/p&gt;

&lt;p&gt;Local writable verification uses deterministic adapters. That proves CRUD logic, validation, conflict/error handling, and UI behavior in the generated project. It does &lt;strong&gt;not&lt;/strong&gt; prove tenant writes, SharePoint permissions, authentication, deployment, or production behavior.&lt;/p&gt;

&lt;p&gt;Two independent writable samples passed the final local gate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request Tracker — local create/list/update/delete, optimistic conflict handling, accessible delete confirmation&lt;/li&gt;
&lt;li&gt;Leave Request — local submit/list/update/remove, date validation, recoverable error states&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both passed test, build, package, and policy stages with zero project warnings.&lt;/p&gt;

&lt;h2&gt;
  
  
  The failures were useful
&lt;/h2&gt;

&lt;p&gt;The first generated samples exposed exactly why a verification layer matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;missing explicit test scripts&lt;/li&gt;
&lt;li&gt;TypeScript warnings from dynamic SCSS access&lt;/li&gt;
&lt;li&gt;unsupported &lt;code&gt;Array.includes&lt;/code&gt; under the scaffold target&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;void&lt;/code&gt; and floating-promise lint failures&lt;/li&gt;
&lt;li&gt;defensive &lt;code&gt;javascript:&lt;/code&gt; test literals triggering SPFx lint&lt;/li&gt;
&lt;li&gt;a negative-path Jest test that did not match the installed Jest behavior&lt;/li&gt;
&lt;li&gt;dependency peer/deprecation warnings from the current SPFx scaffold&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each discovered defect became either a factory gate, a generated-task rule, or a regression test. The factory became stricter instead of hiding the failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does not claim
&lt;/h2&gt;

&lt;p&gt;This is not tenant-ready automation. Local success cannot establish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SharePoint runtime behavior&lt;/li&gt;
&lt;li&gt;tenant permissions&lt;/li&gt;
&lt;li&gt;authentication and identity behavior&lt;/li&gt;
&lt;li&gt;deployment readiness&lt;/li&gt;
&lt;li&gt;browser accessibility in a real workbench&lt;/li&gt;
&lt;li&gt;production data correctness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those require a separate human-controlled tenant validation stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run it locally
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm &lt;span class="nb"&gt;test
&lt;/span&gt;npm run build
npm run check

node lib/cli.js validate &lt;span class="nt"&gt;--spec&lt;/span&gt; specs/request-tracker.json
node lib/cli.js generate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--spec&lt;/span&gt; specs/request-tracker.json &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; ./out/request-tracker &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--execute&lt;/span&gt; &lt;span class="nt"&gt;--verify&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final factory repository checks pass with 47 tests, TypeScript build, type check, and whitespace validation. The generated writable samples were verified separately and remain disposable local artifacts rather than committed tenant projects.&lt;/p&gt;

&lt;p&gt;The useful lesson is simple: an agent producing code is easy. An agent-backed factory that refuses to call broken, unsafe, or unverifiable output complete is the actual engineering work.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>sharepoint</category>
      <category>typescript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Help wanted: validate a React governance and site lifecycle dashboard SPFx sample</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Sun, 30 Aug 2026 20:31:56 +0000</pubDate>
      <link>https://dev.to/vystartasv/help-wanted-validate-a-react-governance-and-site-lifecycle-dashboard-spfx-sample-4hd5</link>
      <guid>https://dev.to/vystartasv/help-wanted-validate-a-react-governance-and-site-lifecycle-dashboard-spfx-sample-4hd5</guid>
      <description>&lt;p&gt;A new read-only React sample is ready for the PnP SharePoint Framework webparts repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pull request: &lt;a href="https://github.com/pnp/sp-dev-fx-webparts/pull/6488" rel="noopener noreferrer"&gt;https://github.com/pnp/sp-dev-fx-webparts/pull/6488&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sample: &lt;code&gt;samples/react-governance-site-lifecycle-dashboard/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The web part reads bounded SharePoint REST site-inventory sources with GET only. It surfaces site title and URL, template, owners, hub association, sharing mode, storage or usage, last activity, review and expiration dates, and deterministic inactive or needs-review signals.&lt;/p&gt;

&lt;p&gt;The sample validates same-tenant HTTPS REST URLs, preserves managed paths, validates OData next links, defensively parses malformed rows, and limits reads to four sources, 50 rows per page, five pages, and 200 items per source. It keeps empty, partial, permission, throttling, retry, and generic error states visible.&lt;/p&gt;

&lt;p&gt;Lifecycle classification uses an explicit reference date, so tests and reviews are deterministic. The UI is responsive, keyboard-usable, semantic, and does not rely on color alone for status.&lt;/p&gt;

&lt;p&gt;This is a governance review aid—not an administration tool. It cannot create, update, delete, permission, hub, site, lifecycle, or content data. It requests no Graph permissions and stores no credentials or secrets.&lt;/p&gt;

&lt;p&gt;Local verification completed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;7 deterministic tests passed.&lt;/li&gt;
&lt;li&gt;Read-only verifier passed.&lt;/li&gt;
&lt;li&gt;SPFx lint, TypeScript, Sass, and webpack validation passed.&lt;/li&gt;
&lt;li&gt;Production bundle and &lt;code&gt;.sppkg&lt;/code&gt; packaging passed.&lt;/li&gt;
&lt;li&gt;Gallery metadata, configuration, scope, whitespace, and secret-marker checks passed.&lt;/li&gt;
&lt;li&gt;Generated outputs were removed before commit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Could someone with a SharePoint Online tenant please validate representative site-inventory endpoints and real data, including managed paths, missing fields, inactive sites, due or upcoming review dates, hub associations, sharing/storage fields, paging bounds, empty and malformed data, partial failures, limited permissions, throttling, keyboard access, and responsive layout? Real tenant screenshots would be especially helpful; none are fabricated locally.&lt;/p&gt;

&lt;p&gt;Thank you for helping validate and improve this community sample.&lt;/p&gt;

</description>
      <category>sharepoint</category>
      <category>spfx</category>
      <category>react</category>
      <category>governance</category>
    </item>
    <item>
      <title>Help wanted: validate a React room and resource capacity planner SPFx sample</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Sun, 30 Aug 2026 19:31:57 +0000</pubDate>
      <link>https://dev.to/vystartasv/help-wanted-validate-a-react-room-and-resource-capacity-planner-spfx-sample-5dee</link>
      <guid>https://dev.to/vystartasv/help-wanted-validate-a-react-room-and-resource-capacity-planner-spfx-sample-5dee</guid>
      <description>&lt;p&gt;A new read-only React sample is ready for the PnP SharePoint Framework webparts repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pull request: &lt;a href="https://github.com/pnp/sp-dev-fx-webparts/pull/6487" rel="noopener noreferrer"&gt;https://github.com/pnp/sp-dev-fx-webparts/pull/6487&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sample: &lt;code&gt;samples/react-resource-capacity-planner/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The web part reads bounded SharePoint REST resource and reservation lists with GET only. It calculates daily and weekly utilization, capacity, deterministic overlap conflicts, available working-hour slots, resource units, and source-level partial/error states.&lt;/p&gt;

&lt;p&gt;It validates HTTPS same-tenant REST URLs, field names, resource IDs, ISO date ranges, time zones, horizons, page sizes, and item limits. The UI includes empty, malformed, partial, permission, throttling, retry, loading, keyboard, responsive, and non-color-only states.&lt;/p&gt;

&lt;p&gt;This is a planning view—not a booking system. It does not create, update, or cancel reservations and requests no additional API permissions. Microsoft Graph Bookings/Exchange integration is intentionally documented as a separate consent boundary rather than assumed.&lt;/p&gt;

&lt;p&gt;Local verification completed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;8 deterministic tests passed.&lt;/li&gt;
&lt;li&gt;GET-only verifier passed.&lt;/li&gt;
&lt;li&gt;SPFx lint, TypeScript, Sass, and webpack validation passed.&lt;/li&gt;
&lt;li&gt;Production bundle and &lt;code&gt;.sppkg&lt;/code&gt; packaging passed.&lt;/li&gt;
&lt;li&gt;Gallery metadata, configuration, scope, and secret checks passed.&lt;/li&gt;
&lt;li&gt;Generated outputs were removed before commit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Could someone with a SharePoint Online tenant please validate representative rooms/resources and reservations, including overlapping and touching intervals, multi-unit capacity, limited permissions, throttling, partial failures, managed paths, date horizons, time-zone display, keyboard navigation, and responsive layout? Real tenant screenshots would be especially helpful; none are fabricated locally.&lt;/p&gt;

&lt;p&gt;Thank you for helping validate and improve this community sample.&lt;/p&gt;

</description>
      <category>sharepoint</category>
      <category>spfx</category>
      <category>react</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Help wanted: validate a React retention and records review SPFx sample</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Sun, 30 Aug 2026 18:05:29 +0000</pubDate>
      <link>https://dev.to/vystartasv/help-wanted-validate-a-react-retention-and-records-review-spfx-sample-5hd5</link>
      <guid>https://dev.to/vystartasv/help-wanted-validate-a-react-retention-and-records-review-spfx-sample-5hd5</guid>
      <description>&lt;h1&gt;
  
  
  Help wanted: validate a React retention and records review SPFx sample
&lt;/h1&gt;

&lt;p&gt;A new read-only React sample is ready for the PnP SharePoint Framework webparts repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pull request: &lt;a href="https://github.com/pnp/sp-dev-fx-webparts/pull/6485" rel="noopener noreferrer"&gt;https://github.com/pnp/sp-dev-fx-webparts/pull/6485&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sample: &lt;code&gt;samples/react-retention-records-review/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The web part reads bounded SharePoint document-library and folder inventories through PnPjs and presents available record/retention indicators, modified dates, content types, and missing review metadata. It classifies permission, throttling, network, and configuration failures and shows partial results where possible.&lt;/p&gt;

&lt;p&gt;This is an inventory and review aid—not retention-policy enforcement. It does not apply retention labels, declare records, mutate metadata, or request additional permissions. It uses PnPjs v4 async iteration with a maximum page cap and explicitly avoids fetching beyond that cap.&lt;/p&gt;

&lt;p&gt;Local verification completed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 deterministic tests passed, including mocked PnPjs v4 async pagination and no-overfetch behavior.&lt;/li&gt;
&lt;li&gt;SPFx lint, TypeScript 5.3.3, Sass, and webpack validation passed.&lt;/li&gt;
&lt;li&gt;Production bundle and &lt;code&gt;.sppkg&lt;/code&gt; packaging passed.&lt;/li&gt;
&lt;li&gt;Diff, metadata, config, and secret scans passed.&lt;/li&gt;
&lt;li&gt;Generated outputs were removed before commit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Could someone with a SharePoint Online tenant please test representative document libraries and folders, including limited permissions, throttling, partial failures, managed paths, review fields, record/retention indicators, pagination limits, keyboard access, and responsive layout? Real tenant screenshots would be especially helpful; none are fabricated locally.&lt;/p&gt;

&lt;p&gt;Thank you for helping validate and improve this community sample.&lt;/p&gt;

</description>
      <category>sharepoint</category>
      <category>spfx</category>
      <category>react</category>
      <category>compliance</category>
    </item>
    <item>
      <title>Help wanted: validate a React multilingual intranet switcher SPFx sample</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Sun, 30 Aug 2026 17:30:42 +0000</pubDate>
      <link>https://dev.to/vystartasv/help-wanted-validate-a-react-multilingual-intranet-switcher-spfx-sample-378l</link>
      <guid>https://dev.to/vystartasv/help-wanted-validate-a-react-multilingual-intranet-switcher-spfx-sample-378l</guid>
      <description>&lt;h1&gt;
  
  
  Help wanted: validate a React multilingual intranet switcher SPFx sample
&lt;/h1&gt;

&lt;p&gt;A new read-only React sample is ready for the PnP SharePoint Framework webparts repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pull request: &lt;a href="https://github.com/pnp/sp-dev-fx-webparts/pull/6484" rel="noopener noreferrer"&gt;https://github.com/pnp/sp-dev-fx-webparts/pull/6484&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sample: &lt;code&gt;samples/react-multilingual-intranet-switcher/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The web part presents locale-specific intranet navigation and content links from bounded local JSON configuration. It chooses an initial locale using exact browser-locale matching, language fallback, and then the configured default. Users always have an explicit accessible language selector.&lt;/p&gt;

&lt;p&gt;The sample deliberately does &lt;strong&gt;not&lt;/strong&gt; translate content, infer translations, call translation APIs, read SharePoint data, or mutate tenant state. It accepts only same-origin HTTP(S) links and rejects malformed, credential-bearing, unsafe, and external URLs.&lt;/p&gt;

&lt;p&gt;Local verification completed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 deterministic Mocha tests passed.&lt;/li&gt;
&lt;li&gt;SPFx lint, TypeScript, Sass, and webpack validation passed.&lt;/li&gt;
&lt;li&gt;Production bundle and &lt;code&gt;.sppkg&lt;/code&gt; packaging passed.&lt;/li&gt;
&lt;li&gt;Diff, metadata, config, and secret scans passed.&lt;/li&gt;
&lt;li&gt;Generated outputs were removed before commit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Could someone with a SharePoint Online tenant please test this with two or more configured locales, including managed-path URLs, unsupported browser locales, malformed configuration, unsafe links, keyboard navigation, responsive layout, and users without additional API permissions? Real tenant screenshots would be especially useful; none are fabricated locally.&lt;/p&gt;

&lt;p&gt;Thank you for helping validate and improve this community sample.&lt;/p&gt;

</description>
      <category>sharepoint</category>
      <category>spfx</category>
      <category>react</category>
      <category>localization</category>
    </item>
    <item>
      <title>Help wanted: validate a React accessibility content auditor SPFx sample</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Sun, 30 Aug 2026 17:17:46 +0000</pubDate>
      <link>https://dev.to/vystartasv/help-wanted-validate-a-react-accessibility-content-auditor-spfx-sample-32k9</link>
      <guid>https://dev.to/vystartasv/help-wanted-validate-a-react-accessibility-content-auditor-spfx-sample-32k9</guid>
      <description>&lt;h1&gt;
  
  
  Help wanted: validate a React accessibility content auditor SPFx sample
&lt;/h1&gt;

&lt;p&gt;A new read-only React sample is ready for the PnP SharePoint Framework webparts repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pull request: &lt;a href="https://github.com/pnp/sp-dev-fx-webparts/pull/6483" rel="noopener noreferrer"&gt;https://github.com/pnp/sp-dev-fx-webparts/pull/6483&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sample: &lt;code&gt;samples/react-accessibility-content-auditor/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The web part audits bounded, allow-listed SharePoint page or list content and highlights missing image alt text, empty or generic link text, skipped heading levels, malformed content, and empty required fields. Each finding includes severity, rule, evidence, item, and a safe remediation link.&lt;/p&gt;

&lt;p&gt;It is explicitly a heuristic review aid—not a WCAG conformance certification tool—and it performs no create, update, or delete operations.&lt;/p&gt;

&lt;p&gt;Local verification completed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;15 deterministic Jest tests passed.&lt;/li&gt;
&lt;li&gt;SPFx DEBUG and SHIP builds passed.&lt;/li&gt;
&lt;li&gt;Production &lt;code&gt;.sppkg&lt;/code&gt; packaging passed.&lt;/li&gt;
&lt;li&gt;Generated build outputs were removed before commit.&lt;/li&gt;
&lt;li&gt;Scope and secret checks passed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Could someone with a SharePoint Online tenant please test this against representative modern pages or list content and report back on the PR? Useful checks include alt-text and link-text findings, heading-order detection, malformed content, managed-path remediation URLs, permissions, throttling, keyboard access, and responsive layout. Real tenant screenshots would be especially helpful; none are fabricated here.&lt;/p&gt;

&lt;p&gt;Thank you for helping validate and improve this community sample.&lt;/p&gt;

</description>
      <category>sharepoint</category>
      <category>spfx</category>
      <category>react</category>
      <category>a11y</category>
    </item>
    <item>
      <title>Help wanted: validate a React document metadata review SPFx sample</title>
      <dc:creator>Vilius</dc:creator>
      <pubDate>Sun, 30 Aug 2026 16:51:17 +0000</pubDate>
      <link>https://dev.to/vystartasv/help-wanted-validate-a-react-document-metadata-review-spfx-sample-1404</link>
      <guid>https://dev.to/vystartasv/help-wanted-validate-a-react-document-metadata-review-spfx-sample-1404</guid>
      <description>&lt;h1&gt;
  
  
  Help wanted: validate a React document metadata review SPFx sample
&lt;/h1&gt;

&lt;p&gt;A new read-only React sample is ready for the PnP SharePoint Framework webparts repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pull request: &lt;a href="https://github.com/pnp/sp-dev-fx-webparts/pull/6482" rel="noopener noreferrer"&gt;https://github.com/pnp/sp-dev-fx-webparts/pull/6482&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sample: &lt;code&gt;samples/react-document-metadata-review/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The web part reviews a bounded SharePoint document-library or folder view and highlights missing or invalid metadata. It supports required text, choice, and taxonomy field checks, then provides safe links for people to remediate the source documents.&lt;/p&gt;

&lt;p&gt;It deliberately performs no create, update, or delete operations. The README documents the SharePoint permissions, configuration format, and tenant validation steps.&lt;/p&gt;

&lt;p&gt;Local verification completed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;13 deterministic Jest tests passed.&lt;/li&gt;
&lt;li&gt;SPFx DEBUG and SHIP builds passed.&lt;/li&gt;
&lt;li&gt;Production &lt;code&gt;.sppkg&lt;/code&gt; packaging passed.&lt;/li&gt;
&lt;li&gt;Scope and security review found no secrets or unrelated changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Could someone with a SharePoint Online tenant please test this against a representative document library and report back on the PR? Useful checks include metadata highlighting, folder scoping, taxonomy values, permission-denied and throttling behavior, safe links, keyboard access, and responsive layout. Real tenant screenshots would be especially helpful; none are fabricated here.&lt;/p&gt;

&lt;p&gt;Thank you for helping validate and improve this community sample.&lt;/p&gt;

</description>
      <category>sharepoint</category>
      <category>spfx</category>
      <category>react</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
