<?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: puppet</title>
    <description>The latest articles tagged 'puppet' on DEV Community.</description>
    <link>https://dev.to/t/puppet</link>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tag/puppet"/>
    <language>en</language>
    <item>
      <title>Puppet Enterprise 2026.0, 2025.12.0, and 2023.8.12 Are Here</title>
      <dc:creator>Gavin Patton</dc:creator>
      <pubDate>Mon, 19 Oct 2026 13:53:40 +0000</pubDate>
      <link>https://dev.to/puppet/puppet-enterprise-20260-2025120-and-2023812-are-here-36ic</link>
      <guid>https://dev.to/puppet/puppet-enterprise-20260-2025120-and-2023812-are-here-36ic</guid>
      <description>&lt;p&gt;Puppet Enterprise (PE) 2026.0, 2025.12.0, and 2023.8.12 are now available.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PE 2026.0&lt;/strong&gt; highlights include: Puppet Core 9, new operating system support, patch management updates, security updates, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PE 2025.12.0&lt;/strong&gt; moves to our latest-1 release, including critical security and bug fixes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PE 2023.8.12&lt;/strong&gt; is now in extended support, which ends February 27, 2027. This release includes critical security and bug fixes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's New in Puppet Enterprise 2026.0
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Built on Puppet Core 9
&lt;/h3&gt;

&lt;p&gt;PE 2026.0 is the first Puppet Enterprise release built on Puppet Core 9. Puppet Core 9 updates key runtime and security foundations, including &lt;strong&gt;Ruby 4.0&lt;/strong&gt; and &lt;strong&gt;OpenSSL 3.5&lt;/strong&gt;, and adds hardening for certificates, authentication, and server endpoints. Because you inherit these changes when you upgrade, we recommend testing your custom code and modules before rolling out.&lt;/p&gt;

&lt;p&gt;Helpful resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://help.puppet.com/core/current/Content/PuppetCore/PuppetReleaseNotes/release_notes_osp.htm" rel="noopener noreferrer"&gt;Puppet Core 9 release notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.puppet.com/core/current/Content/PuppetCore/upgrading-from-puppet8-to-puppet9.htm" rel="noopener noreferrer"&gt;Puppet Core 9 upgrade documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.puppet.com/products/puppet-core/support-lifecycle" rel="noopener noreferrer"&gt;Puppet Core platform support lifecycle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Validate your modules for Puppet Core 9 compatibility with &lt;a href="https://help.puppet.com/pdk/current/topics/release_notes_pdk.htm#PDK380" rel="noopener noreferrer"&gt;Puppet Development Kit (PDK) 4.0&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Patch Management Reporting
&lt;/h3&gt;

&lt;p&gt;Patching tasks now report failures that occur while packages are being installed, instead of showing an overall success. Advanced Patching flags failed Windows patch runs as failures in the patch runs report, so your reports reflect what really happened.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reliable CA Storage Migration and Recovery
&lt;/h3&gt;

&lt;p&gt;PE 2026.0 uses database-backed CA storage by default. To make moving existing CA storage to the database, and recovering afterward, more dependable, this release includes several fixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Puppet runs no longer fail after cleanup&lt;/li&gt;
&lt;li&gt;Missing on-disk CA files are handled&lt;/li&gt;
&lt;li&gt;Mismatched backup restores are rejected up front&lt;/li&gt;
&lt;li&gt;Fresh installs and imports are more reliable&lt;/li&gt;
&lt;li&gt;Recovery no longer writes other nodes' settings into the primary&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security Refresh
&lt;/h3&gt;

&lt;p&gt;PE 2026.0 includes many security updates, covering the Git tooling used by r10k, the nginx and Jetty web servers, FIPS cryptography, logging, and the toolchain used to build PE client tools. See Security Updates below, and Platform Support Updates for operating system changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Included in PE 2025.12.0 and PE 2023.8.12
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PE 2025.12.0
&lt;/h3&gt;

&lt;p&gt;This release moves PE 2025 into the latest-1 release. Highlights for the PE 2025 release include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More reliable CA storage:&lt;/strong&gt; Puppet runs no longer fail after a CA database-storage migration, and intentionally absent local CA files are handled correctly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security updates:&lt;/strong&gt; See Security Updates below.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  PE 2023.8.12 (LTS maintenance and security release)
&lt;/h3&gt;

&lt;p&gt;This release includes security and bug fixes, including updated FIPS cryptography components, the Git tooling used by r10k, and related components. It does not add new features or change platform support.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important for LTS customers:&lt;/strong&gt; PE 2023.8.12 does not include the logging library (logback-core) fixes delivered in PE 2026.0 and 2025.12.0, which address CVE-2026-9828, CVE-2026-10532, and CVE-2026-13006. The 2023.8 line uses an older logging library branch that no longer receives upstream updates, so these fixes cannot be applied to it. Support for PE 2023.8.x ends February 27, 2027.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Platform Support Updates
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent platform additions:&lt;/strong&gt; AlmaLinux 10, Rocky Linux 10, Ubuntu 26.04 (AMD), and Ubuntu 26.04 (ARM)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Primary server platform additions:&lt;/strong&gt; Ubuntu 26.04&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform removals:&lt;/strong&gt; Ubuntu 20.04 amd64 is removed for the primary server, and several older agent platforms are removed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual installation:&lt;/strong&gt; Debian 12 armhf requires manual installation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security Updates
&lt;/h2&gt;

&lt;p&gt;All three releases include dependency updates that reduce your security exposure.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Release&lt;/th&gt;
&lt;th&gt;Security updates&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PE 2026.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The broadest refresh: Git tooling used by r10k, nginx, Jetty, logging, FIPS cryptography, the toolchain used to build PE client tools, and many other components, including fixes for critical-severity vulnerabilities. Default PE deployments were assessed as not exploitable for the nginx vulnerabilities addressed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PE 2025.12.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Carries forward many of the same updates, including the Git tooling, nginx, Jetty, and client tools toolchain, plus additional dependency updates.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PE 2023.8.12&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Updates the FIPS cryptography components (resolving ten vulnerabilities), the Git tooling used by r10k, and related components. Does not include the logging library fixes (see the note for LTS customers above).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For complete details, specific CVE identifiers, and component versions, see the release notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://help.puppet.com/pe/current/topics/release-notes-pe-x-0.htm" rel="noopener noreferrer"&gt;PE 2026.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.puppet.com/pe/2025.12.0/topics/release-notes-pe-x-y-0.htm" rel="noopener noreferrer"&gt;PE 2025.12.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.puppet.com/pe/2023.8/topics/release-notes-pe-x-y-12.htm" rel="noopener noreferrer"&gt;PE 2023.8.12&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have questions about upgrading, contact Puppet Support or your account team.&lt;/p&gt;

&lt;p&gt;Thank you for being a Puppet Enterprise customer.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Puppet Enterprise Team&lt;/em&gt;&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>devops</category>
      <category>infrastructure</category>
      <category>security</category>
    </item>
    <item>
      <title>Smoke Study Video Review: A Practical Checklist for Pharmaceutical QA Teams</title>
      <dc:creator>Modern Industry Insights</dc:creator>
      <pubDate>Tue, 13 Oct 2026 06:03:51 +0000</pubDate>
      <link>https://dev.to/mo_90b11d29421791a2f/smoke-study-video-review-a-practical-checklist-for-pharmaceutical-qa-teams-3a0j</link>
      <guid>https://dev.to/mo_90b11d29421791a2f/smoke-study-video-review-a-practical-checklist-for-pharmaceutical-qa-teams-3a0j</guid>
      <description>&lt;p&gt;In pharmaceutical cleanrooms, airflow visualization helps teams understand how air moves around exposed products, critical surfaces, equipment, and operators during aseptic operations.&lt;/p&gt;

&lt;p&gt;But recording a smoke study is only half the job.&lt;/p&gt;

&lt;p&gt;The recorded footage must be reviewed to determine whether it provides sufficient evidence of airflow protection under the conditions defined in the approved protocol. This is where a structured &lt;strong&gt;Smoke Study Video Review&lt;/strong&gt; becomes important.&lt;/p&gt;

&lt;p&gt;For Quality Assurance (QA), validation, and engineering teams, the challenge is not simply identifying unusual smoke movement. It is determining what the observation means, whether it meets predefined acceptance criteria, and how the conclusion should be documented.&lt;/p&gt;

&lt;p&gt;Here is a practical nine-point checklist for reviewing smoke study footage.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Verify the Study Configuration
&lt;/h2&gt;

&lt;p&gt;Before interpreting the airflow, confirm that the video represents the approved study setup.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protocol version and study identification.&lt;/li&gt;
&lt;li&gt;Room and equipment configuration.&lt;/li&gt;
&lt;li&gt;Smoke source and test conditions.&lt;/li&gt;
&lt;li&gt;At-rest or in-operation state.&lt;/li&gt;
&lt;li&gt;Relevant supporting airflow measurements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the recorded setup differs from the approved protocol, document the discrepancy and evaluate its impact before accepting the results.&lt;/p&gt;

&lt;p&gt;This prevents reviewers from drawing conclusions from footage that does not represent the intended conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Check Whether Critical Areas Are Visible
&lt;/h2&gt;

&lt;p&gt;A video may contain extensive footage but still fail to demonstrate what matters.&lt;/p&gt;

&lt;p&gt;Review whether the camera clearly captures the exposed product, critical surfaces, relevant equipment, and operator activities.&lt;/p&gt;

&lt;p&gt;For example, if an operator's arm blocks the view of a filling point during an intervention, the reviewer may be unable to determine whether airflow protection was maintained.&lt;/p&gt;

&lt;p&gt;Record the timestamp and location of any visibility gap. Then assess whether the available evidence is sufficient or whether supplementary footage or repeat testing is needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Evaluate First-Air Protection
&lt;/h2&gt;

&lt;p&gt;First air is filtered air that reaches exposed product or critical surfaces before contacting other objects that could compromise its protective function.&lt;/p&gt;

&lt;p&gt;During the review, follow the visible airflow path toward the critical zone.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the airflow reach the exposed product as intended?&lt;/li&gt;
&lt;li&gt;Do operator movements interfere with the airflow path?&lt;/li&gt;
&lt;li&gt;Does equipment obstruct the intended air movement?&lt;/li&gt;
&lt;li&gt;Is there evidence of a potential contamination risk?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;EU GMP Annex 1 paragraphs 4.4 and 4.19 address protection of critical zones and first-air protection in relevant contexts.&lt;/p&gt;

&lt;p&gt;An observation should be assessed against the approved protocol and supporting evidence rather than classified as a failure based on appearance alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Review Dynamic Operations and Operator Interventions
&lt;/h2&gt;

&lt;p&gt;Airflow can behave differently when operators perform routine activities.&lt;/p&gt;

&lt;p&gt;Examples include material replenishment, equipment adjustments, and interventions near critical processing areas.&lt;/p&gt;

&lt;p&gt;Compare the recorded activities with the interventions defined in the approved protocol. Check whether the footage represents the intended operating conditions and whether important activities are missing.&lt;/p&gt;

&lt;p&gt;EU GMP Annex 1 paragraph 8.16 addresses authorized lists of inherent and corrective interventions, taking their potential impact on airflow into account.&lt;/p&gt;

&lt;p&gt;If a critical intervention was not recorded, document the gap and assess whether the study remains adequate for its intended purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Interpret Turbulence and Reversal in Context
&lt;/h2&gt;

&lt;p&gt;Smoke visualization may show eddies, turbulence, temporary reversals, or changes in airflow direction.&lt;/p&gt;

&lt;p&gt;These observations are not automatically failures.&lt;/p&gt;

&lt;p&gt;Their significance depends on factors such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Location of the disturbance.&lt;/li&gt;
&lt;li&gt;Duration and frequency.&lt;/li&gt;
&lt;li&gt;Proximity to exposed products.&lt;/li&gt;
&lt;li&gt;Interaction with operator movements or equipment.&lt;/li&gt;
&lt;li&gt;Evidence of maintained or restored protection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, a temporary disturbance away from a critical surface may require a different assessment from airflow that visibly carries contamination from an operator toward an exposed product.&lt;/p&gt;

&lt;p&gt;The review should document what was observed, evaluate the potential risk, and compare the evidence with the approved acceptance criteria.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Verify Coverage of Critical Locations
&lt;/h2&gt;

&lt;p&gt;A review should confirm that all protocol-defined locations and scenarios are represented in the footage.&lt;/p&gt;

&lt;p&gt;Depending on the facility, these may include filling points, exposed product pathways, equipment interfaces, and locations affected by interventions.&lt;/p&gt;

&lt;p&gt;For barrier systems, EU GMP Annex 1 paragraph 4.20 addresses airflow pattern studies at relevant open-isolator interfaces and during RABS interventions, including door openings.&lt;/p&gt;

&lt;p&gt;A simple location-by-location review can help identify missing evidence before the final report is approved.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Compare Findings with Predefined Acceptance Criteria
&lt;/h2&gt;

&lt;p&gt;Once observations have been recorded, compare them with the approved acceptance criteria.&lt;/p&gt;

&lt;p&gt;Avoid relying solely on subjective descriptions such as “good airflow” or “acceptable smoke movement.” The reviewer should explain how the evidence supports the conclusion required by the protocol.&lt;/p&gt;

&lt;p&gt;Acceptance criteria should be established before reviewing the results. If they are inadequate, the issue should be addressed through the site's quality and change-control procedures rather than by adjusting criteria to fit the observed outcome.&lt;/p&gt;

&lt;p&gt;Neither EU GMP Annex 1 nor the FDA's aseptic processing guidance provides a universal set of pass/fail thresholds for every smoke study video review.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Document Deviations and Follow-Up Actions
&lt;/h2&gt;

&lt;p&gt;Unexpected airflow patterns, incomplete footage, or differences between the approved and actual setup may require investigation.&lt;/p&gt;

&lt;p&gt;A useful review record should identify:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The observation and timestamp.&lt;/li&gt;
&lt;li&gt;The affected location and operating activity.&lt;/li&gt;
&lt;li&gt;The relevant acceptance criterion.&lt;/li&gt;
&lt;li&gt;The potential impact on product protection.&lt;/li&gt;
&lt;li&gt;The conclusion and required follow-up.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Where necessary, follow the site's deviation management process and determine whether corrective and preventive actions (CAPA) are appropriate.&lt;/p&gt;

&lt;p&gt;If footage contains repeated takes or edited clips, retain the original recordings and document why the additional versions were created.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Maintain Video and Report Traceability
&lt;/h2&gt;

&lt;p&gt;The final check is documentation integrity.&lt;/p&gt;

&lt;p&gt;Verify that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Video file identifiers match the report.&lt;/li&gt;
&lt;li&gt;Timestamps correspond to the observation log.&lt;/li&gt;
&lt;li&gt;Location labels are consistent.&lt;/li&gt;
&lt;li&gt;Original recordings are retained alongside edited clips.&lt;/li&gt;
&lt;li&gt;Deviations and follow-up actions are traceable.&lt;/li&gt;
&lt;li&gt;Final conclusions match the approved protocol and acceptance criteria.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;EU GMP Annex 1 paragraph 4.15 addresses the retention of airflow visualization recordings and documentation of outcomes.&lt;/p&gt;

&lt;p&gt;Traceability allows another qualified reviewer to understand the evidence and follow the reasoning behind the final decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Example: Reviewing an Airflow Observation
&lt;/h2&gt;

&lt;p&gt;Consider a hypothetical scenario in which smoke near an operator's forearm briefly moves toward an exposed product during a manual intervention.&lt;/p&gt;

&lt;p&gt;The reviewer should not immediately classify the study as failed.&lt;/p&gt;

&lt;p&gt;Instead, the review should establish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Observation:&lt;/strong&gt; Smoke movement toward the critical area.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context:&lt;/strong&gt; The intervention being performed and the location involved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; The complete video sequence and relevant supporting data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assessment:&lt;/strong&gt; Whether the movement compromises the protection required by the approved protocol.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outcome:&lt;/strong&gt; A documented conclusion and any necessary investigation or repeat testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach separates an observation from the decision made about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How EU GMP Annex 1 and FDA Guidance Fit Into the Review
&lt;/h2&gt;

&lt;p&gt;EU GMP Annex 1 (2022), paragraph 4.15, addresses airflow visualization at rest and in operation, with video recordings retained and outcomes documented.&lt;/p&gt;

&lt;p&gt;The FDA's guidance on sterile drug products produced by aseptic processing also discusses in situ airflow pattern analysis under dynamic conditions and documentation of conclusions.&lt;/p&gt;

&lt;p&gt;These sources provide regulatory context for smoke study evaluation. However, the nine checks in this article are a practical review framework, not a verbatim regulatory checklist.&lt;/p&gt;

&lt;p&gt;Facilities should define responsibilities, acceptance criteria, and documentation requirements through their approved protocols and quality systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;A reliable Smoke Study Video Review requires more than watching smoke move through a cleanroom. It requires reviewers to connect the recorded evidence with the study protocol, operational conditions, contamination risks, and documented acceptance criteria.&lt;/p&gt;

&lt;p&gt;For QA and validation teams, a structured checklist makes it easier to identify missing evidence, investigate potential concerns, and explain the final decision.&lt;/p&gt;

&lt;p&gt;For a more detailed guide, see &lt;a href="https://incepbio.com/blog/smoke-study-video-review/" rel="noopener noreferrer"&gt;Smoke Study Video Review: 9 Essential Checks for QA Teams&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can also explore &lt;a href="https://incepbio.com/cleanroomvalidation.html" rel="noopener noreferrer"&gt;IncepBio's cleanroom validation services&lt;/a&gt; for information about static and dynamic smoke studies in pharmaceutical manufacturing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is intended for educational purposes. Study-specific decisions should follow applicable regulatory requirements, approved protocols, risk assessments, and site procedures.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F92xc4dgc06lugewr9tpf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F92xc4dgc06lugewr9tpf.png" alt=" " width="800" height="755"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pharma</category>
      <category>qualityassurance</category>
      <category>manufacturing</category>
      <category>puppet</category>
    </item>
    <item>
      <title>SCE 2.3.0 for Windows improves auditing performance by 70%</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Mon, 12 Oct 2026 11:50:00 +0000</pubDate>
      <link>https://dev.to/puppet/sce-230-for-windows-improves-auditing-performance-by-70-3j4e</link>
      <guid>https://dev.to/puppet/sce-230-for-windows-improves-auditing-performance-by-70-3j4e</guid>
      <description>&lt;p&gt;Some underlying pieces have been completely rebuilt to really improve the performance of Security Compliance Enforcement (SCE) for Windows. This release also provides more detailed compliance reporting and simplifies ongoing maintenance using Puppet native modules.&lt;/p&gt;

&lt;p&gt;SCE automates the enforcement of CIS Benchmark recommendations and DISA STIG guidance across Windows and Linux environments, helping teams maintain secure and compliant configurations at scale. SCE is available with Puppet Core and Puppet Enterprise Advanced.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Upgrade?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Improve performance and scalability by reducing policy enforcement overhead.&lt;/li&gt;
&lt;li&gt;Gain more precise visibility into compliance changes.&lt;/li&gt;
&lt;li&gt;Simplify compliance operations by identifying, validating, and remediating configuration drift more efficiently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's New?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Direct enforcement of Windows security and audit policies through Puppet native modules and Windows APIs, reducing reliance on third-party DSC content.&lt;/li&gt;
&lt;li&gt;Per-setting reporting, with each CIS control mapped to its own resource in the Puppet catalog.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security and Maintenance Updates
&lt;/h2&gt;

&lt;p&gt;This release resolves an issue that could cause CIS compliance scans to incorrectly report AutoAdminLogon settings as non-compliant on Windows Server 2019 and 2022.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Read the release notes: &lt;a href="https://help.puppet.com/sce/current/windows/scew_relnotes_v230.htm" rel="noopener noreferrer"&gt;SCE for Windows v2.3.0 release notes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Plan your upgrade to SCE for Windows v2.3.0 !&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  New to SCE?
&lt;/h2&gt;

&lt;p&gt;If you haven't looked at SCE before and are wondering how you can use your existing Puppet management capabilities to expand into compliance auditing and enforcement, please explore the documentation to learn how SCE helps maintain secure configurations, thus protecting systems and data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://help.puppet.com/sce/current/intro/sce_intro.htm" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;👀 Learn more about SCE&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>security</category>
      <category>microsoft</category>
    </item>
    <item>
      <title># OpenVox 9 ist da!</title>
      <dc:creator>Martin Alfke</dc:creator>
      <pubDate>Fri, 09 Oct 2026 06:48:53 +0000</pubDate>
      <link>https://dev.to/betadots/-openvox-9-ist-da-354</link>
      <guid>https://dev.to/betadots/-openvox-9-ist-da-354</guid>
      <description>&lt;p&gt;Am 2. Oktober 2026 hat die OpenVox-Project-Community das Release 9.0 von OpenVox veröffentlicht.&lt;br&gt;
Damit basiert die Community-Version auf demselben Unterbau wie &lt;a href="https://www.puppet.com/products/puppet-core" rel="noopener noreferrer"&gt;Puppet Core 9&lt;/a&gt;, das im August 2026 erschienen ist.&lt;/p&gt;

&lt;p&gt;Der folgende Text ist eine Übersetzung mit kleineren Anpassungen vom &lt;a href="https://voxpupuli.org/blog/2026/10/02/openvox-9-release/" rel="noopener noreferrer"&gt;Release Blog Posting&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wir haben soeben OpenVox 9.0.0 veröffentlicht!&lt;/strong&gt; Hierbei handelt es sich um eine Aktualisierung der Plattformbasis; das bedeutet, dass alle Kernabhängigkeiten auf aktiv gepflegte Versionen umgestellt wurden. Wer die jüngste Flut an CVE-Meldungen mit Sorge verfolgt hat, für den ist dieses Release genau das Richtige.&lt;/p&gt;

&lt;p&gt;OpenVox 9 umfasst &lt;code&gt;openvox-agent&lt;/code&gt; und &lt;code&gt;openvoxdb&lt;/code&gt; in Version 9.0.0 sowie &lt;code&gt;openvox-server&lt;/code&gt; in Version 9.0.1, ergänzt durch &lt;code&gt;openfact&lt;/code&gt; 6.2.1.&lt;br&gt;
(Das erste Release von &lt;code&gt;openvox-server&lt;/code&gt; trägt die Nummer 9.0.1, da die Version 9.0.0 bereits durch ein Artefakt belegt war, das während der Beta-Phase versehentlich auf Clojars veröffentlicht worden war.)&lt;br&gt;
Zudem wurde eine Reihe &lt;a href="https://voxpupuli.org/blog/2026/04/14/openvox-9-request-for-comments/" rel="noopener noreferrer"&gt;längst veralteter Code-Bestände entfernt&lt;/a&gt;.&lt;br&gt;
Neue Funktionen sind für die Version 10.x geplant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Release-Hinweise und Dokumentation
&lt;/h2&gt;

&lt;p&gt;Die vollständigen Release-Hinweise, einschließlich Fehlerbehebungen und der Änderungen in den jeweiligen Vorabversionen, findet man hier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;openvox-agent&lt;/code&gt;: &lt;a href="https://github.com/OpenVoxProject/openvox/releases/tag/9.0.0" rel="noopener noreferrer"&gt;https://github.com/OpenVoxProject/openvox/releases/tag/9.0.0&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openvox-server&lt;/code&gt;: &lt;a href="https://github.com/OpenVoxProject/openvox-server/releases/tag/9.0.1" rel="noopener noreferrer"&gt;https://github.com/OpenVoxProject/openvox-server/releases/tag/9.0.1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openvoxdb&lt;/code&gt;: &lt;a href="https://github.com/OpenVoxProject/openvoxdb/releases/tag/9.0.0" rel="noopener noreferrer"&gt;https://github.com/OpenVoxProject/openvoxdb/releases/tag/9.0.0&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openfact&lt;/code&gt;: &lt;a href="https://github.com/OpenVoxProject/openfact/releases/tag/6.0.0" rel="noopener noreferrer"&gt;https://github.com/OpenVoxProject/openfact/releases/tag/6.0.0&lt;/a&gt; (OpenVox 9.0.0 enthält Version 6.2.1, die lediglich Fehlerbehebungen ergänzt)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Die Dokumentation zu OpenVox 9 findet man unter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenVox: &lt;a href="https://docs.openvoxproject.org/openvox/9.x/" rel="noopener noreferrer"&gt;https://docs.openvoxproject.org/openvox/9.x/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenVox Server: &lt;a href="https://docs.openvoxproject.org/openvox-server/9.x/" rel="noopener noreferrer"&gt;https://docs.openvoxproject.org/openvox-server/9.x/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenVoxDB: &lt;a href="https://docs.openvoxproject.org/openvoxdb/9.x/" rel="noopener noreferrer"&gt;https://docs.openvoxproject.org/openvoxdb/9.x/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  OpenVox 9 beziehen
&lt;/h2&gt;

&lt;p&gt;OpenVox-9-Pakete werden unter der Bezeichnung &lt;code&gt;openvox9&lt;/code&gt; bereitgestellt.&lt;br&gt;
Um diese Repositories zu konfigurieren, muss das Paket &lt;code&gt;openvox9-release&lt;/code&gt; installiert werden:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apt.voxpupuli.org/" rel="noopener noreferrer"&gt;https://apt.voxpupuli.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yum.voxpupuli.org/" rel="noopener noreferrer"&gt;https://yum.voxpupuli.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pakete für macOS und Windows findet man unter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://downloads.voxpupuli.org/mac/openvox9/" rel="noopener noreferrer"&gt;https://downloads.voxpupuli.org/mac/openvox9/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://downloads.voxpupuli.org/windows/openvox9/" rel="noopener noreferrer"&gt;https://downloads.voxpupuli.org/windows/openvox9/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wenn Beta-Versionen oder Release-Candidates getestet wurden, gelanget man durch ein normales Paket-Upgrade zur finalen Version.&lt;br&gt;
Vorabversionen enthielten eine Tilde in der Versionsnummer (z. B. &lt;code&gt;9.0.0~rc4&lt;/code&gt;), damit sie bei der Sortierung unterhalb der finalen Version eingeordnet wurden.&lt;/p&gt;

&lt;p&gt;OpenVox 8 bleibt über die &lt;code&gt;openvox8&lt;/code&gt;-Repositories verfügbar. Es wird weiterhin für mindestens sechs Monate wichtige Fehlerbehebungen und Sicherheits-Updates erhalten.&lt;br&gt;
OpenVox-8-Agents können weiterhin mit OpenVox-9-Servern kommunizieren. Man muss nicht alles auf einmal umstellen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wichtigste Änderungen im Vergleich zu OpenVox 8
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;openvox-agent&lt;/code&gt; &lt;strong&gt;Ruby 4.0&lt;/strong&gt; (zuvor Ruby 3.2) und &lt;strong&gt;OpenSSL 3.5 LTS&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openvox-server&lt;/code&gt; verwendet &lt;strong&gt;JRuby 10.1&lt;/strong&gt;, das mit Ruby 4.0 kompatibel ist. Dies ist ein Upgrade von JRuby 9.4, das mit Ruby 3.1 kompatibel war.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openvox-server&lt;/code&gt; und &lt;code&gt;openvoxdb&lt;/code&gt; werden offiziell unter &lt;strong&gt;Java 21 und 25&lt;/strong&gt; unterstützt und getestet; die Unterstützung für Java 17 wurde eingestellt. 
Die Pakete laufen unter Java 25, sofern die Plattform dies bereitstellt, andernfalls unter Java 21. Die FIPS-Pakete laufen &lt;strong&gt;nur unter Java 21&lt;/strong&gt;, da die Bouncy-Castle-FIPS-Bibliotheken nur bis Java 21 zertifiziert sind. Der Service nutzt jetzt den Paketpfad und nicht die Alternative (&lt;code&gt;/usr/bin/java&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openvoxdb&lt;/code&gt; wird nun mit &lt;strong&gt;PostgreSQL 18&lt;/strong&gt; getestet.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openvox-agent&lt;/code&gt; enthält &lt;strong&gt;openfact 6&lt;/strong&gt;; damit entfällt die Fact-Option &lt;code&gt;ldapname&lt;/code&gt;, und es werden Warnungen zu künftigen Entfernungen (geplant für OpenVox 10) ausgegeben.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vor dem Upgrade
&lt;/h2&gt;

&lt;p&gt;Dies ist ein Major-Release mit Breaking Changes (Änderungen, die bestehende Konfigurationen oder Abläufe beeinträchtigen können).&lt;br&gt;
Bitte die Release Notes vollständig durchlesen und die &lt;a href="https://github.com/OpenVoxProject/openvox/releases/tag/9.0.0" rel="noopener noreferrer"&gt;OpenVox 9.0.0 Release Notes&lt;/a&gt; beachten.&lt;/p&gt;

&lt;p&gt;Die wichtigsten Informationen sind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Der Standardwert für &lt;code&gt;server&lt;/code&gt; ist nicht mehr &lt;code&gt;puppet&lt;/code&gt;.&lt;/strong&gt;
Agents müssen &lt;code&gt;server&lt;/code&gt; oder &lt;code&gt;server_list&lt;/code&gt; konfigurieren oder SRV-Records verwenden (auch &lt;code&gt;ca_server&lt;/code&gt; und &lt;code&gt;report_server&lt;/code&gt; funktionieren für die jeweiligen Dienste). 
Ein Agent, der als Root ausgeführt wird, ohne dass eine dieser Optionen gesetzt ist, bricht mit einem Fehler ab.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Die Einstellung &lt;code&gt;reports&lt;/code&gt; hat nun den Standardwert &lt;code&gt;none&lt;/code&gt;&lt;/strong&gt; anstelle von &lt;code&gt;store&lt;/code&gt;. 
Setzen Sie &lt;code&gt;reports = store&lt;/code&gt; auf Ihren Servern, wenn Sie darauf angewiesen sind, dass Berichte auf der Festplatte gespeichert werden.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Datenbindungen aus der Hiera-3-Ära sind entfallen.&lt;/strong&gt;
Die Einstellungen &lt;code&gt;data_binding_terminus&lt;/code&gt; und &lt;code&gt;environment_data_provider&lt;/code&gt; sowie der Hiera-3-Indirector-Terminus wurden entfernt; Hiera 5 ist der unterstützte Standard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Java 21 ist nun erforderlich.&lt;/strong&gt; Wenn die Dienste unter Java 17 starten, stürzen sie frühzeitig mit einer &lt;code&gt;ClassNotFoundException&lt;/code&gt; für &lt;code&gt;java.util.SequencedCollection&lt;/code&gt; ab.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bekannte Probleme
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Agent-Daemon kann gelegentlich beim Status „applying configuration“ hängen bleiben
&lt;/h3&gt;

&lt;p&gt;Bei einer kleinen Anzahl von Nutzern wurde beobachtet, dass der &lt;code&gt;puppet agent&lt;/code&gt;-Daemon keine Statusmeldungen mehr sendet, während ein per &lt;code&gt;fork&lt;/code&gt; gestarteter Prozess mit der Bezeichnung &lt;code&gt;puppet agent: applying configuration&lt;/code&gt; aktiv bleibt und sich nicht beendet (&lt;a href="https://github.com/OpenVoxProject/openvox/issues/485" rel="noopener noreferrer"&gt;openvox#485&lt;/a&gt;).&lt;br&gt;
Dies tritt selten auf: Die bisherigen Meldungen stammen von kleinen Linux-VMs mit nur einer vCPU, bei denen das Problem alle paar Tage auftrat.&lt;/p&gt;

&lt;p&gt;Die Ursache ist eine seltene Race-Condition zwischen den Hintergrund-Threads für DNS-Auflösungen in Ruby (deren Verhalten sich in Ruby 3.3 und 3.4 geändert hat) und dem &lt;code&gt;fork&lt;/code&gt;-Aufruf, der jeden Agent-Lauf einleitet.&lt;br&gt;
Erfolgt der &lt;code&gt;fork&lt;/code&gt; im ungünstigen Moment, übernimmt der Kindprozess eine gesperrte glibc-Resolver-Instanz (Mutex), wodurch jede Namensauflösung in diesem Kindprozess blockiert wird.&lt;br&gt;
OpenVox 8 (Ruby 3.2) ist davon nicht betroffen.&lt;/p&gt;

&lt;p&gt;OpenVox 9.0.0 enthält mehrere Änderungen, die die Wahrscheinlichkeit dieses Problems stark verringern und sicherstellen, dass sich der Daemon selbstständig erholt, sollte es dennoch auftreten:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Der Agent führt im Daemon keine Namensauflösungen mehr unmittelbar vor dem &lt;code&gt;fork&lt;/code&gt;-Aufruf für einen Lauf durch (&lt;a href="https://github.com/OpenVoxProject/openvox/pull/683" rel="noopener noreferrer"&gt;openvox#683&lt;/a&gt;); damit entfällt der in den Berichten identifizierte Auslöser.&lt;/li&gt;
&lt;li&gt;Ein Lauf, der die Zeitvorgabe &lt;code&gt;runtimeout&lt;/code&gt; überschreitet, wird nun beendet (abgebrochen), sodass der Daemon mit dem nächsten Lauf fortfahren kann (&lt;a href="https://github.com/OpenVoxProject/openvox/pull/642" rel="noopener noreferrer"&gt;openvox#642&lt;/a&gt;, &lt;a href="https://github.com/OpenVoxProject/openvox/pull/643" rel="noopener noreferrer"&gt;openvox#643&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;openfact begrenzt die FQDN-Auflösung in seinen Hostname-Resolvern (&lt;a href="https://github.com/OpenVoxProject/openfact/pull/177" rel="noopener noreferrer"&gt;openfact#177&lt;/a&gt;). Falls dieses Problem weiterhin auftritt, kann das Setzen von &lt;code&gt;RUBY_TCP_NO_FAST_FALLBACK=1&lt;/code&gt; in einer systemd-Override-Konfiguration für den &lt;code&gt;puppet&lt;/code&gt;-Dienst die Häufigkeit des Auftretens verringern:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;# systemctl edit puppet
&lt;/span&gt;&lt;span class="nn"&gt;[Service]&lt;/span&gt;
&lt;span class="py"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;RUBY_TCP_NO_FAST_FALLBACK=1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ein Neustart des &lt;code&gt;puppet&lt;/code&gt;-Dienstes bereinigt keinen bereits hängengebliebenen Kindprozess; dieser muss mittels &lt;code&gt;SIGKILL&lt;/code&gt; beendet werden.&lt;br&gt;
Sollte das Problem bei Version 9.0.0 aufstoßen, bitte im Issue &lt;a href="https://github.com/OpenVoxProject/openvox/issues/485" rel="noopener noreferrer"&gt;openvox#485&lt;/a&gt; Informationen hinterlegen.&lt;/p&gt;

&lt;h3&gt;
  
  
  FIPS-Pakete enthalten ältere Bouncy-Castle-JAR-Dateien
&lt;/h3&gt;

&lt;p&gt;Die FIPS-Builds von &lt;code&gt;openvox-server&lt;/code&gt; und &lt;code&gt;openvoxdb&lt;/code&gt; enthalten einen älteren Satz von Bouncy-Castle-FIPS-JAR-Dateien.&lt;br&gt;
Die neueste Version der Bouncy-Castle-FIPS-1.x-Reihe weist ein kleines Problem auf, das in einer stark eingeschränkten Konfiguration (außerhalb der Standardeinstellungen) zu Schwierigkeiten führen könnte; daher führen wir kein Update auf diese Version durch.&lt;br&gt;
Stattdessen wird OpenVox 9.1 auf die Bouncy-Castle-FIPS-2.x-Reihe umsteigen, welche für FIPS unter Java 21 vollständig zertifiziert ist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vielen Dank
&lt;/h2&gt;

&lt;p&gt;OpenVox 9 würde ohne all jene nicht existieren, die Pull-Requests eingereicht, Fehler gemeldet, Vorabversionen getestet und an Diskussionen über anstehende Änderungen teilgenommen haben.&lt;br&gt;
Vielen Dank an alle!&lt;/p&gt;

&lt;p&gt;Ein besonderer Dank gilt den Personen, die in diesem Entwicklungszyklus einen Großteil der Arbeit geleistet haben, darunter unter anderem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/bastelfreak" rel="noopener noreferrer"&gt;Tim Meusel&lt;/a&gt; für seine Arbeit an nahezu allen Repositories: Aktualisierungen von Laufzeitumgebungen und Abhängigkeiten, CI, Release-PRs sowie SBOMs.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Sharpie" rel="noopener noreferrer"&gt;Charlie Sharpsteen&lt;/a&gt;, für seine Arbeit an Server, Datenbank, Laufzeitumgebung und Build-Tools sowie für die umfassende Überarbeitung der Dokumentation („Great Docs Reset“).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/miharp" rel="noopener noreferrer"&gt;Michael Harp&lt;/a&gt;, für den enormen Umfang an Dokumentationsarbeit – einschließlich der Unterlagen für Version 9.x – sowie für die Ermittlung der Ursache des oben beschriebenen Agenten-Hängers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/nmburgan" rel="noopener noreferrer"&gt;Nick Burgan&lt;/a&gt;, für den Ausbau der Release-Infrastruktur, Smoke-Tests sowie die Arbeit an der Paketierung für Java und FIPS.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/corporate-gadfly" rel="noopener noreferrer"&gt;Haroon Rafique&lt;/a&gt;, für die Pflege der Clojure-Komponenten von &lt;code&gt;openvox-server&lt;/code&gt; und &lt;code&gt;openvoxdb&lt;/code&gt;, FIPS-Korrekturen und mehr. Sichere Standardeinstellung für &lt;code&gt;server&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tuxmea" rel="noopener noreferrer"&gt;Martin Alfke&lt;/a&gt;, für die Aktualisierung großer Teile der Dokumentation für OpenVox und OpenFact.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/rwaffen" rel="noopener noreferrer"&gt;Robert Waffen&lt;/a&gt;, für die Neugestaltung der Container-Images und die Einführung von Multi-Plattform-Builds.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/binford2k" rel="noopener noreferrer"&gt;Ben Ford&lt;/a&gt;, für die „Getting-Started“- und „Quickstart“-Anleitungen, die Dokumentations-Tools sowie die Katalogvalidierung im Agenten.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/jcharaoui" rel="noopener noreferrer"&gt;Jerome Charaoui&lt;/a&gt;, für die Debian-Paketierung und Korrekturen zur Reproduzierbarkeit.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/jpartlow" rel="noopener noreferrer"&gt;Josh Partlow&lt;/a&gt;, für die arm64-Unterstützung und weitere Arbeiten an den Abnahmetests.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/austb" rel="noopener noreferrer"&gt;Austin Blatt&lt;/a&gt;, für die Migration auf Jetty 12.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/bootc" rel="noopener noreferrer"&gt;Chris Boot&lt;/a&gt;, für wochenlange, geduldige Debugging-Arbeit im Zusammenhang mit &lt;a href="https://github.com/OpenVoxProject/openvox/issues/485" rel="noopener noreferrer"&gt;openvox#485&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/MirandaStreeter" rel="noopener noreferrer"&gt;Miranda Streeter&lt;/a&gt;, für die Verbesserungen der Startgeschwindigkeit der Container-Images.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bei Fragen oder Problemen mit diesen Releases bitte im &lt;code&gt;#openvox&lt;/code&gt; Channel auf Slack oder &lt;code&gt;#voxpupuli-openvox&lt;/code&gt; im IRC melden.&lt;br&gt;
Details findet man unter &lt;a href="https://voxpupuli.org/connect/" rel="noopener noreferrer"&gt;https://voxpupuli.org/connect/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>openvox</category>
      <category>puppet</category>
      <category>release</category>
    </item>
    <item>
      <title>Puppetlabs Modules Roundup – September 2026</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Tue, 06 Oct 2026 11:47:00 +0000</pubDate>
      <link>https://dev.to/puppet/puppetlabs-modules-roundup-september-2026-36if</link>
      <guid>https://dev.to/puppet/puppetlabs-modules-roundup-september-2026-36if</guid>
      <description>&lt;p&gt;September 2026 saw 53 Puppetlabs modules get releases (some of which got multiple releases) in the Puppetlabs Forge catalog, so it is going to be a full edition of this month's roundup as I try to pull all of these changes into one place.&lt;/p&gt;

&lt;p&gt;Across the month, the clearest themes were Puppet Core 9 support as it rolls out across nearly the whole catalog. This preparation also saw Puppet 7 support dropped in seven modules, so the summary below focuses on support changes, maintenance work, and operational impact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Highlighted Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Puppet Core 9 support rolls out across nearly the whole catalog
&lt;/h3&gt;

&lt;p&gt;Forty-nine of the fifty-three modules released this month shipped explicit Puppet Core 9 compatibility work. This included metadata bumps, new CI lanes, and in several cases a parallel Ruby 4.0 compatibility pass. The releases range from Tier 1 modules (examples: puppetdb, mysql, postgresql, stdlib, apache, firewall) to the full set of Bolt task-helper and cloud-inventory modules, making this the single largest coordinated update the puppetlabs namespace has shipped in one month in 2026. &lt;code&gt;facts 1.8.0&lt;/code&gt; is part of the same push, after first correcting an accidental major-version bump to 2.0.0 back down to a minor release.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Affected modules: accounts, acl, apache, apt, audit_policy, aws_inventory, azure_inventory, bash_task_helper, chocolatey, concat, docker, dsc_lite, facter_task, facts, firewall, gcloud_inventory, haproxy, http_request, iis, java_ks, kubernetes, motd, mysql, ntp, pkcs7, postgresql, powershell, powershell_task_helper, puppet_conf, puppetdb, pwshlib, python_task_helper, registry, ruby_plugin_helper, ruby_task_helper, sce_linux, scheduled_task, secure_env_vars, security_policy, sqlserver, sslcertificate, stdlib, terraform, tomcat, vault, vcsrepo, windows_env, wsus_client, yaml.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Puppet Core prep drops Puppet 7 support in seven modules
&lt;/h3&gt;

&lt;p&gt;As part of preparing for Puppet Core, &lt;code&gt;puppetdb&lt;/code&gt;, &lt;code&gt;registry&lt;/code&gt;, &lt;code&gt;acl&lt;/code&gt;, &lt;code&gt;facter_task&lt;/code&gt;, &lt;code&gt;puppet_conf&lt;/code&gt;, &lt;code&gt;java_ks&lt;/code&gt;, and &lt;code&gt;vcsrepo&lt;/code&gt; shipped new releases that drop Puppet 7 support outright. Because &lt;code&gt;registry&lt;/code&gt; 6.0.0 was a major release and a breaking change, four of its dependents (&lt;code&gt;chocolatey&lt;/code&gt;, &lt;code&gt;wsus_client&lt;/code&gt;, &lt;code&gt;windows_eventlog&lt;/code&gt;, and &lt;code&gt;motd&lt;/code&gt;)  had to widen their puppetlabs/registry dependency bound to allow the new major version.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Affected modules: acl, chocolatey, facter_task, java_ks, motd, puppet_conf, puppetdb, registry, vcsrepo, windows_eventlog, wsus_client.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Breaking changes to review
&lt;/h3&gt;

&lt;p&gt;A small number of releases include compatibility-impacting changes that may need extra review in your modules or environments before rolling them out.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;puppetdb&lt;/code&gt;: The new version 9.0.0 drops Puppet 7 support, changes the default postgres_version from 14 to 17 to match what Puppet Enterprise now installs, and adds strict Puppet data-type validation across module parameters that may reject previously-accepted invalid values.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;registry&lt;/code&gt;: Version 6.0.0 drops Puppet 7 support as part of its Puppet Core update, a major-version change that required chocolatey, wsus_client, windows_eventlog, and motd to widen their dependency bounds to allow it. If your module is dependent on registry, you may want to look at updating your upper bound to allow it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Updates Happened to Puppetlabs Modules in September 2026?
&lt;/h2&gt;

&lt;p&gt;The following is an alphabetical listing of modules which received updates in September 2026. If a module had multiple versions released, the updates are collected together, numbered with the "latest" version available.&lt;/p&gt;




&lt;h3&gt;
  
  
  accounts 9.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-04 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/accounts" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11699) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-accounts/pull/515" rel="noopener noreferrer"&gt;#515&lt;/a&gt; (&lt;a href="https://github.com/skyamgarp" rel="noopener noreferrer"&gt;skyamgarp&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  acl 6.0.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-04 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/acl" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support and dropping support for Puppet 7.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(CAT-2360) Prepare module for Puppet Core / Drop Support for Puppet 7 &lt;a href="https://github.com/puppetlabs/puppetlabs-acl/pull/310" rel="noopener noreferrer"&gt;#310&lt;/a&gt; (&lt;a href="https://github.com/david22swan" rel="noopener noreferrer"&gt;david22swan&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;MODULES-11712: Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-acl/pull/315" rel="noopener noreferrer"&gt;#315&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  apache 13.4.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-02 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/apache" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11700) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-apache/pull/2638" rel="noopener noreferrer"&gt;#2638&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  apt 11.4.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-09 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/apt" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding support for Puppet Core 9.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11701) Add support for Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-apt/pull/1275" rel="noopener noreferrer"&gt;#1275&lt;/a&gt; (&lt;a href="https://github.com/shubhamshinde360" rel="noopener noreferrer"&gt;shubhamshinde360&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  audit_policy 1.2.1
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-10 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/audit_policy" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release fixed misleading ensure-change reports, added Puppet Core 9 support, and addressed some maintenance issues with the repo.&lt;/p&gt;

&lt;p&gt;Includes monthly releases: 1.2.1 (2026-09-10), 1.2.0 (2026-09-08), 1.1.0 (2026-09-02).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[MODULES-11879] Fix misleading ensure-change reports when only flag differs &lt;a href="https://github.com/puppetlabs/puppetlabs-audit_policy/pull/31" rel="noopener noreferrer"&gt;#31&lt;/a&gt; (&lt;a href="https://github.com/mehul-jain1" rel="noopener noreferrer"&gt;mehul-jain1&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(MODULES-11932): Add Puppet Core 9 support in puppetlabs-audit_policy &lt;a href="https://github.com/puppetlabs/puppetlabs-audit_policy/pull/28" rel="noopener noreferrer"&gt;#28&lt;/a&gt; (&lt;a href="https://github.com/SugatD" rel="noopener noreferrer"&gt;SugatD&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[MODULES-11839] Implement manifest init and add specs &lt;a href="https://github.com/puppetlabs/puppetlabs-audit_policy/pull/26" rel="noopener noreferrer"&gt;#26&lt;/a&gt; (&lt;a href="https://github.com/SugatD" rel="noopener noreferrer"&gt;SugatD&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[MODULES-11794] Reformat CHANGELOG.md to Keep a Changelog format &lt;a href="https://github.com/puppetlabs/puppetlabs-audit_policy/pull/24" rel="noopener noreferrer"&gt;#24&lt;/a&gt; (&lt;a href="https://github.com/SugatD" rel="noopener noreferrer"&gt;SugatD&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  aws_inventory 0.9.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/aws_inventory" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.9.0) while also adding support for Puppet Core 9.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (1.0.0 -&amp;gt; 0.9.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-aws_inventory/pull/33" rel="noopener noreferrer"&gt;#33&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193) aws_inventory Pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-aws_inventory/pull/28" rel="noopener noreferrer"&gt;#28&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  azure_inventory 0.6.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/azure_inventory" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.6.0) while also updating to Puppet Core 9.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (1.0.0 -&amp;gt; 0.6.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-azure_inventory/pull/21" rel="noopener noreferrer"&gt;#21&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193) azure_inventory pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-azure_inventory/pull/18" rel="noopener noreferrer"&gt;#18&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  bash_task_helper 2.3.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/bash_task_helper" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (3.0.0 -&amp;gt; 2.3.0) while also adding the PDK update to Puppet Core 9.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (3.0.0 -&amp;gt; 2.3.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-bash_task_helper/pull/40" rel="noopener noreferrer"&gt;#40&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193) bash_task_helper pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-bash_task_helper/pull/37" rel="noopener noreferrer"&gt;#37&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  chocolatey 9.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-10 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/chocolatey" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release added Puppet Core 9 support and widened the puppetlabs/registry dependency to allow 6.x.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11731) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-chocolatey/pull/390" rel="noopener noreferrer"&gt;#390&lt;/a&gt; (&lt;a href="https://github.com/shubhamshinde360" rel="noopener noreferrer"&gt;shubhamshinde360&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(MODULES-11708) Widen puppetlabs/registry dependency to allow 6.x &lt;a href="https://github.com/puppetlabs/puppetlabs-chocolatey/pull/392" rel="noopener noreferrer"&gt;#392&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  comply 3.9.1
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-01 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/comply" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;5 CVEs were addressed in this release. Check the official &lt;a href="https://help.puppet.com/scm/current/Content/UserGuide/SCM/Release_notes/release_notes.htm#SecurityComplianceManagement391" rel="noopener noreferrer"&gt;release notes for comply 3.9.1&lt;/a&gt; for the full details.&lt;/p&gt;




&lt;h3&gt;
  
  
  complyadm 3.9.1
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-01 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/complyadm" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;5 CVEs were addressed in this release. Check the official &lt;a href="https://help.puppet.com/scm/current/Content/UserGuide/SCM/Release_notes/release_notes.htm#SecurityComplianceManagement391" rel="noopener noreferrer"&gt;release notes for complyadm 3.9.1&lt;/a&gt; for the full details.&lt;/p&gt;




&lt;h3&gt;
  
  
  concat 10.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-03 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/concat" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11714) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-concat/pull/840" rel="noopener noreferrer"&gt;#840&lt;/a&gt; (&lt;a href="https://github.com/amitkarsale" rel="noopener noreferrer"&gt;amitkarsale&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  docker 10.5.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-23 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/docker" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release added Puppet Core 9 support and fixed the EL7 Docker CE repository path to point at the correct CentOS source.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11718) Add Puppet Core 9 support in puppetlabs-docker &lt;a href="https://github.com/puppetlabs/puppetlabs-docker/pull/1065" rel="noopener noreferrer"&gt;#1065&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(MODULES-11929) Point EL7 at the centos Docker CE repo path &lt;a href="https://github.com/puppetlabs/puppetlabs-docker/pull/1067" rel="noopener noreferrer"&gt;#1067&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  dsc_lite 5.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-08 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/dsc_lite" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-dsc_lite/pull/243" rel="noopener noreferrer"&gt;#243&lt;/a&gt; (&lt;a href="https://github.com/LukasAud" rel="noopener noreferrer"&gt;LukasAud&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  facter_task 3.0.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-15 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/facter_task" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support and dropping support for Puppet 7, along with some CI maintenance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(CAT-2372) Prepare module for Puppet Core / Drop Support for Puppet 7 &lt;a href="https://github.com/puppetlabs/puppetlabs-facter_task/pull/243" rel="noopener noreferrer"&gt;#243&lt;/a&gt; (&lt;a href="https://github.com/SugatD" rel="noopener noreferrer"&gt;SugatD&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(MODULES-11722) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-facter_task/pull/246" rel="noopener noreferrer"&gt;#246&lt;/a&gt; (&lt;a href="https://github.com/shubhamshinde360" rel="noopener noreferrer"&gt;shubhamshinde360&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(CAT-2296) Update github runner image to ubuntu-24.04 &lt;a href="https://github.com/puppetlabs/puppetlabs-facter_task/pull/242" rel="noopener noreferrer"&gt;#242&lt;/a&gt; (&lt;a href="https://github.com/shubhamshinde360" rel="noopener noreferrer"&gt;shubhamshinde360&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  facts 1.8.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/facts" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (2.0.0 -&amp;gt; 1.8.0) while also adding Puppet Core 9 compatibility.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (2.0.0 -&amp;gt; 1.8.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-facts/pull/74" rel="noopener noreferrer"&gt;#74&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193): facts pdk update for Puppet Core 9 compatibility &lt;a href="https://github.com/puppetlabs/puppetlabs-facts/pull/71" rel="noopener noreferrer"&gt;#71&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  firewall 8.6.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-02 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/firewall" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MODULES-11717: Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-firewall/pull/1302" rel="noopener noreferrer"&gt;#1302&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  gcloud_inventory 0.4.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/gcloud_inventory" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.4.0) while also adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (1.0.0 -&amp;gt; 0.4.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-gcloud_inventory/pull/19" rel="noopener noreferrer"&gt;#19&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193): gcloud_inventory pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-gcloud_inventory/pull/16" rel="noopener noreferrer"&gt;#16&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  haproxy 9.2.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-16 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/haproxy" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release added Puppet Core 9 support, introduced the &lt;code&gt;haproxy::http_errors&lt;/code&gt; and &lt;code&gt;haproxy::ring&lt;/code&gt; resource types, and added Ubuntu 24.04 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;feat(MODULES-11716) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-haproxy/pull/654" rel="noopener noreferrer"&gt;#654&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add haproxy::http_errors and haproxy::ring resources &lt;a href="https://github.com/puppetlabs/puppetlabs-haproxy/pull/651" rel="noopener noreferrer"&gt;#651&lt;/a&gt; (&lt;a href="https://github.com/UiP9AV6Y" rel="noopener noreferrer"&gt;UiP9AV6Y&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(CAT-2125) Add Ubuntu 24.04 support &lt;a href="https://github.com/puppetlabs/puppetlabs-haproxy/pull/620" rel="noopener noreferrer"&gt;#620&lt;/a&gt; (&lt;a href="https://github.com/shubhamshinde360" rel="noopener noreferrer"&gt;shubhamshinde360&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  http_request 0.4.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/http_request" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.4.0) while also adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (1.0.0 -&amp;gt; 0.4.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-http_request/pull/24" rel="noopener noreferrer"&gt;#24&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193): http_request pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-http_request/pull/20" rel="noopener noreferrer"&gt;#20&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  iis 11.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-15 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/iis" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11733) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-iis/pull/420" rel="noopener noreferrer"&gt;#420&lt;/a&gt; (&lt;a href="https://github.com/shubhamshinde360" rel="noopener noreferrer"&gt;shubhamshinde360&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  java_ks 6.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-23 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/java_ks" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This month's releases made the keytool path configurable, dropped support for Puppet 7, and added Puppet Core 9 support. It also fixed incorrect boolean parameter handling and a Tempfile race condition.&lt;/p&gt;

&lt;p&gt;Includes monthly releases: 6.1.0 (2026-09-23), 6.0.0 (2026-09-16).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make keytool path configureable &lt;a href="https://github.com/puppetlabs/puppetlabs-java_ks/pull/477" rel="noopener noreferrer"&gt;#477&lt;/a&gt; (&lt;a href="https://github.com/bastelfreak" rel="noopener noreferrer"&gt;bastelfreak&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(CAT-2377) Prepare module for Puppet Core / Drop Support for Puppet 7 &lt;a href="https://github.com/puppetlabs/puppetlabs-java_ks/pull/471" rel="noopener noreferrer"&gt;#471&lt;/a&gt; (&lt;a href="https://github.com/shubhamshinde360" rel="noopener noreferrer"&gt;shubhamshinde360&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;MODULES-11721: Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-java_ks/pull/475" rel="noopener noreferrer"&gt;#475&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix boolean parameters &lt;a href="https://github.com/puppetlabs/puppetlabs-java_ks/pull/469" rel="noopener noreferrer"&gt;#469&lt;/a&gt; (&lt;a href="https://github.com/alexjfisher" rel="noopener noreferrer"&gt;alexjfisher&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix race condition by memoizing &lt;code&gt;Tempfile&lt;/code&gt; objects &lt;a href="https://github.com/puppetlabs/puppetlabs-java_ks/pull/461" rel="noopener noreferrer"&gt;#461&lt;/a&gt; (&lt;a href="https://github.com/alexjfisher" rel="noopener noreferrer"&gt;alexjfisher&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  kubernetes 8.2.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-24 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/kubernetes" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MODULES-11735: Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-kubernetes/pull/723" rel="noopener noreferrer"&gt;#723&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  motd 8.1.1
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-04 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/motd" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This month's releases added Puppet Core 9 support and widened the puppetlabs/registry dependency to allow 6.x.&lt;/p&gt;

&lt;p&gt;Includes monthly releases: 8.1.1 (2026-09-04), 8.1.0 (2026-09-02).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11708) Widen puppetlabs/registry dependency to allow 6.x &lt;a href="https://github.com/puppetlabs/puppetlabs-motd/pull/571" rel="noopener noreferrer"&gt;#571&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(MODULES-11702) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-motd/pull/561" rel="noopener noreferrer"&gt;#561&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  mysql 17.3.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-28 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/mysql" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This month's releases added Puppet Core 9 support, support for hex hashes with the &lt;code&gt;caching_sha2_password&lt;/code&gt; plugin, and a fix for the &lt;code&gt;mysqld_version&lt;/code&gt; fact on FreeBSD. It also tightened validation on &lt;code&gt;purge_conf_dir&lt;/code&gt;, fixed &lt;code&gt;.my.cnf&lt;/code&gt; root password resolution timing, and allowed metacharacters in SQL file paths.&lt;/p&gt;

&lt;p&gt;Includes monthly releases: 17.3.0 (2026-09-28), 17.2.0 (2026-09-16), 17.1.1 (2026-09-02).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add ability to use hex hash with caching_sha2_password plugin &lt;a href="https://github.com/puppetlabs/puppetlabs-mysql/pull/1612" rel="noopener noreferrer"&gt;#1612&lt;/a&gt; (&lt;a href="https://github.com/C24-AK" rel="noopener noreferrer"&gt;C24-AK&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Correct Fact mysqld_version on FreeBSD &lt;a href="https://github.com/puppetlabs/puppetlabs-mysql/pull/1654" rel="noopener noreferrer"&gt;#1654&lt;/a&gt; (&lt;a href="https://github.com/kapouik" rel="noopener noreferrer"&gt;kapouik&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feat(MODULES-11715) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-mysql/pull/1742" rel="noopener noreferrer"&gt;#1742&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Restrict mysql::server::purge_conf_dir type to valid values (#1740) &lt;a href="https://github.com/puppetlabs/puppetlabs-mysql/pull/1741" rel="noopener noreferrer"&gt;#1741&lt;/a&gt; (&lt;a href="https://github.com/jst-cyr" rel="noopener noreferrer"&gt;jst-cyr&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Use deferrable_epp for .my.cnf to ensure root password resolve correctly &lt;a href="https://github.com/puppetlabs/puppetlabs-mysql/pull/1698" rel="noopener noreferrer"&gt;#1698&lt;/a&gt; (&lt;a href="https://github.com/jiayuchen888" rel="noopener noreferrer"&gt;jiayuchen888&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Update conditional logic xtrabackup.pp to properly... &lt;a href="https://github.com/puppetlabs/puppetlabs-mysql/pull/1609" rel="noopener noreferrer"&gt;#1609&lt;/a&gt; (&lt;a href="https://github.com/ndelic0" rel="noopener noreferrer"&gt;ndelic0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;allow metacharacters * and ? in sql file path &lt;a href="https://github.com/puppetlabs/puppetlabs-mysql/pull/1544" rel="noopener noreferrer"&gt;#1544&lt;/a&gt; (&lt;a href="https://github.com/zivis" rel="noopener noreferrer"&gt;zivis&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ntp 11.2.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-04 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/ntp" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11705) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-ntp/pull/745" rel="noopener noreferrer"&gt;#745&lt;/a&gt; (&lt;a href="https://github.com/skyamgarp" rel="noopener noreferrer"&gt;skyamgarp&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  peadm 3.38.3
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-15 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/peadm" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This month's releases completed the CA storage migration for split topologies, added support for PE 2023.8.11 and 2025.11.3, and surfaced provision_replica failures in the add_replica plan instead of hiding them.&lt;/p&gt;

&lt;p&gt;Includes monthly releases: 3.38.3 (2026-09-15), 3.38.2 (2026-09-01).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding support for PE 2023.8.11 and 2025.11.3 &lt;a href="https://github.com/puppetlabs/puppetlabs-peadm/pull/702" rel="noopener noreferrer"&gt;#702&lt;/a&gt; (&lt;a href="https://github.com/Jade2153" rel="noopener noreferrer"&gt;Jade2153&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(PE-45431) Complete CA storage migration for split topologies &lt;a href="https://github.com/puppetlabs/puppetlabs-peadm/pull/696" rel="noopener noreferrer"&gt;#696&lt;/a&gt; (&lt;a href="https://github.com/Jade2153" rel="noopener noreferrer"&gt;Jade2153&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(PE-43490) Surface provision_replica failures in add_replica plan &lt;a href="https://github.com/puppetlabs/puppetlabs-peadm/pull/677" rel="noopener noreferrer"&gt;#677&lt;/a&gt; (&lt;a href="https://github.com/CharithaDunuwille" rel="noopener noreferrer"&gt;CharithaDunuwille&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(PE-45885) Add code-manager to the managed database list &lt;a href="https://github.com/puppetlabs/puppetlabs-peadm/pull/698" rel="noopener noreferrer"&gt;#698&lt;/a&gt; (&lt;a href="https://github.com/Magisus" rel="noopener noreferrer"&gt;Magisus&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(PE-45110) Ruby 4.0 compatibility: fix missing default-gem deps, document upstream blockers maintenance &lt;a href="https://github.com/puppetlabs/puppetlabs-peadm/pull/685" rel="noopener noreferrer"&gt;#685&lt;/a&gt; (&lt;a href="https://github.com/CharithaDunuwille" rel="noopener noreferrer"&gt;CharithaDunuwille&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(PE-45390) Add code coverage reporting to CI &lt;a href="https://github.com/puppetlabs/puppetlabs-peadm/pull/686" rel="noopener noreferrer"&gt;#686&lt;/a&gt; (&lt;a href="https://github.com/seamymckenna" rel="noopener noreferrer"&gt;seamymckenna&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Adding support for PE 2025.11.2 &lt;a href="https://github.com/puppetlabs/puppetlabs-peadm/pull/694" rel="noopener noreferrer"&gt;#694&lt;/a&gt; (&lt;a href="https://github.com/Jade2153" rel="noopener noreferrer"&gt;Jade2153&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  pkcs7 0.2.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/pkcs7" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.2.0) while also adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (1.0.0 -&amp;gt; 0.2.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-pkcs7/pull/19" rel="noopener noreferrer"&gt;#19&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193): pkcs7 pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-pkcs7/pull/15" rel="noopener noreferrer"&gt;#15&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  postgresql 10.7.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-08 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/postgresql" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release added Puppet Core 9 support, allowed &lt;code&gt;puppet/systemd&lt;/code&gt; 10.x, and fixed default_privileges idempotency on PostgreSQL 17.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11720) Add Puppet Core 9 support in puppetlabs-postgresql &lt;a href="https://github.com/puppetlabs/puppetlabs-postgresql/pull/1700" rel="noopener noreferrer"&gt;#1700&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Allow puppet/systemd 10.x &lt;a href="https://github.com/puppetlabs/puppetlabs-postgresql/pull/1691" rel="noopener noreferrer"&gt;#1691&lt;/a&gt; (&lt;a href="https://github.com/deric" rel="noopener noreferrer"&gt;deric&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(MODULES-11935) Fix default_privileges idempotency on PostgreSQL 17 &lt;a href="https://github.com/puppetlabs/puppetlabs-postgresql/pull/1701" rel="noopener noreferrer"&gt;#1701&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  powershell 6.2.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-09 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/powershell" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding support for Puppet Core 9.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11706) Add support for Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-powershell/pull/440" rel="noopener noreferrer"&gt;#440&lt;/a&gt; (&lt;a href="https://github.com/shubhamshinde360" rel="noopener noreferrer"&gt;shubhamshinde360&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  powershell_task_helper 0.2.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/powershell_task_helper" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.2.0) while also adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (1.0.0 -&amp;gt; 0.2.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-powershell_task_helper/pull/10" rel="noopener noreferrer"&gt;#10&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193) powershell_task_helper pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-powershell_task_helper/pull/7" rel="noopener noreferrer"&gt;#7&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  puppet_conf 3.0.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-02 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/puppet_conf" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support and dropping support for Puppet 7.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(CAT-2387) Prepare module for Puppet Core / Drop Support for Puppet 7 &lt;a href="https://github.com/puppetlabs/puppetlabs-puppet_conf/pull/223" rel="noopener noreferrer"&gt;#223&lt;/a&gt; (&lt;a href="https://github.com/SugatD" rel="noopener noreferrer"&gt;SugatD&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(MODULES-11736) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-puppet_conf/pull/225" rel="noopener noreferrer"&gt;#225&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  puppetdb 9.0.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-30 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/puppetdb" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release dropped Puppet 7 support, changed the default postgres_version from 14 to 17, and added strict data-type validation and Sensitive-type handling for secrets across module parameters, along with several other fixes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add strict Puppet data type validation across module parameters (String, Integer, Boolean, Enum, Array, Hash, Absolutepath, Stdlib::Host, etc.), including port validation restricted to the unprivileged range (1024-49151) &lt;a href="https://github.com/puppetlabs/puppetlabs-puppetdb/pull/411" rel="noopener noreferrer"&gt;#411&lt;/a&gt; (&lt;a href="https://github.com/chambersmp" rel="noopener noreferrer"&gt;chambersmp&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Support for Puppet Core 9&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Breaking:&lt;/strong&gt; Default &lt;code&gt;postgres_version&lt;/code&gt; bumped from &lt;code&gt;14&lt;/code&gt; to &lt;code&gt;17&lt;/code&gt; to match the version installed by the latest Puppet Enterprise&lt;/li&gt;
&lt;li&gt;Use the &lt;code&gt;Sensitive&lt;/code&gt; data type for secrets (passwords) &lt;a href="https://github.com/puppetlabs/puppetlabs-puppetdb/pull/331" rel="noopener noreferrer"&gt;#331&lt;/a&gt; (&lt;a href="https://github.com/cocker-cc" rel="noopener noreferrer"&gt;cocker-cc&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Extend the &lt;code&gt;puppetdb_version&lt;/code&gt; fact to handle Debian packages &lt;a href="https://github.com/puppetlabs/puppetlabs-puppetdb/pull/416" rel="noopener noreferrer"&gt;#416&lt;/a&gt; (&lt;a href="https://github.com/rwaffen" rel="noopener noreferrer"&gt;rwaffen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Updated to PDK 3.8.0, dropped Puppet 7 support, and tightened version requirements on module dependencies&lt;/li&gt;
&lt;li&gt;Update CI workflows (maint) &lt;a href="https://github.com/puppetlabs/puppetlabs-puppetdb/pull/410" rel="noopener noreferrer"&gt;#410&lt;/a&gt; (&lt;a href="https://github.com/h0tw1r3" rel="noopener noreferrer"&gt;h0tw1r3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Update CODEOWNERS &lt;a href="https://github.com/puppetlabs/puppetlabs-puppetdb/pull/417" rel="noopener noreferrer"&gt;#417&lt;/a&gt; (&lt;a href="https://github.com/chambersmp" rel="noopener noreferrer"&gt;chambersmp&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Correct spelling of "certificates" &lt;a href="https://github.com/puppetlabs/puppetlabs-puppetdb/pull/414" rel="noopener noreferrer"&gt;#414&lt;/a&gt; (&lt;a href="https://github.com/viscountstyx" rel="noopener noreferrer"&gt;viscountstyx&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Lower the &lt;code&gt;stdlib&lt;/code&gt; requirement back down, since &lt;code&gt;puppetdb&lt;/code&gt; depends on &lt;code&gt;puppetlabs/postgresql&lt;/code&gt;, which depends on &lt;code&gt;puppet/systemd&lt;/code&gt;, and &lt;code&gt;puppet/systemd&lt;/code&gt; does not yet support &lt;code&gt;stdlib &amp;gt;= 10.0.0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Correct stale &lt;code&gt;postgres_version&lt;/code&gt; documentation in &lt;code&gt;puppetdb::init&lt;/code&gt; and &lt;code&gt;puppetdb::database::postgresql&lt;/code&gt; that still referenced the old &lt;code&gt;11&lt;/code&gt;/&lt;code&gt;9.6&lt;/code&gt; defaults&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;open_ssl_port&lt;/code&gt; to default &lt;code&gt;false&lt;/code&gt; instead of &lt;code&gt;undef&lt;/code&gt; in unit test shared examples&lt;/li&gt;
&lt;li&gt;Prepare module for Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-puppetdb/pull/438" rel="noopener noreferrer"&gt;#438&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Feature maintenance &lt;a href="https://github.com/puppetlabs/puppetlabs-puppetdb/pull/436" rel="noopener noreferrer"&gt;#436&lt;/a&gt; (&lt;a href="https://github.com/klab-systems" rel="noopener noreferrer"&gt;klab-systems&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Update storeconfig ini section with masters &lt;a href="https://github.com/puppetlabs/puppetlabs-puppetdb/pull/432" rel="noopener noreferrer"&gt;#432&lt;/a&gt; (&lt;a href="https://github.com/XMol" rel="noopener noreferrer"&gt;XMol&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Issue 430: Fix Datatype for listen_addresses &lt;a href="https://github.com/puppetlabs/puppetlabs-puppetdb/pull/431" rel="noopener noreferrer"&gt;#431&lt;/a&gt; (&lt;a href="https://github.com/cocker-cc" rel="noopener noreferrer"&gt;cocker-cc&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Only include 'firewall' module when necessary &lt;a href="https://github.com/puppetlabs/puppetlabs-puppetdb/pull/415" rel="noopener noreferrer"&gt;#415&lt;/a&gt; (&lt;a href="https://github.com/Geod24" rel="noopener noreferrer"&gt;Geod24&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  pwshlib 2.1.1
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-07 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/pwshlib" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release declared Puppet Core 9 support in metadata.json and added a Ruby 4.0 / Puppet Core 9 CI lane, sourcing gems from Puppet Core.&lt;/p&gt;

&lt;p&gt;Includes monthly releases: 2.1.1 (2026-09-07), 2.1.0 (2026-09-07).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Declare Puppet Core 9 support in metadata.json requirements &lt;a href="https://github.com/puppetlabs/ruby-pwsh/pull/393" rel="noopener noreferrer"&gt;#393&lt;/a&gt; (&lt;a href="https://github.com/LukasAud" rel="noopener noreferrer"&gt;LukasAud&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(CAT-2589) Add Ruby 4.0 / Puppet Core 9 lane, source gems from Puppet Core &lt;a href="https://github.com/puppetlabs/ruby-pwsh/pull/385" rel="noopener noreferrer"&gt;#385&lt;/a&gt; (&lt;a href="https://github.com/LukasAud" rel="noopener noreferrer"&gt;LukasAud&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  python_task_helper 0.7.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/python_task_helper" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.7.0) while also adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (1.0.0 -&amp;gt; 0.7.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-python_task_helper/pull/25" rel="noopener noreferrer"&gt;#25&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193): python_task_helper pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-python_task_helper/pull/22" rel="noopener noreferrer"&gt;#22&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  registry 6.0.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-04 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/registry" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release dropped Puppet 7 support, added Puppet Core 9 support, and added Sensitive data type support for &lt;code&gt;registry_value&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(CAT-2389) Puppet Core update / Drop Puppet 7 support &lt;a href="https://github.com/puppetlabs/puppetlabs-registry/pull/315" rel="noopener noreferrer"&gt;#315&lt;/a&gt; (&lt;a href="https://github.com/LukasAud" rel="noopener noreferrer"&gt;LukasAud&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;MODULES-11708: Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-registry/pull/320" rel="noopener noreferrer"&gt;#320&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(PA-8354): Add support for Sensitive data in registry_value &lt;a href="https://github.com/puppetlabs/puppetlabs-registry/pull/319" rel="noopener noreferrer"&gt;#319&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Update link to Puppet modules contribution documentation &lt;a href="https://github.com/puppetlabs/puppetlabs-registry/pull/318" rel="noopener noreferrer"&gt;#318&lt;/a&gt; (&lt;a href="https://github.com/jst-cyr" rel="noopener noreferrer"&gt;jst-cyr&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ruby_plugin_helper 0.4.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/ruby_plugin_helper" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.4.0) while also adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (1.0.0 -&amp;gt; 0.4.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-ruby_plugin_helper/pull/13" rel="noopener noreferrer"&gt;#13&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193) ruby_plugin_helper pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-ruby_plugin_helper/pull/10" rel="noopener noreferrer"&gt;#10&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ruby_task_helper 1.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/ruby_task_helper" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (2.0.0 -&amp;gt; 1.1.0) while also adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (2.0.0 -&amp;gt; 1.1.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-ruby_task_helper/pull/31" rel="noopener noreferrer"&gt;#31&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193): ruby_task_helper pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-ruby_task_helper/pull/26" rel="noopener noreferrer"&gt;#26&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  sce_linux 2.9.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-09 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/sce_linux" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;A few highlights from this release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crypto controls incorrectly configured on&lt;/strong&gt; Rocky Linux &lt;strong&gt;8.&lt;/strong&gt; Crypto controls are intended to prevent the use of weak Message Authentication Code (MAC) algorithms. On Rocky Linux 8, the controls were not working as designed. The manage_crypto_policies block was updated to resolve the issue and enforce strong algorithms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error occurs when specifying active zone target for firewalld.&lt;/strong&gt; Previously, an error occurred when users set an active zone target for the firewalld solution by specifying {"public"=&amp;gt;{"target"=&amp;gt;"DROP"}}. The "unable to parse" error was displayed because the {"public"=&amp;gt;{"target"=&amp;gt;"DROP"}} example shown on the Puppet Forge &lt;strong&gt;Reference&lt;/strong&gt; page was invalid. To resolve the issue, the &lt;strong&gt;Reference&lt;/strong&gt; page was updated to display only the valid example:.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PAM profiles not applied on&lt;/strong&gt; Ubuntu Linux. Previously, pluggable authentication module (PAM) profiles were enabled but not applied, causing some 5.3.x controls to fail on nodes reported as compliant. The issue was resolved to ensure that the profiles are applied and the PAM stack is hardened.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check the official &lt;a href="https://help.puppet.com/sce/current/linux/scel_relnotes_v290.htm" rel="noopener noreferrer"&gt;release notes for sce_linux 2.9.0&lt;/a&gt; for the full details.&lt;/p&gt;




&lt;h3&gt;
  
  
  scheduled_task 5.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-03 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/scheduled_task" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding support for Puppet Core 9.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11734) Add support for Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-scheduled_task/pull/277" rel="noopener noreferrer"&gt;#277&lt;/a&gt; (&lt;a href="https://github.com/SugatD" rel="noopener noreferrer"&gt;SugatD&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  secure_env_vars 0.3.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/secure_env_vars" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.3.0) while also adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (1.0.0 -&amp;gt; 0.3.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-secure_env_vars/pull/8" rel="noopener noreferrer"&gt;#8&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193): secure_env_vars pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-secure_env_vars/pull/5" rel="noopener noreferrer"&gt;#5&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  security_policy 1.2.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-24 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/security_policy" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release added Puppet Core 9 support, isolated per-SID translation failures so one bad SID no longer fails the whole batch, and fixed the security_option provider missing out-of-band policy drift.&lt;/p&gt;

&lt;p&gt;Includes monthly releases: 1.2.0 (2026-09-23), 1.1.2 (2026-09-18), 1.1.1 (2026-09-01).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[MODULES-11933] Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-security_policy/pull/57" rel="noopener noreferrer"&gt;#57&lt;/a&gt; (&lt;a href="https://github.com/SugatD" rel="noopener noreferrer"&gt;SugatD&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[MODULES-11947] Isolate per-SID translation failures from the whole batch &lt;a href="https://github.com/puppetlabs/puppetlabs-security_policy/pull/55" rel="noopener noreferrer"&gt;#55&lt;/a&gt; (&lt;a href="https://github.com/mehul-jain1" rel="noopener noreferrer"&gt;mehul-jain1&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix security_option provider missing out-of-band security policy drift &lt;a href="https://github.com/puppetlabs/puppetlabs-security_policy/pull/50" rel="noopener noreferrer"&gt;#50&lt;/a&gt; (&lt;a href="https://github.com/mehul-jain1" rel="noopener noreferrer"&gt;mehul-jain1&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  sqlserver 5.2.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-02 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/sqlserver" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support, along with several CI and test-infrastructure fixes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11725) Add Puppet Core 9 support in puppetlabs-sqlserver &lt;a href="https://github.com/puppetlabs/puppetlabs-sqlserver/pull/511" rel="noopener noreferrer"&gt;#511&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(MODULES-11902) Force reinstall puppet_agent module in acceptance bootstrap &lt;a href="https://github.com/puppetlabs/puppetlabs-sqlserver/pull/507" rel="noopener noreferrer"&gt;#507&lt;/a&gt; (&lt;a href="https://github.com/SugatD" rel="noopener noreferrer"&gt;SugatD&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(MODULES-11838) Update link to Puppet modules contributing documentation &lt;a href="https://github.com/puppetlabs/puppetlabs-sqlserver/pull/504" rel="noopener noreferrer"&gt;#504&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(maint) Bump nightly ruby version to 3.2 &lt;a href="https://github.com/puppetlabs/puppetlabs-sqlserver/pull/513" rel="noopener noreferrer"&gt;#513&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(maint) Bump actions/checkout from v3 to v4 &lt;a href="https://github.com/puppetlabs/puppetlabs-sqlserver/pull/503" rel="noopener noreferrer"&gt;#503&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Release prep v5.1.1 &lt;a href="https://github.com/puppetlabs/puppetlabs-sqlserver/pull/502" rel="noopener noreferrer"&gt;#502&lt;/a&gt; (&lt;a href="https://github.com/github-actions" rel="noopener noreferrer"&gt;github-actions&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix #464 &lt;a href="https://github.com/puppetlabs/puppetlabs-sqlserver/pull/494" rel="noopener noreferrer"&gt;#494&lt;/a&gt; (&lt;a href="https://github.com/InsanesTheName" rel="noopener noreferrer"&gt;InsanesTheName&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  sslcertificate 6.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-02 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/sslcertificate" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11726) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-sslcertificate/pull/145" rel="noopener noreferrer"&gt;#145&lt;/a&gt; (&lt;a href="https://github.com/imaqsood" rel="noopener noreferrer"&gt;imaqsood&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  stdlib 10.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-07 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/stdlib" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11710) Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-stdlib/pull/1482" rel="noopener noreferrer"&gt;#1482&lt;/a&gt; (&lt;a href="https://github.com/skyamgarp" rel="noopener noreferrer"&gt;skyamgarp&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  terraform 0.8.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/terraform" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.8.0) while also adding Puppet Core 9 (Ruby 4) support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (1.0.0 -&amp;gt; 0.8.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-terraform/pull/46" rel="noopener noreferrer"&gt;#46&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193) terraform pdk update to Puppet Core 9 (Ruby 4) &lt;a href="https://github.com/puppetlabs/puppetlabs-terraform/pull/43" rel="noopener noreferrer"&gt;#43&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  tomcat 8.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-03 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/tomcat" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fix(MODULES-11727): Add Puppet Core 9 support in puppetlabs-tomcat &lt;a href="https://github.com/puppetlabs/puppetlabs-tomcat/pull/587" rel="noopener noreferrer"&gt;#587&lt;/a&gt; (&lt;a href="https://github.com/SugatD" rel="noopener noreferrer"&gt;SugatD&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  vault 0.5.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/vault" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.5.0) while also adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix metadata versionRevert version bump from major to minor (1.0.0 -&amp;gt; 0.5.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-vault/pull/24" rel="noopener noreferrer"&gt;#24&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193): vault pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-vault/pull/21" rel="noopener noreferrer"&gt;#21&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  vcsrepo 8.0.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-02 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/vcsrepo" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release dropped Puppet 7 support, added Puppet Core 9 support, and added support for Git sparse checkouts via Git includes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(CAT-2397) Puppet Core upgrade / Drop Support for Puppet 7 &lt;a href="https://github.com/puppetlabs/puppetlabs-vcsrepo/pull/654" rel="noopener noreferrer"&gt;#654&lt;/a&gt; (&lt;a href="https://github.com/LukasAud" rel="noopener noreferrer"&gt;LukasAud&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;MODULES-11711: Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-vcsrepo/pull/659" rel="noopener noreferrer"&gt;#659&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Enable Git Includes (Sparse Checkout) &lt;a href="https://github.com/puppetlabs/puppetlabs-vcsrepo/pull/637" rel="noopener noreferrer"&gt;#637&lt;/a&gt; (&lt;a href="https://github.com/jplindquist" rel="noopener noreferrer"&gt;jplindquist&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(CAT-2296) Update github runner image to ubuntu-24.04 &lt;a href="https://github.com/puppetlabs/puppetlabs-vcsrepo/pull/652" rel="noopener noreferrer"&gt;#652&lt;/a&gt; (&lt;a href="https://github.com/shubhamshinde360" rel="noopener noreferrer"&gt;shubhamshinde360&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Configure Mend for GitHub.com &lt;a href="https://github.com/puppetlabs/puppetlabs-vcsrepo/pull/649" rel="noopener noreferrer"&gt;#649&lt;/a&gt; (&lt;a href="https://github.com/mend-for-github-com" rel="noopener noreferrer"&gt;mend-for-github-com&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  windows_env 6.2.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-04 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/windows_env" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release focused on adding support for Puppet Core 9.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11728) Add support for Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-windows_env/pull/117" rel="noopener noreferrer"&gt;#117&lt;/a&gt; (&lt;a href="https://github.com/SugatD" rel="noopener noreferrer"&gt;SugatD&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  windows_eventlog 5.2.1
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-04 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/windows_eventlog" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release widened the &lt;code&gt;puppetlabs/registry&lt;/code&gt; dependency to allow 6.x and included some repo maintenance work.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11708) Widen puppetlabs/registry dependency to allow 6.x &lt;a href="https://github.com/puppetlabs/puppetlabs-windows_eventlog/pull/103" rel="noopener noreferrer"&gt;#103&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Configure Mend for GitHub.com &lt;a href="https://github.com/puppetlabs/puppetlabs-windows_eventlog/pull/92" rel="noopener noreferrer"&gt;#92&lt;/a&gt; (&lt;a href="https://github.com/mend-for-github-com" rel="noopener noreferrer"&gt;mend-for-github-com&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  wsus_client 6.4.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-09 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/wsus_client" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release added Puppet Core 9 support and widened the puppetlabs/registry dependency to allow 6.x.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MODULES-11737: Add Puppet Core 9 support &lt;a href="https://github.com/puppetlabs/puppetlabs-wsus_client/pull/240" rel="noopener noreferrer"&gt;#240&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(MODULES-11708) Widen puppetlabs/registry dependency to allow 6.x &lt;a href="https://github.com/puppetlabs/puppetlabs-wsus_client/pull/241" rel="noopener noreferrer"&gt;#241&lt;/a&gt; (&lt;a href="https://github.com/span786" rel="noopener noreferrer"&gt;span786&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  yaml 0.3.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-09-11 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/yaml" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release reverted the version bump from major to minor (1.0.0 -&amp;gt; 0.3.0) while also adding Puppet Core 9 support.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revert version bump from major to minor (1.0.0 -&amp;gt; 0.3.0) &lt;a href="https://github.com/puppetlabs/puppetlabs-yaml/pull/11" rel="noopener noreferrer"&gt;#11&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(BOLT-193): yaml pdk update to Puppet Core 9 &lt;a href="https://github.com/puppetlabs/puppetlabs-yaml/pull/8" rel="noopener noreferrer"&gt;#8&lt;/a&gt; (&lt;a href="https://github.com/gavindidrichsen" rel="noopener noreferrer"&gt;gavindidrichsen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Until Next Time!
&lt;/h2&gt;

&lt;p&gt;That wraps up the September 2026 roundup! If any of puppetdb, mysql intersect with your environment, the linked Forge pages and release notes are worth a closer look.&lt;/p&gt;

&lt;p&gt;Feedback on the series is always useful, especially if there are module families or release-note patterns that deserve more attention in future editions.&lt;/p&gt;

&lt;p&gt;More updates coming next month when the October 2026 releases land, after Hallowe'en.🎃 &lt;br&gt;
Have a great month!&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 AI Disclosure
&lt;/h2&gt;

&lt;p&gt;This roundup is produced by a mostly-automated pipeline, with some AI sprinkled in for orchestration and enrichment (or 'Combobulating' and 'Finagling'), followed by a human review (that would be me) before publishing.&lt;/p&gt;

&lt;p&gt;The automation is an &lt;a href="https://github.com/jst-cyr/puppetlabs-modules-roundup-writer" rel="noopener noreferrer"&gt;open-source project&lt;/a&gt; with deterministic python scripts to crawl the Forge and determine which &lt;code&gt;puppetlabs&lt;/code&gt; modules were released during a specific month (and catching when a module gets more than one release in a month). By combining a template, automation scripts, and some AI orchestration the content all gets pulled together for a structured markdown document. I then jump in to double-check the content and update any wording that seems repetitive or irrelevant (and sometimes I need to add some extra context that isn't in the changelog notes).&lt;/p&gt;

</description>
      <category>puppet</category>
    </item>
    <item>
      <title>Where to get your vendors' SOC 2 reports (AWS, Vercel, Supabase, GitHub, Stripe and 25 more)</title>
      <dc:creator>oded moshe</dc:creator>
      <pubDate>Wed, 30 Sep 2026 18:37:25 +0000</pubDate>
      <link>https://dev.to/__56bc6913b1c85e11/where-to-get-your-vendors-soc-2-reports-aws-vercel-supabase-github-stripe-and-25-more-4jg4</link>
      <guid>https://dev.to/__56bc6913b1c85e11/where-to-get-your-vendors-soc-2-reports-aws-vercel-supabase-github-stripe-and-25-more-4jg4</guid>
      <description>&lt;h2&gt;
  
  
  Your SOC 2 auditor will ask how you reviewed your vendors. Here is where 30 common startup vendors publish their SOC 2 report, who can download it, and what to check once you have it.
&lt;/h2&gt;

&lt;p&gt;If you are preparing for SOC 2, sooner or later your auditor asks how you reviewed the vendors that touch customer data. The usual evidence is each vendor's own SOC 2 report, plus a short record of what you checked in it.&lt;/p&gt;

&lt;p&gt;Getting the reports is fiddlier than it should be. Some live in a console, some behind a trust-center request form, and some only on certain plans. A few examples, each checked on the vendor's own pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS&lt;/strong&gt;: download from AWS Artifact in the console, at no charge; an NDA acceptance applies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Cloud / Google Workspace&lt;/strong&gt;: Compliance Reports Manager, after signing in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel&lt;/strong&gt;: request access through the Vercel Trust Center.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supabase&lt;/strong&gt;: Team and Enterprise plan customers download it from the organization dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: Enterprise Cloud owners, from the Compliance tab in enterprise settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare&lt;/strong&gt;: Super Administrators, from Compliance Documents in the dashboard, after a confidentiality statement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stripe&lt;/strong&gt;: provided on request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full table of 30 vendors (Azure, Microsoft 365, Okta, Auth0, Datadog, Sentry, PagerDuty, OpenAI, Anthropic, MongoDB Atlas, Snowflake, Notion, Linear, Slack, HubSpot, Zoom, 1Password, Heroku, Netlify and more) is here, with links to each trust page:&lt;br&gt;
&lt;a href="https://policyseed.vercel.app/guides/vendor-soc-2-reports" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://policyseed.vercel.app/guides/vendor-soc-2-reports" rel="noopener noreferrer"&gt;https://policyseed.vercel.app/guides/vendor-soc-2-reports&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Downloading the PDF is not the review
&lt;/h2&gt;

&lt;p&gt;Read these six parts and write down what you found:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Type and period.&lt;/strong&gt; A Type II covers a period of operation; a Type I is a single date. If the period ended long ago, ask for the newer report or a bridge letter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope.&lt;/strong&gt; Make sure the system description covers the product you actually use. Big vendors publish several reports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The auditor's opinion.&lt;/strong&gt; Unqualified is the expected result. A qualified opinion means a material problem: read which criterion and why.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exceptions in the test results.&lt;/strong&gt; A clean opinion can still come with individual deviations. Decide whether any affect how you use the vendor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complementary user entity controls.&lt;/strong&gt; What the vendor expects &lt;em&gt;you&lt;/em&gt; to do: enable MFA, manage your own users, configure encryption. Those become your controls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subservice organizations.&lt;/strong&gt; The vendor's own vendors (often a cloud provider), usually carved out. Note them as fourth parties.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Record the date, the report period, the reviewer, any exceptions and your decision. That record, not the PDF, is what the auditor samples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep it proportionate
&lt;/h2&gt;

&lt;p&gt;A small company can easily use dozens of SaaS tools, and not all of them need a SOC 2 review. Tier vendors by the data they touch: the ones that store or process customer data get a full review with the report; tools with no customer data get a short documented check. Auditors look for a consistent rule applied to the whole inventory.&lt;/p&gt;

&lt;p&gt;If you need the policy that sets those tiers and the review cadence, there is a free, editable Vendor and Third-Party Risk Management Policy template (Word or Markdown, no signup) at &lt;a href="https://policyseed.vercel.app/policies/vendor-and-third-party-risk-policy" rel="noopener noreferrer"&gt;https://policyseed.vercel.app/policies/vendor-and-third-party-risk-policy&lt;/a&gt;. It is part of an open-source (Apache-2.0) set of 22 SOC 2 policies; I built it.&lt;/p&gt;

</description>
      <category>security</category>
      <category>startup</category>
      <category>devops</category>
      <category>puppet</category>
    </item>
    <item>
      <title>Cybersecurity Compliance for Developers: What "Audit-Ready" Really Means</title>
      <dc:creator>Diginatives LLC</dc:creator>
      <pubDate>Mon, 28 Sep 2026 12:27:38 +0000</pubDate>
      <link>https://dev.to/diginatives-llc/cybersecurity-compliance-for-developers-what-audit-ready-really-means-c29</link>
      <guid>https://dev.to/diginatives-llc/cybersecurity-compliance-for-developers-what-audit-ready-really-means-c29</guid>
      <description>&lt;p&gt;If you're a developer, the word "compliance" probably makes your shoulders tense. It sounds like paperwork, meetings, and someone asking you to screenshot a settings page at 5 p.m. on a Friday.&lt;/p&gt;

&lt;p&gt;Fair. But here's the thing: cybersecurity compliance touches your code, your pipelines, and your access controls far more than it touches a spreadsheet. So it's worth understanding, especially when a customer asks, "Do you have a SOC 2 report?" and your manager turns to look at you.&lt;/p&gt;

&lt;p&gt;Let's break it down without the fluff.&lt;/p&gt;

&lt;h2&gt;
  
  
  What compliance actually is
&lt;/h2&gt;

&lt;p&gt;Compliance means proving, with evidence, that you follow a defined set of security practices. Note the word &lt;em&gt;proving&lt;/em&gt;. Doing the right thing isn't enough; you need to show it.&lt;/p&gt;

&lt;p&gt;Common frameworks you'll hear about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SOC 2&lt;/strong&gt;: common for SaaS companies; checks controls around security, availability, confidentiality, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ISO 27001&lt;/strong&gt;: an international standard for running an information security management system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PCI DSS&lt;/strong&gt;: required when you handle card payments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HIPAA&lt;/strong&gt;: for healthcare data in the US&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GDPR&lt;/strong&gt;: personal data protection for people in the EU&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which one you need usually depends on your customers and your industry, not on your preference.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what does "audit-ready" mean?
&lt;/h2&gt;

&lt;p&gt;Being audit-ready means that if an auditor walked in tomorrow, you could show them what you do and prove you've been doing it consistently.&lt;/p&gt;

&lt;p&gt;In practice, that boils down to a few habits:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Written policies that people actually follow.&lt;/strong&gt; A policy nobody reads is decoration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access control.&lt;/strong&gt; Who can reach production? Is it reviewed regularly? Do departed employees lose access the same day?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change management.&lt;/strong&gt; Pull requests, reviews, and approvals leave a trail. Auditors love trails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logging and monitoring.&lt;/strong&gt; You can detect and investigate suspicious activity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk assessments.&lt;/strong&gt; You've identified what could go wrong and decided what to do about it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vendor management.&lt;/strong&gt; You know which third parties touch your data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Notice something? A lot of this is already sitting in Git, your cloud console, and your ticket tracker. The trick is collecting it neatly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The developer-side checklist
&lt;/h2&gt;

&lt;p&gt;Here's what tends to land on an engineering team's plate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enforce multi-factor authentication everywhere&lt;/li&gt;
&lt;li&gt;Require code review before merging to main&lt;/li&gt;
&lt;li&gt;Keep secrets out of repositories (use a vault or environment-based secrets manager)&lt;/li&gt;
&lt;li&gt;Patch dependencies and track known vulnerabilities&lt;/li&gt;
&lt;li&gt;Encrypt data in transit and at rest&lt;/li&gt;
&lt;li&gt;Back up critical data and test restoring it&lt;/li&gt;
&lt;li&gt;Keep infrastructure defined as code so changes are traceable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is exotic. Most teams do half of it already, just informally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence is the boring, important part
&lt;/h2&gt;

&lt;p&gt;Auditors don't take your word for it. They want samples: a list of employees with production access, a few merged pull requests with approvals, an example of a resolved security incident.&lt;/p&gt;

&lt;p&gt;If you gather this once a year in a panic, it hurts. If you collect it continuously, say a monthly export of access reviews and a saved report from your vulnerability scanner, audit season becomes a non-event.&lt;/p&gt;

&lt;p&gt;Small tip: name and date your files clearly. "access-review-2026-09.pdf" beats "final_v3_new.pdf" every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Type I vs Type II, quickly
&lt;/h2&gt;

&lt;p&gt;For SOC 2, a Type I report says your controls were designed properly at one moment in time. A Type II report says they actually worked over a period, often several months. Customers usually trust Type II more, but Type I is a reasonable first step for young companies.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to bring in outside help
&lt;/h2&gt;

&lt;p&gt;Not every team has a security specialist. That's normal. Many companies hire external experts to run gap assessments, write policies, and guide them through the audit. If you're weighing that route, reading about &lt;a href="https://diginatives.io/blog/top-cybersecurity-compliance-firms-that-help-you-stay-audit-ready" rel="noopener noreferrer"&gt;cybersecurity compliance firms&lt;/a&gt; can help you understand what these partners typically offer before you start comparing them.&lt;/p&gt;

&lt;p&gt;Others prefer to add temporary security engineers to their own team through &lt;a href="https://diginatives.io/blog/staff-augmentation-vs-outsourcing" rel="noopener noreferrer"&gt;staff augmentation&lt;/a&gt;, which keeps day-to-day control in-house while filling the skills gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistakes I see teams make
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treating compliance as a one-time project instead of an ongoing habit&lt;/li&gt;
&lt;li&gt;Buying tools before understanding the requirements&lt;/li&gt;
&lt;li&gt;Writing policies that describe how they &lt;em&gt;wish&lt;/em&gt; things worked&lt;/li&gt;
&lt;li&gt;Leaving engineers out of the conversation until the last minute&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is the big one. Bring developers in early and the controls fit your workflow. Bring them in late and everyone's annoyed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Compliance won't make you unhackable, and it isn't magic. What it does is force you to build consistent, documented, reviewable security habits, and that's valuable whether or not a customer demands a certificate.&lt;/p&gt;

&lt;p&gt;Start small: pick one framework, list your current controls, and find the gaps. You'll likely be closer than you think.&lt;/p&gt;

&lt;p&gt;What's been the most annoying part of compliance on your team? Drop it in the comments.&lt;/p&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>puppet</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Nigerian Fintech Architecture — Six Functions CBN Will Ask About in the Sandbox Application</title>
      <dc:creator>zikarelhub</dc:creator>
      <pubDate>Mon, 28 Sep 2026 08:26:23 +0000</pubDate>
      <link>https://dev.to/zikarelhub/nigerian-fintech-architecture-six-functions-cbn-will-ask-about-in-the-sandbox-application-hj3</link>
      <guid>https://dev.to/zikarelhub/nigerian-fintech-architecture-six-functions-cbn-will-ask-about-in-the-sandbox-application-hj3</guid>
      <description>&lt;p&gt;There is one architectural diagnostic that separates CBN Sandbox-ready Nigerian fintech from products that appear ready but have critical gaps.&lt;/p&gt;

&lt;p&gt;Can you name — precisely, with regulatory status — who performs each of these six functions in your product?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Six Functions
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;architectureDiagnostic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;kyc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Named provider + regulatory status + KYC tier satisfied&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;sanctionsScreening&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Automated + onboarding AND ongoing + users AND counterparties&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;fxConversion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Named licensed entity — "Paystack" is NOT an FX licence&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;custody&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;            &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Legally segregated — company bank account is NOT segregated custody&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;settlement&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;         &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;T+1 or T+2 — NOT the same as authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;payout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;             &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Named executor + SLA + failed payout handling + reconciliation&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;h2&gt;
  
  
  The Most Common Gaps
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;commonGaps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;"We use Paystack" as the FX answer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;reality&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Paystack is a CBN-licensed PSP. Not an FX licence holder.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;fix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Named AFEX-licensed BDC, CBN-licensed IMTO or licensed fintech with FX permissions&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="na"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User funds in company bank account&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;reality&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;This is fund commingling — not segregated custody&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;fix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Trust/escrow account at licensed bank — separate from operational account&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="na"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Wallet credited on Paystack success&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;reality&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;That is authorization. Settlement is T+1 or T+2.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;fix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Credit wallet only on confirmed settlement — not on charge.success webhook&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="na"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sanctions screening at onboarding only&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;reality&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Users must be screened on an ongoing basis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;fix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Nightly screening job against UN, OFAC, NFIU, PEP lists&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;
  
  
  KYC — Named Provider Required
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Not "some verification service" — a named provider with named status&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;kycSetup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;bvnVerification&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;NIBSS (Nigerian Inter-Bank Settlement System)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;idVerification&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Smile Identity / Youverify / Prembly&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;livenessDetection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;95%+ confidence required — defeats static photo attacks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;sanctionsAndPEP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Included in most Nigerian KYC providers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="c1"&gt;// VASP track additional&lt;/span&gt;
  &lt;span class="na"&gt;blockchainAnalytics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Chainalysis / Elliptic / TRM Labs — ALL incoming deposits&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;h2&gt;
  
  
  Settlement State Machine — Required
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Authorization ≠ Settlement — model this explicitly&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;STATES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;INITIATED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;created — no money moved&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;AUTHORIZED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bank approved — NOT settled, NOT available&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;SETTLED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;in Paystack balance — T+1 or T+2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;AVAILABLE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;credited to user wallet — ready for use&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Available balance: only settled credits minus pending debits&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;availableBalance&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;ledger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`
  SELECT SUM(CASE
    WHEN entry_type = 'CREDIT' AND settlement_status = 'SETTLED' THEN amount
    WHEN entry_type = 'DEBIT' AND settlement_status IN ('PENDING','SETTLED') THEN -amount
    ELSE 0
  END) AS available
  FROM ledger_entries WHERE account_id = $userId
`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Corridor Map
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Required CBN Sandbox document&lt;/span&gt;
&lt;span class="c1"&gt;// Every entity, their regulatory status, data flows, fund flows, failure scenarios&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;corridorMap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;entities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Your Platform&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="s1"&gt;CBN Sandbox Applicant&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="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;NIBSS&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="s1"&gt;CBN-regulated infrastructure&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="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Smile Identity&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="s1"&gt;Licensed KYC provider&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="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Paystack&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="s1"&gt;CBN-licensed PSP&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="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Partner Bank&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="s1"&gt;CBN-licensed commercial bank&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="na"&gt;fundFlow&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="s1"&gt;User → Paystack (AUTHORIZED)&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;Paystack escrow → Paystack balance (SETTLED T+1)&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;Paystack → Trust account at Partner Bank (AVAILABLE)&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;Trust account → User wallet ledger (CREDITED)&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;User wallet → Recipient via NIP (PAID OUT)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;failureScenarios&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="s1"&gt;Paystack settlement delayed — do not credit user wallet&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;KYC provider down — queue and retry, do not onboard&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;Sanctions match on existing user — suspend account, escalate&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;p&gt;ZikarelHub LTD is Nigeria's #1 software and digital agency — Nigerian fintech built with the architectural clarity CBN examination requires.&lt;/p&gt;

&lt;p&gt;Which of the six functions does your product have the least clarity on right now? 👇&lt;/p&gt;

</description>
      <category>nigeria</category>
      <category>fintech</category>
      <category>puppet</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Building a Living Case Database: Schema, Human-in-the-Loop AI, and the Math That Kills Most Niche Sites</title>
      <dc:creator>Hossam Saif</dc:creator>
      <pubDate>Thu, 24 Sep 2026 22:31:31 +0000</pubDate>
      <link>https://dev.to/hossam_saif_a73bc1dde9ff9/building-a-living-case-database-schema-human-in-the-loop-ai-and-the-math-that-kills-most-niche-4k5j</link>
      <guid>https://dev.to/hossam_saif_a73bc1dde9ff9/building-a-living-case-database-schema-human-in-the-loop-ai-and-the-math-that-kills-most-niche-4k5j</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnjwsek6b3gksz3i36t1x.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnjwsek6b3gksz3i36t1x.webp" alt=" " width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most "build a niche site" posts stop at the content strategy.&lt;br&gt;&lt;br&gt;
This one starts where those posts usually end: the operating model.&lt;/p&gt;

&lt;p&gt;I spent time reverse-engineering what it actually takes to run a site that publishes &lt;em&gt;living case files&lt;/em&gt; instead of one-and-done articles. The full blueprint (architecture, data model, nine-prompt production pipeline, privacy gates, economics, and monetization) is here:&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://www.moneytraces.com/2026/09/how-to-build-true-crime-case-tracking.html" rel="noopener noreferrer"&gt;How to Build a True-Crime Case-Tracking Website From Scratch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What follows is the part I think is most useful for builders: the data and process decisions that determine whether the site survives past the first six months.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. The core unit is not an article — it's a row
&lt;/h3&gt;

&lt;p&gt;Every case is a structured record &lt;em&gt;before&lt;/em&gt; it becomes a page. The schema is deliberately over-normalized from day one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;defendants&lt;/code&gt;, &lt;code&gt;victims&lt;/code&gt;, &lt;code&gt;attorneys&lt;/code&gt;, &lt;code&gt;judge&lt;/code&gt; are foreign keys (or arrays of FKs), not free-text fields.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;charges&lt;/code&gt; is its own table with per-charge legal status.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;hearings&lt;/code&gt; is an append-only log (newest first).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;last_verified&lt;/code&gt; is a first-class field that drives the stale-case metric.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why? Converting flat text into linked entities later is one of the most painful refactors you can do on a live site. Plan for the graph even if the MVP UI still renders everything as plain text.&lt;/p&gt;

&lt;p&gt;The page template is just a view over that schema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Case Name / Docket
├── Status + Last Updated
├── Summary (2–3 sentences, rewritten as the case evolves)
├── Timeline (dated, newest first)
├── The Money / Harm
├── Key Documents
├── Related Cases
└── Update Log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. The production system is nine prompts + one human gate
&lt;/h3&gt;

&lt;p&gt;This is not an autonomous AI newsroom. It's a research and drafting pipeline with mandatory human sign-off on every legal-status claim, every newly named person, and every publication decision.&lt;/p&gt;

&lt;p&gt;High-level flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Signal Hunter&lt;/strong&gt; – monitors new filings, hearings, sealed-to-unsealed changes
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qualification&lt;/strong&gt; – hard PASS/FAIL gates (primary source exists? trackable docket? privacy risk?)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source Hunter + Claim Ledger&lt;/strong&gt; – builds a citation table with claim ID, source, page/para, legal status, confidence
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analysis&lt;/strong&gt; – patterns only if the ledger supports them; alternative explanations required
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entity Map&lt;/strong&gt; – what lives on the permanent case page vs. what becomes a standalone explainer
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Case File Builder&lt;/strong&gt; – every factual sentence must cite a claim ID
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accuracy + Privacy Gate&lt;/strong&gt; – the single most important step
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update Check&lt;/strong&gt; – for already-tracked cases
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distribution&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The privacy/accuracy gate is non-negotiable. Any open flag (minor identification, sealed records, presumption of guilt, secondary-only sources treated as fact) blocks publication.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The real constraint is operating capacity, not content ideas
&lt;/h3&gt;

&lt;p&gt;Homicide Watch D.C. peaked at ~500k pageviews/month and still closed. The cost of keeping every active case current was effectively one full-time reporter. When the founders moved and couldn't find a local partner willing to fund that role, the site shut down.&lt;/p&gt;

&lt;p&gt;That is the actual problem this architecture tries to solve.&lt;/p&gt;

&lt;p&gt;Define these metrics &lt;em&gt;before&lt;/em&gt; you publish the first case file:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;th&gt;Warning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Active cases per editor&lt;/td&gt;
&lt;td&gt;15–25&lt;/td&gt;
&lt;td&gt;&amp;gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-activity cadence&lt;/td&gt;
&lt;td&gt;Daily&lt;/td&gt;
&lt;td&gt;&amp;gt;48h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dormant cadence&lt;/td&gt;
&lt;td&gt;Weekly&lt;/td&gt;
&lt;td&gt;&amp;gt;14 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stale-case rate&lt;/td&gt;
&lt;td&gt;&amp;lt;5%&lt;/td&gt;
&lt;td&gt;&amp;gt;10%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Correction rate&lt;/td&gt;
&lt;td&gt;&amp;lt;2 / 100&lt;/td&gt;
&lt;td&gt;&amp;gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Site health formula:&lt;br&gt;&lt;br&gt;
&lt;code&gt;stale-case rate &amp;lt; 5% AND correction rate &amp;lt; 2&lt;/code&gt; → the site is delivering what it promised.&lt;br&gt;&lt;br&gt;
&lt;code&gt;stale-case rate &amp;gt; 10%&lt;/code&gt; → it has operationally collapsed, even if traffic looks great.&lt;/p&gt;

&lt;p&gt;Size the number of active cases to what one person can actually sustain, not to what would be editorially interesting.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Why this is interesting for builders
&lt;/h3&gt;

&lt;p&gt;Most AI content systems optimize for volume. This one optimizes for &lt;em&gt;trust under continuous update pressure&lt;/em&gt;. The claim ledger, the hard privacy gate, and the explicit automation boundary (what AI can draft vs. what a human must sign) are the parts that make the difference between a site that can keep running and one that quietly dies when the founder gets busy.&lt;/p&gt;

&lt;p&gt;If you're building anything that needs to stay accurate over time (case tracking, regulatory monitoring, product changelogs, research databases), the same pattern applies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Structured schema first
&lt;/li&gt;
&lt;li&gt;Provenance on every claim
&lt;/li&gt;
&lt;li&gt;Explicit human gates on the high-risk decisions
&lt;/li&gt;
&lt;li&gt;Metrics that tell you when the operation is failing, not just when traffic is up&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Full write-up with the complete prompt set, site map, monetization layers, and real-world examples (Homicide Watch, DC Witness, CourtWatch, etc.) is here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.moneytraces.com/2026/09/how-to-build-true-crime-case-tracking.html" rel="noopener noreferrer"&gt;https://www.moneytraces.com/2026/09/how-to-build-true-crime-case-tracking.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious what others have found when trying to keep structured "living" data products accurate at low headcount. The operating numbers are the part most architecture posts skip.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>ai</category>
      <category>puppet</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Puppet Core 9.1 and 8.22 adds Debian 12 ARM V7L support</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Tue, 22 Sep 2026 12:58:58 +0000</pubDate>
      <link>https://dev.to/puppet/puppet-core-91-and-822-adds-debian-12-arm-v7l-support-478g</link>
      <guid>https://dev.to/puppet/puppet-core-91-and-822-adds-debian-12-arm-v7l-support-478g</guid>
      <description>&lt;p&gt;The latest releases of Puppet Core 9 and Puppet Core 8 are now available! Both releases contain the same types of changes, with minor differences in versions of components that were updated. The new Debian 12 ARM V7L is the only new addition this release while the focus of the changes are on security updates and a pair of compatibility fixes that address issues some users may have encountered in production environments.&lt;/p&gt;

&lt;p&gt;If you're currently running Puppet Core 8.x or 9.x, this is a straightforward update worth planning for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed in Puppet Core 9.1.0 and Puppet Core 8.22.0
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New agent platform:&lt;/strong&gt; Debian 12 ARM V7L added as a supported agent platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security updates:&lt;/strong&gt; Several bundled components received updates to address recently disclosed vulnerabilities: OpenSSL, curl, libxml2, RubyGems, Ruby's &lt;code&gt;resolv&lt;/code&gt; gem.&lt;/li&gt;
&lt;li&gt;Compatibility fix for &lt;code&gt;hiera-eyaml&lt;/code&gt; and Bouncy Castle&lt;/li&gt;
&lt;li&gt;JSON dependency constraints updated to &lt;code&gt;&amp;gt;=2.0, &amp;lt;4&lt;/code&gt; to prevent compatibility issues with latest JSON releases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together these updates address more than a dozen published CVEs. If you track vulnerabilities internally, review the release notes for the complete CVE listing associated with your Puppet version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes for Puppet 8 vs Puppet 9 Users
&lt;/h2&gt;

&lt;p&gt;The customer-facing changes are effectively the same in both releases. There are a couple of implementation differences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Puppet Core 8.22.0 updates OpenSSL 3.0.x, whereas 9.1.0 updates to OpenSSL 3.5.x&lt;/li&gt;
&lt;li&gt;Puppet Core 8.22.0 ships hiera-eyaml 4.3.0, whereas Puppet Core 9.1.0 ships hiera-eyaml 5.0.1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fixes and outcomes delivered by these updates are equivalent across both release tracks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full Release Notes
&lt;/h2&gt;

&lt;p&gt;Before upgrading, make sure to review the release notes for your release track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://help.puppet.com/core/8/Content/PuppetCore/PuppetReleaseNotes/release_notes_puppet_x-8-22-0.htm" rel="noopener noreferrer"&gt;Puppet Core 8.22.0 Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.puppet.com/core/current/Content/PuppetCore/PuppetReleaseNotes/release_notes_puppet_x-9-1-0.htm" rel="noopener noreferrer"&gt;Puppet Core 9.1.0 Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This update is a small one operationally but an important one from a security and maintenance perspective. Make sure to drop any questions you have about the release either here or in the &lt;a href="https://slack.puppet.com" rel="noopener noreferrer"&gt;Puppet community slack&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>devops</category>
      <category>infrastructureascode</category>
      <category>debian</category>
    </item>
    <item>
      <title>A New Beginning This Festive Season: The Aishwaryam Vision for Modern Homeownership</title>
      <dc:creator>Sathish Sundaram</dc:creator>
      <pubDate>Tue, 22 Sep 2026 07:34:06 +0000</pubDate>
      <link>https://dev.to/sathish_sundaram_a32fbfc5/a-new-beginning-this-festive-season-the-aishwaryam-vision-for-modern-homeownership-1ill</link>
      <guid>https://dev.to/sathish_sundaram_a32fbfc5/a-new-beginning-this-festive-season-the-aishwaryam-vision-for-modern-homeownership-1ill</guid>
      <description>&lt;p&gt;The festive season often brings a renewed focus on new beginnings. For many people, that can mean starting a new chapter in their personal lives, reassessing financial goals, or finally exploring the possibility of owning a home.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://www.aishwaryam.com/blog/aishwaryam-vision-festive-season-homeownership/" rel="noopener noreferrer"&gt;https://www.aishwaryam.com/blog/aishwaryam-vision-festive-season-homeownership/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But modern homeownership is changing. Buyers are increasingly looking beyond the traditional idea of purchasing a house. Location, connectivity, amenities, construction quality, community, convenience and long-term lifestyle requirements are becoming important parts of the decision-making process.&lt;/p&gt;

&lt;p&gt;This shift creates an opportunity to rethink what a new home should represent.&lt;/p&gt;

&lt;p&gt;The Changing Meaning of Homeownership&lt;/p&gt;

&lt;p&gt;A home is no longer evaluated only by its size or number of rooms. Today's buyers often consider how the property fits into their daily routine.&lt;/p&gt;

&lt;p&gt;How long is the commute? Are essential services accessible? Does the neighbourhood support the family's lifestyle? Are the amenities genuinely useful? What will the ownership experience look like several years from now?&lt;/p&gt;

&lt;p&gt;These questions are influencing how people research residential properties.&lt;/p&gt;

&lt;p&gt;The result is a more informed approach to homeownership, where buyers compare the overall living experience rather than focusing exclusively on the property itself.&lt;/p&gt;

&lt;p&gt;Why the Festive Season Can Be a Time for New Beginnings&lt;/p&gt;

&lt;p&gt;The festive season traditionally represents renewal and fresh starts. From a homebuyer's perspective, it can also be a natural point to review long-term plans.&lt;/p&gt;

&lt;p&gt;However, a festive season property investment should still be approached with the same level of due diligence as a property purchase at any other time.&lt;/p&gt;

&lt;p&gt;Festive offers or limited-period incentives should not replace fundamental checks such as:&lt;/p&gt;

&lt;p&gt;Project approvals and documentation&lt;br&gt;
Location and connectivity&lt;br&gt;
Construction quality&lt;br&gt;
Developer track record&lt;br&gt;
Total purchase and ownership costs&lt;br&gt;
Possession timelines&lt;br&gt;
Amenities and maintenance considerations&lt;br&gt;
Suitability for the buyer's long-term needs&lt;/p&gt;

&lt;p&gt;The occasion may create the motivation to explore a home, but research should guide the final decision.&lt;/p&gt;

&lt;p&gt;What Does Modern Homeownership Look Like?&lt;/p&gt;

&lt;p&gt;Modern homeownership increasingly revolves around convenience and adaptability.&lt;/p&gt;

&lt;p&gt;A well-planned residential environment can bring together homes, amenities, open spaces and community-oriented features designed around everyday living.&lt;/p&gt;

&lt;p&gt;For families considering a new home this festive season, the decision can therefore begin with a broader question:&lt;/p&gt;

&lt;p&gt;What kind of everyday life do we want our home to support?&lt;/p&gt;

&lt;p&gt;The answer can help narrow down choices based on location, configuration, amenities and budget.&lt;/p&gt;

&lt;p&gt;The Aishwaryam Vision&lt;/p&gt;

&lt;p&gt;The Aishwaryam vision focuses on creating residential environments that go beyond the basic definition of a house.&lt;/p&gt;

&lt;p&gt;The approach places emphasis on contemporary living, thoughtful planning, quality and the relationship between homes and their surrounding environment.&lt;/p&gt;

&lt;p&gt;For a real-estate developer, this means looking at homeownership from the resident's perspective—not simply as a transaction, but as part of a person's longer-term lifestyle.&lt;/p&gt;

&lt;p&gt;That perspective is particularly relevant as homebuyers become more research-oriented and compare projects across multiple dimensions before making a purchase.&lt;/p&gt;

&lt;p&gt;Technology Is Also Changing the Homebuying Journey&lt;/p&gt;

&lt;p&gt;The way people discover and evaluate properties has changed significantly.&lt;/p&gt;

&lt;p&gt;Buyers can now research projects online, compare locations, examine project information, watch walkthroughs, read reviews and investigate developers before scheduling a site visit.&lt;/p&gt;

&lt;p&gt;Search engines, social platforms and AI-powered discovery tools are also becoming part of the research journey.&lt;/p&gt;

&lt;p&gt;This makes transparency and accessible information increasingly important for real-estate brands.&lt;/p&gt;

&lt;p&gt;A modern homeownership vision therefore extends beyond the physical project. It also includes how clearly a developer communicates information throughout the buyer journey.&lt;/p&gt;

&lt;p&gt;A More Informed Festive-Season Decision&lt;/p&gt;

&lt;p&gt;Buying a home is a significant financial and lifestyle decision. Festive campaigns can encourage people to begin their search, but the decision itself should be based on factors that remain relevant after the celebrations are over.&lt;/p&gt;

&lt;p&gt;For buyers considering a new home this festive season, the process can begin with a simple checklist:&lt;/p&gt;

&lt;p&gt;Define your needs → Research locations → Compare projects → Verify documentation → Evaluate costs → Visit shortlisted properties → Make an informed decision&lt;/p&gt;

&lt;p&gt;A New Beginning, Thoughtfully Planned&lt;/p&gt;

&lt;p&gt;The idea of a new beginning has always been closely connected with the festive season. In the context of homeownership, it can represent more than moving into a new address.&lt;/p&gt;

&lt;p&gt;It can mean creating a space that supports family life, work, relationships, convenience and future aspirations.&lt;/p&gt;

&lt;p&gt;As expectations around residential living continue to evolve, the future of homeownership will likely be shaped by a combination of thoughtful design, accessible information, technology and a deeper understanding of how people actually live.&lt;/p&gt;

&lt;p&gt;For Aishwaryam, that is the larger idea behind its vision for modern homeownership: creating spaces where a new address can become the foundation for a new chapter.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk90s68jizw40oz90nrpy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk90s68jizw40oz90nrpy.jpg" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>realestate</category>
      <category>puppet</category>
    </item>
    <item>
      <title>CBN Regulatory Sandbox Cohort 2 — Technical Guide for Nigerian Fintech Builders</title>
      <dc:creator>zikarelhub</dc:creator>
      <pubDate>Mon, 21 Sep 2026 11:10:27 +0000</pubDate>
      <link>https://dev.to/zikarelhub/cbn-regulatory-sandbox-cohort-2-technical-guide-for-nigerian-fintech-builders-59fa</link>
      <guid>https://dev.to/zikarelhub/cbn-regulatory-sandbox-cohort-2-technical-guide-for-nigerian-fintech-builders-59fa</guid>
      <description>&lt;p&gt;The CBN has opened Regulatory Sandbox Cohort 2 to unlicensed Nigerian fintech startups for the first time. Here is the technical breakdown of what this means for Nigerian builders.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Sandbox Is and Is Not
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sandbox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;IS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Supervised testing with real users under CBN oversight&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;isNOT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A commercial licence or permission to scale&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;6-12 months&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;outcome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CBN readiness assessment for full licence application&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;cohort2Change&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Unlicensed startups with working MVPs now eligible&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;h2&gt;
  
  
  The Two Tracks
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tracks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;VASP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;for&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="s1"&gt;Stablecoin settlement&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;Crypto on/off-ramps&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;Crypto wallets&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;Digital asset payments&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;cbnChecks&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="s1"&gt;AML/CFT for virtual assets&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;Blockchain analytics&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;Travel Rule&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;Cold storage custody&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;additionalRegulator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SEC Nigeria — digital asset classification&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="na"&gt;NON_VASP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;for&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="s1"&gt;Open banking&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;Payment initiation&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;Fraud detection&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;Financial inclusion&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;RegTech&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;cbnChecks&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="s1"&gt;NDPA compliance&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;API security&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;Fraud controls&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;Complaints handling&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="na"&gt;confirmWithCBN&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="s1"&gt;Plain fiat remittance — not explicitly listed in either track&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;
  
  
  Eligibility Check
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;checkEligibility&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;startup&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;disqualifiers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;startup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasWorkingMVP&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;No MVP — concept stage not eligible&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;startup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasOutstandingRegulatoryAction&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Outstanding sanctions&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;startup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasInnovationBeyondExisting&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;No meaningful innovation&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;missingCompliance&lt;/span&gt; &lt;span class="o"&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;amlPolicy&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;sanctionsScreening&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;cdd&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;consumerProtection&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;cybersecurity&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;incidentResponse&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;dataProtection&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;namedComplianceOfficer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;startup&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;eligible&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;disqualifiers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;disqualifiers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;complianceGaps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;missingCompliance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;readinessScore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;missingCompliance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
    &lt;span class="p"&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;
  
  
  Don't Force a Track Fit
&lt;/h2&gt;

&lt;p&gt;The most important advice for Nigerian fintech builders evaluating Cohort 2:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not add digital asset features just to qualify for the VASP track.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;VASP adds: SEC Nigeria jurisdiction, blockchain analytics costs, Travel Rule infrastructure, custody architecture requirements and significant technical complexity. If your product is genuinely payments or open banking — the Non-VASP track is correct. The compliance overhead difference is substantial.&lt;/p&gt;

&lt;p&gt;Tomorrow: The full readiness checklist — what CBN wants to see before you apply.&lt;/p&gt;




&lt;p&gt;ZikarelHub LTD is Nigeria's #1 software and digital agency — CBN-ready fintech platforms built with compliance from the foundation.&lt;/p&gt;

&lt;p&gt;Are you considering CBN Sandbox Cohort 2? Which track fits your product? 👇&lt;/p&gt;

</description>
      <category>nigeria</category>
      <category>fintech</category>
      <category>puppet</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
