Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-27 12:29 UTC

cgerling / terraform-provider-unifi

Terraform provider for managing Ubiquiti's UniFi network controller

GoMPL-2.0★ 0 Sterne⑂ 0 Forksseit Juni 2026ForkAuf GitHub ansehen ↗

cgerling/terraform-provider-unifi erreicht einen Gesundheitsindex von 46 von 100 und liegt damit im Bereich Gefährdet. Am stärksten schneidet es bei AI Readiness (86/100) ab, am schwächsten bei Community & Adoption (12/100). Zuletzt vor 7 Tagen aktualisiert. 2 Mitwirkende tragen den Großteil der jüngsten Arbeit.

46
gesamt / 100
Gefährdet

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

46
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Calvin GerlingPersönliches Konto
52 Follower21 öffentliche Reposseit Juli 2015@cliniahealth

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
Gogithub.com/filipowm/terraform-provider-unifiverweist auf ein anderes Repo — nicht bewertetv1.1.0-3vor 24 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

63Mittel · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 7 Tagen
4.8/36Commit-Rhythmus — 7/52 Wochen mit Commits
16/18Commit-Volumen — 59 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year59
human_commit_share0,85
days_since_last_push7
active_weeks_last_year7
Wie die Bewertung erfolgt
16.2/27Liefert Releases aus — 3 Versions-Tags (keine GitHub-Releases)
36/36Release-Aktualität — letztes Release vor 24 Tagen
12.6/27Release-Rhythmus — ein Release etwa alle 247 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count3
latest_release_tagv1.1.0
releases_from_tagsja
days_since_latest_release24
mean_days_between_releases247
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

12Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 0 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
0/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MPL-2.0)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmenein
has_licensenein
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

40Gefährdet · 24 % des Gesamtindex
Wie die Bewertung erfolgt
25.2/54Bus-Faktor — 2 Beitragende decken die Hälfte aller Commits ab
11.8/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 48 % der Commits
13.5/13.5Breite der Beitragenden — 33 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 8 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor2
contributors_sampled33
top_contributor_share0,476
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
0/38.3PR-Annahme — keine entschiedenen Pull Requests oder keine Daten
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote, PR-Annahme. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
12.4/25Reichweite des Inhabers — 52 Follower von cgerling
21.8/25Kontohistorie — 21 öffentliche Repos, Kontoalter ca. 11 Jahre
Verwendete Eingangsdaten
followers52
owner_typeUser
is_verified
owner_logincgerling
public_repos21
account_age_days4.043
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

69Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 4 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .golangci.yaml
0/9.6Pre-Commit-Hooks
6.4/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfigja
has_linter_configja
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.

Dokumentation

40Gefährdet
Wie die Bewertung erfolgt
0/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://registry.terraform.io/providers/filipowm/unifi/latest/docs
0/10Repository-Beschreibung
0/10Topics
0/10Wiki
Verwendete Eingangsdaten
topics
has_wikinein
homepagehttps://registry.terraform.io/providers/filipowm/unifi/latest/docs
has_readmenein
has_docs_dirja
has_descriptionnein

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

39Gefährdet · 16 % des Gesamtindex

Sicherheitslage

39Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — keine Daten
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 8 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — keine Daten
5/5Pinned-Dependencies — all dependencies are pinned
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 11 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate3,9
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

86Exzellent · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 83 von 85 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,976
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes3.594
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .golangci.yaml
11/11Statische Typprüfung — Go (statisch typisiert)
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
10/10Belegte Agentenpraxis — 36 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 15 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
10/10OpenSSF Scorecard: Pinned-Dependencies — all dependencies are pinned
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesgo.sum
has_dockerfileja
typed_languageja
bootstrap_filesMakefile
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0,36
toolchain_manifestsgo.mod
dependency_bot_commit_share0,15
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
54.4/55Handhabbare Dateigrößen — 2/182 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes69.885
source_files_sampled182
oversized_source_files2
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

0GitHub-Sterne
33Mitwirkende
59Commits, letzte 12 Monate
7Tage seit letztem Push
3Releases
2Bus-Faktor
0offene Issues
GoPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Community profile unavailable
  • go package 'github.com/filipowm/terraform-provider-unifi' points at a different repository (https://github.com/filipowm/terraform-provider-unifi); excluded from ecosystem scoring
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

OpenSSF Scorecard 3.9 / 10
3.9Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-27 12:29 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
k. A.CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 8 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
k. A.Packagingpackaging workflow not detected
10Pinned-Dependenciesall dependencies are pinned
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities11 existing vulnerabilities detected
Direkte Abhängigkeiten 18
RegistryPaketVersionsvorgabeManifest
Gogithub.com/apparentlymart/go-cidrv1.1.1go.mod
Gogithub.com/biter777/countriesv1.7.5go.mod
Gogithub.com/deckarep/golang-set/v2v2.9.0go.mod
Gogithub.com/filipowm/go-unifi/v2v2.3.0go.mod
Gogithub.com/hashicorp/go-ctyv1.5.0go.mod
Gogithub.com/hashicorp/go-versionv1.9.0go.mod
Gogithub.com/hashicorp/terraform-plugin-docsv0.25.0go.mod
Gogithub.com/hashicorp/terraform-plugin-frameworkv1.19.0go.mod
Gogithub.com/hashicorp/terraform-plugin-framework-validatorsv0.19.0go.mod
Gogithub.com/hashicorp/terraform-plugin-gov0.31.0go.mod
Gogithub.com/hashicorp/terraform-plugin-logv0.10.0go.mod
Gogithub.com/hashicorp/terraform-plugin-muxv0.23.1go.mod
Gogithub.com/hashicorp/terraform-plugin-sdk/v2v2.40.1go.mod
Gogithub.com/hashicorp/terraform-plugin-testingv1.16.0go.mod
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogithub.com/testcontainers/testcontainers-gov0.43.0go.mod
Gogithub.com/testcontainers/testcontainers-go/modules/composev0.43.0go.mod
Gogolang.org/x/cryptov0.53.0go.mod
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": true,
      "size_kb": 2497,
      "has_wiki": false,
      "homepage": "https://registry.terraform.io/providers/filipowm/unifi/latest/docs",
      "languages": {
        "Go": 1376415,
        "Shell": 309,
        "Makefile": 721,
        "Go Template": 9159
      },
      "pushed_at": "2026-07-20T00:34:23Z",
      "created_at": "2026-06-29T13:10:28Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T00:34:27Z",
      "description": "Terraform provider for managing Ubiquiti's UniFi network controller",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MPL-2.0",
      "default_branch": "main",
      "license_spdx_raw": "MPL-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Calvin Gerling",
      "type": "User",
      "login": "cgerling",
      "company": "@cliniahealth",
      "location": null,
      "followers": 52,
      "avatar_url": "https://avatars.githubusercontent.com/u/13140497?v=4",
      "created_at": "2015-07-01T19:42:08Z",
      "is_verified": null,
      "public_repos": 21,
      "account_age_days": 4043
    },
    "license": {
      "state": "standard",
      "spdx_id": "MPL-2.0",
      "raw_spdx": "MPL-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-07-02T19:32:07Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2025-03-22T18:13:16Z"
        },
        {
          "tag": "v0.0.1",
          "kind": "patch",
          "published_at": "2025-02-23T19:10:28Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "70cc40ccebfacb3167de023059d7e82ebde01316",
          "body": "UniFi 10.x returns an empty data array on a successful networkconf PUT. go-unifi\nv1.9.x mapped that to unifi.ErrNotFound (handled by ReReadOnUpdateNotFound); v2\ninstead returns `unexpected response: expected 1 Network, got 0`, which the helper\ndid not recognize, so every network update failed after a successful write.\n\nTeach ReReadOnUpdateNotFound to also treat the v2 empty-echo (got 0) as the\nre-read trigger, while still propagating genuine anomalies (got 2+). Regression\ntests cover both.",
          "is_bot": false,
          "headline": "fix(network): re-read on go-unifi v2 empty-echo update error",
          "author_name": "Calvin Gerling",
          "author_login": "cgerling",
          "committed_at": "2026-07-20T00:34:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d4d7ca23be418c76b74b57493e904cb699447d9",
          "body": "The plugin-framework provider (provider_v2.go) passed Insecure to\nbase.NewClient but omitted HTTPConfigurer, unlike the SDKv2 provider\n(provider.go). base.NewClient only builds the InsecureSkipVerify transport\nfrom cfg.Insecure inside the MaxRetries>0 branch, so with the default\nMaxRetries==0 the ni\n[…]\nert-verifying transport — making allow_insecure a no-op for every PF\nresource against self-signed UniFi controller certs. Mirror the SDKv2\nprovider and bake the insecure transport into HTTPConfigurer.",
          "is_bot": false,
          "headline": "fix(client): honor allow_insecure in the plugin-framework provider",
          "author_name": "Calvin Gerling",
          "author_login": "cgerling",
          "committed_at": "2026-07-19T20:10:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b22c4229097c09c57afe5bfbf15202c8164b6bfd",
          "body": "filipowm v1.1.0 raises a diagnostic error on ErrNotFound during read, which\nmakes plan/refresh fail when a resource was deleted outside Terraform instead\nof planning to recreate it. Restores the fork's behavior: read() reports\nfound/not-found, Read removes the resource from state, and\ncreate/update/import still treat not-found as an error.",
          "is_bot": false,
          "headline": "fix: drop out-of-band-deleted resources from state on read",
          "author_name": "Calvin Gerling",
          "author_login": "cgerling",
          "committed_at": "2026-07-19T16:31:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c16624d235430179f65632dcf8e9255bf0873946",
          "body": "Re-applies the go-unifi v2 migration on top of filipowm v1.1.0 (previously\nbased on ~v1.0.1). Swaps 66 imports to go-unifi/v2 and bumps to v2.3.0.\n\nBREAKING CHANGE: client auth is now API-key-only (go-unifi v2 removed\nusername/password/session Login), and the IPS resource drops ad-blocking +\nDNS-filtering (go-unifi v2's SettingIps no longer models them).",
          "is_bot": false,
          "headline": "feat!: migrate to go-unifi v2.3.0 on filipowm v1.1.0",
          "author_name": "Calvin Gerling",
          "author_login": "cgerling",
          "committed_at": "2026-07-19T16:31:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d388103e4646c2287b2466440883ae1ddf78386",
          "body": "Bumps the go_modules group with 1 update in the / directory: [go.mongodb.org/mongo-driver](https://github.com/mongodb/mongo-go-driver).\n\n\nUpdates `go.mongodb.org/mongo-driver` from 1.17.6 to 1.17.7\n- [Release notes](https://github.com/mongodb/mongo-go-driver/releases)\n- [Commits](https://github.com/\n[…]\ndencies:\n- dependency-name: go.mongodb.org/mongo-driver\n  dependency-version: 1.17.7\n  dependency-type: indirect\n  dependency-group: go_modules\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump go.mongodb.org/mongo-driver",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-02T20:10:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "00cf727bee7486f8e7dbf3ebb4dd2a4ae46e8d82",
          "body": "Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 8.0.0 to 9.3.0.\n- [Release notes](https://github.com/golangci/golangci-lint-action/releases)\n- [Commits](https://github.com/golangci/golangci-lint-action/compare/4afd733a84b1f43292c63897423277bb7f4313a9...ba\n[…]\nname: golangci/golangci-lint-action\n  dependency-version: 9.3.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump golangci/golangci-lint-action from 8.0.0 to 9.3.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-02T19:32:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9f681edb5ac750325ecc420393bb25b8ce832810",
          "body": "* chore(deps): update dependencies and clean up code formatting\n\n* chore: regenerate docs, update makefile\n\n* chore: apply linter fixes and clean up code formatting\n\n* adjust error message",
          "is_bot": false,
          "headline": "chore(deps): update dependencies and clean up code formatting (#175)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-02T13:54:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7f838a6143010a342867f8c1b23af1d48807c5d",
          "body": "Add .claude/rules/resource-validation.md (attribute vs ConfigValidators,\nControllerVersionValidator/FeatureValidator gating, how to verify) and\n.claude/rules/shared-code.md (base/utils/types/validators reuse map,\nno-duplication policy). Trim overlapping bullets in resource-conventions.md\nto pointers and reference the new rules from CLAUDE.md.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(claude): add resource-validation and shared-code rules",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-02T08:15:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "42e4c2e4938c693c4a89f8d8e9abf7e4d768bf7f",
          "body": null,
          "is_bot": false,
          "headline": "test(network): update version constraint in acceptance test to > 7.5",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-02T07:27:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7311296df6c2e1d1aa8ad8fef570ba8897919ca",
          "body": "Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 7.2.2 to 7.2.3.\n- [Release notes](https://github.com/goreleaser/goreleaser-action/releases)\n- [Commits](https://github.com/goreleaser/goreleaser-action/compare/5daf1e915a5f0af01ddbcd89a43b8061ff4f1a89...f06c13\n[…]\n-name: goreleaser/goreleaser-action\n  dependency-version: 7.2.3\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump goreleaser/goreleaser-action from 7.2.2 to 7.2.3",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-02T00:43:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4f9de57ff9c7f1477ee3d0286cdaf3810ccf7740",
          "body": null,
          "is_bot": false,
          "headline": "docs: regenrate docs",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-02T00:25:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bfc87ed338aa3a9149eb0663f975058674995d74",
          "body": null,
          "is_bot": false,
          "headline": "ci(changelog): implement changelog generation",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-02T00:23:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c7da995bde60feab83bd767cc67361ca2002ca6",
          "body": "… 8.0",
          "is_bot": false,
          "headline": "test(network): update version constraint in mdns acceptance test to >…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-02T00:22:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e1521772432d5bc46f64ce94f2fa455e1b2e796",
          "body": "… policy destination",
          "is_bot": false,
          "headline": "feat(firewall): support match_opposite_networks attribute in firewall…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-02T00:21:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "235d0ccd84ef697ee50c8e56e8d3de2af4246b04",
          "body": null,
          "is_bot": false,
          "headline": "update NewFirewallPolicyTargetModel to handle nil port values",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-02T00:10:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a33c874f833923bc89997750d1a9a2145d189959",
          "body": "… destination",
          "is_bot": false,
          "headline": "feat(firewall): support network_ids attribute in firewall zone policy…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-02T00:10:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "faa49df7f9c92dde5c318e290deffe3896e1c959",
          "body": "…y ips field",
          "is_bot": false,
          "headline": "fix(firewall): allow mixed IPv4/IPv6 addresses in firewall zone polic…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-02T00:10:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83ddf824c717c6dfe89d06cf0db513fcda0d6945",
          "body": "…20) (#173)\n\n* feat(network): add DHCP default-gateway override to unifi_network\n\nSurface the per-network DHCP default-gateway override (the UI's \"Default\nGateway\" Auto/Manual control) on the unifi_network resource and data source.\nBy default the controller advertises the network's own interface IP \n[…]\ne Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* fix(network): add DHCP range validation for default-gateway override\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(network): add DHCP default-gateway override to unifi_network (#1…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-01T23:44:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6ada43c25179f6ad5113d814ee633007f1027456",
          "body": "* fix(network): accept single_network for ipv6_interface_type (#99)\n\nThe unifi_network resource validated ipv6_interface_type against a\nplan-time allow-list of only none|pd|static, so setting\nipv6_interface_type = \"single_network\" failed at terraform plan/validate\nwith \"invalid value for ipv6_interf\n[…]\n end-to-end behavior stay tracked as a follow-up.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(network): accept single_network for ipv6_interface_type (#99) (#169)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-01T21:24:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cdaea8de8f3b15b5262bd0b24265d251ed62b8bd",
          "body": "… 7.2\n\nThe Switch Isolation Settings managed by unifi_setting_global_switch only\nexist on UniFi Network controllers from version 7.2 onward. Without a version\ngate, users on older controllers hit opaque API errors and the acceptance\ntests ran against controllers predating the feature (causing\nTestAc\n[…]\nsionConstraint \">= 7.2\" to all global_switch acceptance tests so they\n  skip cleanly below 7.2 and run in the version matrix scope\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(settings): gate unifi_setting_global_switch on controller version…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-01T14:26:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "076c34e3014f274480c5a4c2670c1461129a927a",
          "body": "…ns behind TF_ACC_LOCAL\n\nTestAccDevice_switch_portOverrides (added in #165/#97) is version-independent,\nso on PRs it ran once in the core scope job and went green, but on push to main\n(scope=all) it runs against all ~19 controller versions and failed everywhere.\n\nIt asserted behavior the Dockerized \n[…]\n, carries the LAG aggregate + inline-VLAN assertions.\n\nProvider-side round-trip correctness remains covered by offline unit tests.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(device): gate LAG aggregate & inline-VLAN port_override assertio…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-01T12:00:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2311d2dcc7b3903697e03a40047f3565b157368e",
          "body": "* fix(network): preserve IPv6/DHCPv6 values on import (#96)\n\nImported unifi_network resources planned the IPv6/DHCPv6 value fields to\nnull whenever the config omitted them: they were declared Optional but not\nComputed, so a sparse post-import config planned \"value -> null\". go-unifi's\n`,omitempty` s\n[…]\nription change, so docs are unaffected.\n\nRefs #96\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(network): preserve IPv6/DHCPv6 values on import (#96) (#171)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-07-01T07:30:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bfe9a3bee5d716357dfdd349c901bd91a8aad07e",
          "body": "…ces (#98) (#162)\n\n* fix(port_profile,network): re-read on ErrNotFound after update (#98)\n\ngo-unifi v1.9.2's generated updatePortProfile/updateNetwork convert a\nsuccessful-but-empty PUT response (HTTP 200, {\"meta\":{\"rc\":\"ok\"},\"data\":[]})\ninto unifi.ErrNotFound via their `len(respBody.Data) != 1` gua\n[…]\nss state is repopulated from the\nreturned object.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: re-read on ErrNotFound after update across affected SDKv2 resour…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-30T10:36:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c9751e697616466ce5bce5789933cef83facd68a",
          "body": "…ide (#97) (#165)\n\n* feat(device): add inline per-port VLAN overrides on unifi_device port_override\n\nSurface the per-port VLAN field cluster (native_networkconf_id,\ntagged_vlan_mgmt, forward, excluded_network_ids, voice_networkconf_id,\nsetting_preference) on the `unifi_device` `port_override` block,\n[…]\nery plan. Update the example and regenerate\ndocs.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add inline per-port VLAN overrides to `unifi_device` port_overr…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-30T09:02:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6fd2cb4bc14dd7b26c5c366a4d19f5e8aa552e2d",
          "body": "…#84) (#163)\n\n* refactor(types): promote NormalizeMAC plan modifier to shared types package\n\nMove the set-of-MAC normalization plan modifier (and its unit test) out of\nthe apgroup domain into the shared internal/provider/types package so other\nresources (e.g. the new unifi_setting_global_switch) can\n[…]\niately, before any controller/device interaction.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add unifi_setting_global_switch for switch isolation settings (…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-30T08:32:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cba94d977509eb665e35a7ce82358e871da1a4f0",
          "body": "* fix(network): preserve DHCP Guarding on unifi_network (#123)\n\nThe `unifi_network` resource had no schema attribute for UniFi's \"DHCP\nGuarding\" setting, and the SDKv2 Create/Update mapper built a fresh\n`*unifi.Network` without ever assigning `DHCPguardEnabled`. Because the\ngo-unifi field has no `om\n[…]\ne table test (TestValidateDHCPGuardingRawConfig).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: preserve DHCP Guarding on unifi_network (#123) (#161)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-29T22:32:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f01377d2cd862444ba92671a7639d83e03fca464",
          "body": "…irewall_zone_policy_order for policies ordering (#122) (#159)\n\n* refactor(firewall): drop duplicate connection_states config validator\n\n`unifi_firewall_zone_policy` registered the\n`RequiredSimpleTogetherIf(\"connection_state_type\", CUSTOM, \"connection_states\")`\nconfig validator twice. Remove the byt\n[…]\nal ZBF controller), examples, and generated docs.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(firewall): lock read-only index for zone policy & new resource_f…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-29T22:26:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ee1b3e1e09ec67e3149085a02d0e121f93d5442a",
          "body": "… (#160)\n\n* fix(account): map RADIUS VLAN assignment via the vlan attribute (#95)\n\nThe unifi_account resource and data source never mapped the controller's\ninteger vlan field; they only mapped network_id (networkconf_id), a network-\nconfig reference distinct from the 802.1Q VLAN used for RADIUS dyna\n[…]\nus 4.8 (1M context) <noreply@anthropic.com>\n\n* fix(account): update description for VLAN attribute in RADIUS assignment\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(account): map RADIUS VLAN assignment via the vlan attribute (#95)…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-29T20:39:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "74f6283e78a0a5360d4428db00444642db278016",
          "body": "…e (#94) (#164)\n\n* fix(network): map firewall_zone_id on unifi_network to fix blank ZBF Rules page\n\nOn UniFi OS 9.x with Zone-Based Firewall, creating a network via unifi_network\nleft it unzoned because the resource never mapped unifi.Network.FirewallZoneID.\nThe controller then returns HTTP 500 on t\n[…]\nep the zone-side networks.# == 1 check in step 1.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: map firewall_zone_id on unifi_network to fix blank ZBF Rules pag…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-29T17:16:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8500cdafd26b126501cbd2ab9892bda62235b8ae",
          "body": "* feat: add WireGuard VPN client support to unifi_network\n\nExpose the `vpn-client` purpose and the WireGuard VPN client attributes\non the unifi_network resource, wiring them to fields the go-unifi client\nalready models (Purpose `vpn-client`, VPNType `wireguard-client`,\nWireguardClient*, XWireguardPr\n[…]\npic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>\nCo-authored-by: devantler <devantler@users.noreply.github.com>\nCo-authored-by: Mateusz Filipowicz <matfilipowicz@gmail.com>",
          "is_bot": false,
          "headline": "feat: add WireGuard VPN client support to unifi_network (#147)",
          "author_name": "Nikolai Emil Damm",
          "author_login": "devantler",
          "committed_at": "2026-06-29T06:25:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "414a53316699bc85ee2d1fd2de1eaaf7f4094e73",
          "body": "… 6GHz) selection (#158)\n\n* feat(wlan): expose `wlan_bands` on `unifi_wlan` for multi-band (incl. 6GHz) selection\n\nAdds a `wlan_bands` set attribute (`2g`/`5g`/`6g`) to `unifi_wlan` — the modern multi-band field that supersedes the legacy single-band `wlan_band` enum (`2g`/`5g`/`both`) and is the on\n[…]\ne Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_018SCDby9NWYT5gsEB6jYbt3\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(wlan): expose `wlan_bands` on `unifi_wlan` for multi-band (incl.…",
          "author_name": "Steve Rice",
          "author_login": "steverice",
          "committed_at": "2026-06-28T19:04:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "64d69f621552b0497017137c65d3f2cb4bba0512",
          "body": "… changes (#131)\n\n* fix: upgrade go-unifi to v1.9.1 and adapt to its controller-API field changes\n\ngo-unifi v1.9.x is regenerated against current controller specs, which changed two fields the provider uses: `DevicePortOverrides.AggregateNumPorts` (int) became `AggregateMembers` (`[]int`), and `Fire\n[…]\nClaude-Session: https://claude.ai/code/session_018SCDby9NWYT5gsEB6jYbt3\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>\nCo-authored-by: Mateusz Filipowicz <matfilipowicz@gmail.com>",
          "is_bot": false,
          "headline": "fix: upgrade go-unifi to v1.9.1 and adapt to its controller-API field…",
          "author_name": "Steve Rice",
          "author_login": "steverice",
          "committed_at": "2026-06-27T21:18:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "781e09f7b71be5bcfa377fb2cdad431606c8d367",
          "body": "…pment` to `terraform-provider-development`",
          "is_bot": false,
          "headline": "chore(claude): correct plugin reference from `terraform-plugin-develo…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-26T23:03:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8cc0a13739b6c7f6fbda99e6b213c83dd0068521",
          "body": "Pin every GitHub Action to a full-length commit SHA (with a version\ncomment) instead of a mutable tag, to harden the CI supply chain\nagainst tag-hijacking. Versions bumped to latest where compatible:\n\n- actions/checkout                  v6     -> v7.0.0\n- actions/setup-go                  v6     -> \n[…]\ng. the Node 20 -> 24 runtime, which GitHub-hosted runners support).\nThe `# vX.Y.Z` comments keep Dependabot able to track updates.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: pin GitHub Actions to commit SHAs and bump to latest",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-26T23:03:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "851e7a271b9351e9c812a32aebe721a09e1189b9",
          "body": null,
          "is_bot": false,
          "headline": "chore(claude): add Claude Code setup",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-26T23:03:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "352a7b7f2460c8b109e9c54a896cd3e51142d4c1",
          "body": "WAN networks return empty values for these fields from the API, causing\nperpetual drift against schema defaults. Now explicitly set defaults\nwhen API returns empty for WAN networks.",
          "is_bot": false,
          "headline": "fix: handle empty network_group and ipv6_interface_type for WAN networks",
          "author_name": "shadyeip",
          "author_login": "shadyeip",
          "committed_at": "2026-06-26T22:52:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1522511abdc720fe4136d895537bcbbc276dd9c",
          "body": "The UniFi API ignores index on create/update - ordering is controlled\nvia a separate batch-reorder endpoint. Making index computed-only\nprevents \"Provider produced inconsistent result after apply\" errors.",
          "is_bot": false,
          "headline": "fix: make index field read-only in `unifi_firewall_zone_policy`",
          "author_name": "shadyeip",
          "author_login": "shadyeip",
          "committed_at": "2026-06-26T22:52:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c05f24ca2caf256974724e82ba10dad4577f67f0",
          "body": "…s meshing\n\nExposes the site `connectivity` setting (the controller's \"Wireless Meshing\" toggle) as a managed resource, mirroring the existing `unifi_setting_network_optimization` pattern. A single `enabled` bool maps to `SettingConnectivity.Enabled` via the `GetSettingConnectivity`/`UpdateSettingCo\n[…]\nller-generated mesh SSID (`x_mesh_essid`) and PSK (`x_mesh_psk`) are intentionally left unmanaged so the secret never lands in Terraform state.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(settings): add `unifi_setting_connectivity` resource for wireles…",
          "author_name": "Steve Rice",
          "author_login": "steverice",
          "committed_at": "2026-06-26T11:51:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f4170e580e6363b2f93f3a3dc6214729c1c8df90",
          "body": "Per-network UPnP/NAT-PMP opt-in — the toggle that, combined with the gateway-global `unifi_setting_usg.upnp_enabled`, controls which networks' clients may self-map WAN ports. Lets UPnP be scoped to trusted networks only (e.g. enable on Trusted so Plex/self-hosted services keep auto-mapping, leave of\n[…]\nbled` already exists; bool Optional+Computed, wired through the existing igmp_snooping/multicast_dns pattern (schema + get + set).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(network): expose `upnp_lan_enabled` on `unifi_network`",
          "author_name": "Steve Rice",
          "author_login": "steverice",
          "committed_at": "2026-06-25T08:28:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b942b75e97ea8e687864f0758db3d238ee5ab847",
          "body": "* feat(device): expose `switch_vlan_enabled` on `unifi_device` resource\n\nAdds a top-level `switch_vlan_enabled` bool attribute that maps to the controller-side `switch_vlan_enabled` field. Required to be `true` on access points with passthrough Ethernet ports (UAP-IW lineage — UAP-AC-IW, UAP-AC-IW-P\n[…]\ne schema with the API's write-once behavior so plans converge.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(device): expose `switch_vlan_enabled` on `unifi_device` (#127)",
          "author_name": "Steve Rice",
          "author_login": "steverice",
          "committed_at": "2026-06-25T07:20:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "930c5c4ca7e926bd68e27cac4acee2a1cd4608fb",
          "body": "…setting_ether_lighting` (#129)\n\n* feat(device): expose per-band `radio` config on `unifi_device`\n\nAdds a `radio` nested block to `unifi_device` for managing AP radio settings (`ng`/`na`/`6e`): `channel`, `ht` (width), `tx_power_mode` (incl. `disabled` to turn a band off), `tx_power`, and `min_rssi`\n[…]\n.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nCo-authored-by: Mateusz Filipowicz <matfilipowicz@gmail.com>",
          "is_bot": false,
          "headline": "feat: Etherlighting support — `ether_lighting` device block + `unifi_…",
          "author_name": "Steve Rice",
          "author_login": "steverice",
          "committed_at": "2026-06-25T05:50:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c2c2a71b05bf9efb719ba877ecd0b0fe71826b44",
          "body": "Adds a `radio` nested block to `unifi_device` for managing AP radio settings (`ng`/`na`/`6e`): `channel`, `ht` (width), `tx_power_mode` (incl. `disabled` to turn a band off), `tx_power`, and `min_rssi`/`min_rssi_enabled`. The underlying `go-unifi` `DeviceRadioTable` already models every field, so no\n[…]\numented in the block description. Unit tests cover band preservation, non-zero overlay, missing-band append, and min-rssi pairing.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(device): expose per-band `radio` config on `unifi_device`",
          "author_name": "Steve Rice",
          "author_login": "steverice",
          "committed_at": "2026-06-23T14:49:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "097e0645d46a17b96129c12cbca7a58516eeaa10",
          "body": "…ntain permissions'\n\nCo-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for pull request finding 'CodeQL / Workflow does not co…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bc02dc30b97b44c6cc93d19d5cb6a60220b4836a",
          "body": "…Docker controller\n\nad_blocked_networks, dns_filters (IPS) and dhcp_relay_servers (USG) require an\nadopted gateway/IPS engine the Dockerized test controller lacks, so it accepts\nthe PUT but returns them empty on v7/v9/latest -> flaky \"element vanished\".\n\n- Gate the dedicated tests (TestAccSettingIps\n[…]\ne8\n  configs+assertions so the rest (ips_mode, categories, honeypots, suppression,\n  and all other USG settings) still runs in CI.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(settings): gate gateway-dependent assertions unsupported on the …",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "91595b190fa026cc40ba1724c6badbaffd86b2dd",
          "body": "…write\n\nThe bounded poll-until-consistent (commit 8f30310) did not fix the IPS/USG\n\"element vanished\" failures: debugging showed the provider payload is correct\n(arrays sent with their AdBlockingEnabled/DNSFiltering enable flags), the PUT is\naccepted (no api.err; the error is a framework plan-vs-sta\n[…]\nwhich is\nthe correct behavior for real users (state reflects the persisted GET). The\ngateway-dependent tests are gated separately.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "revert(settings): drop read-after-write poll, keep single read-after-…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aa0dbce715e6888d0ecc4482b14b4346c2981e51",
          "body": "…ministic\n\ndata.unifi_dns_records returns ALL records on the site, so DNS tests creating\nrecords in parallel inflated the count and flaked TestDNSRecordsDataSource_*\n(result.# expected \"0\"/\"3\", got \"1\"/\"4\"). Share a dnsLock mutex across the\nrecord-creating and record-counting DNS tests so they never run concurrently;\npure validation/error tests (no records) are left unlocked.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(dns): serialize DNS tests so data-source record counts are deter…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5bbb388b1bf84e0874caf4e256d87bdc9f2d3b5c",
          "body": "…ections persist\n\nRead-after-write moved settings state from the PUT echo to the GET, but the\ncontroller's GET is ALSO eventually-consistent for gateway/IDS collections, so a\nsingle read could still return them empty -> \"inconsistent result after apply:\nelement N has vanished\" (ad_blocked_networks, \n[…]\nuired). Gated by ReadAfterWrite (settings-only) AND the\ninterface, so all other resources keep single-read behavior. Non-breaking.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(settings): poll read-after-write until eventually-consistent coll…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3af9e5c02e03f59fe35838a8e342d7f7ff288981",
          "body": "… regression)\n\nThe previous commit pointed the comprehensive IPS honeypot's network_id at a\nGetTestVLAN network (10.x.x.x) while leaving ip_address hardcoded to\n192.168.1.10, so the controller rejected the PUT with\napi.err.HoneypotIpNotWithinSelectedNetwork (deterministic 400). 'network1' is\nthe rea\n[…]\nt, mirroring the passing TestAccSettingIps_honeypot. dns_filters\nand ad_blocked_networks keep their real unifi_network references.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(settings): revert honeypot network to default LAN (fix introduced…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3fadbc888484bff75043c8e399c0e346f9132986",
          "body": "…trix\n\nEach of the 20 matrix jobs re-ran the full suite against a freshly-booted\ncontroller; ~123 of 197 tests are version-independent and don't need every\nversion. Split execution by a UNIFI_ACCTEST_SCOPE env var enforced centrally in\nAcceptanceTest (the single resource.ParallelTest call site):\n  -\n[…]\nHub 429s, moves the\n    cold pull out of the test timeout); drop the no-op TF_PLUGIN_CACHE_DIR and\n    check-latest re-resolution.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: speed up acceptance tests via core/matrix split and reduced PR ma…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "66ee5827ef05db8874fd81cd065ce36317295bf3",
          "body": "…erts on import\n\n- ad_blocked_networks/enabled_networks used literal non-existent IDs\n  (\"network1\"/\"network2\"/\"network3\") that the controller silently drops,\n  producing empty read-backs. Reference real unifi_network resources (asserted\n  via TestCheckTypeSetElemAttrPair) and use the valid \"LAN\" ke\n[…]\nked import step (\"ImportStateVerify attributes not equivalent\").\n  Ignore just that attribute path on the comprehensive IPS tests.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(settings): use real network refs and ignore async suppression.al…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "42cd23c9191c5ccfb7f73f57031b8f8f002e624f",
          "body": "…isted GET\n\ngo-unifi's SetSetting* does a single PUT and parses the PUT response echo (no\nGET); the gateway-less test controller intermittently echoes settings\ncollections (ad_blocked_networks, dns_filters, dhcp_relay_servers) back empty.\nThe provider built state from that echo (generic_resource Cre\n[…]\n eventually-consistent resources like users. Non-breaking\n(additive field; settings are site-scoped singletons that always exist).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(settings): read-after-write so post-apply state reflects the pers…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "19fae1cf1d381fcc979720785a0e97002a0ab68e",
          "body": "Under parallel load the controller intermittently returns transient responses\n(connection resets, HTTP 5xx/429, or an HTML error page instead of JSON, which\nsurfaces as \"invalid character '<' looking for beginning of value\"), failing\nunrelated acceptance tests. The existing RetryableUnifiClient.Do o\n[…]\nd, so existing behavior is unchanged\nand the change is non-breaking. Adds httptest-based unit tests and regenerated\nprovider docs.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(client): add opt-in configurable HTTP retries for transient errors",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "82ef6dc41d96d6e6e4deda35bb2e1e2faa6cca29",
          "body": "…lism\n\nThe retry step (nick-fields/retry@v3) was configured with timeout_minutes: 20,\nmax_attempts: 3, retry_on: timeout, but the job itself had timeout-minutes: 20.\nThe job-level timeout killed the whole job during attempt 1, so attempts 2-3\nnever ran — retry_on: timeout was dead config. Raise the \n[…]\n cases stop overloading the single shared\ncontroller, which amplified transient-load failures. Configurable for faster\nlocal runs.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: raise acctest job timeout above retry budget and cap test paralle…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dd0a87e2223691b45ca5a9091b5d66d81f3934d0",
          "body": "The MAC pool was mapset.NewSet[*net.HardwareAddr]() — a set of pointers deduped\nby pointer identity. The init loop ran i over 0..511 with mac[5]=byte(i), which\nwraps at 256, so only 256 distinct MAC values existed but 512 distinct pointers\nwere added; the dup guard never fired because every &mac is \n[…]\nlue, and build\nexactly the 256 addresses of the RFC 7042 00:00:5e:00:53:xx documentation block.\nThe public signature is unchanged.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(testing): make AllocateTestMac hand out unique MAC addresses",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "041ba8b366abc23b88f88a2588cf8103f19451f3",
          "body": "… timeouts\n\nwaitForController spawned a goroutine that polled readStatus and, on ANY\nreadStatus error, returned without calling wg.Done() while the parent blocked\non wg.Wait() forever. A single transient /status error during controller boot\n(the controller restarts Tomcat mid-provisioning) deadlocke\n[…]\n context.Cause error when the\ndeadline fires. waitForController now returns error; its single caller\nWaitUntilReady propagates it.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(testing): prevent waitForController goroutine deadlock causing CI…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T11:25:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c5b2c41545bd107950149b5eb386304e8a72f1e2",
          "body": "* feat: support AP Group resource\n\n* add missing test helper\n\n* fix: address review comment in internal/provider/acctest/resource_ap_group_test.go\n\nApplied from PR review feedback (thread PRRT_kwDONkoWWc6JXzJr).\n\n* fix: address review comment in internal/provider/apgroup/data_ap_group.go\n\nApplied fr\n[…]\n acceptance tests cannot run without AP adoption.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: support AP Group resource (#86)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2026-06-23T02:21:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1e4546bdacbd2ac817717a2dbaf9e16701c8259f",
          "body": "Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-go/releases)\n- [Commits](https://github.com/actions/setup-go/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-go\n  dependency-version: '6'\n  depen\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/setup-go from 5 to 6 (#107)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-13T21:57:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d6e31ce8af44acc31f6c5f77dad0feafdbd049e5",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v6)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/checkout from 4 to 6 (#114)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-13T21:54:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5203ed2aebce15181548de61607ce3df5bd0c7d4",
          "body": "….0.5 in the go_modules group (#92)\n\nbuild(deps): bump github.com/containerd/containerd/v2\n\nBumps the go_modules group with 1 update: [github.com/containerd/containerd/v2](https://github.com/containerd/containerd).\n\n\nUpdates `github.com/containerd/containerd/v2` from 2.0.4 to 2.0.5\n- [Release notes]\n[…]\n\n  dependency-type: indirect\n  dependency-group: go_modules\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump github.com/containerd/containerd/v2 from 2.0.4 to 2…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-13T21:54:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3f4f5fbbb646df5f14b7c1503e5e753fbdf5186b",
          "body": "…l_zone",
          "is_bot": false,
          "headline": "Add example of how to find pre-existing zones with data.unifi_firewal…",
          "author_name": "Jonatan Olofsson",
          "author_login": "jonatanolofsson",
          "committed_at": "2026-06-04T17:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7dc512dff4b44a654ed69c8e915beb40bacdb702",
          "body": "…dules group (#83)\n\nbuild(deps): bump golang.org/x/net in the go_modules group\n\nBumps the go_modules group with 1 update: [golang.org/x/net](https://github.com/golang/net).\n\n\nUpdates `golang.org/x/net` from 0.37.0 to 0.38.0\n- [Commits](https://github.com/golang/net/compare/v0.37.0...v0.38.0)\n\n---\nup\n[…]\n\n  dependency-type: indirect\n  dependency-group: go_modules\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump golang.org/x/net from 0.37.0 to 0.38.0 in the go_mo…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-04-20T04:57:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b9284f7758544f495d244133d459ffd530c9e7ed",
          "body": "* docs: add examples and recreate TF documentation\n\n* update readme\n\n* add information about experimental support of firewall zones",
          "is_bot": false,
          "headline": "docs: improve documentation for 1.0.0 release (#75)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-22T18:13:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a133383b437c5c38c3e4753ff64b075388bcfe87",
          "body": "…i_portal_file` and `unifi_setting_guest_access` resources (#74)\n\n* feat: support customizing guest portal logo and background with `unifi_portal_file` and `unifi_setting_guest_access` resources\n\n* ci: run acceptance tests on go.mod changes\n\n* f",
          "is_bot": false,
          "headline": "feat: support customizing guest portal logo and background with `unif…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-22T16:31:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8dd4bfcb972b870aedfc25d3ba20f8dc7056672f",
          "body": "…e_policy` (#73)\n\n* feat: support Firewall Zone Policy resources with `unifi_firewall_zone_policy`\n\n* lint",
          "is_bot": false,
          "headline": "feat: support Firewall Zone Policy resources with `unifi_firewall_zon…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-22T14:16:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cdc0254289609031c4954b49a74e4b16e83073df",
          "body": null,
          "is_bot": false,
          "headline": "refactor: reorganize code to make it more readable (#71)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-21T10:52:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86fdc0b27a8e4182e4a8390083deea2082945a61",
          "body": "….0 (#62)\n\nBumps [github.com/deckarep/golang-set/v2](https://github.com/deckarep/golang-set) from 2.7.0 to 2.8.0.\n- [Release notes](https://github.com/deckarep/golang-set/releases)\n- [Commits](https://github.com/deckarep/golang-set/compare/v2.7.0...v2.8.0)\n\n---\nupdated-dependencies:\n- dependency-nam\n[…]\n..\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Mateusz Filipowicz <matfilipowicz@gmail.com>",
          "is_bot": true,
          "headline": "build(deps): bump github.com/deckarep/golang-set/v2 from 2.7.0 to 2.8…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-03-21T06:09:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3ae1d7ec668cd9c4dc513dd5abad413223ece44e",
          "body": "…#65)\n\nBumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 6.5.1 to 6.5.2.\n- [Release notes](https://github.com/golangci/golangci-lint-action/releases)\n- [Commits](https://github.com/golangci/golangci-lint-action/compare/v6.5.1...v6.5.2)\n\n---\nupdated-dependen\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump golangci/golangci-lint-action from 6.5.1 to 6.5.2 (…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-03-21T06:08:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bd9b32c27b1bb7a07545787d2911d0b2a5eae835",
          "body": "…1.11.0 to 1.12.0 (#67)\n\nbuild(deps): bump github.com/hashicorp/terraform-plugin-testing\n\nBumps [github.com/hashicorp/terraform-plugin-testing](https://github.com/hashicorp/terraform-plugin-testing) from 1.11.0 to 1.12.0.\n- [Release notes](https://github.com/hashicorp/terraform-plugin-testing/releas\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump github.com/hashicorp/terraform-plugin-testing from …",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-03-21T06:08:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b585a209aa55a607986a0c22094d395d04ef5237",
          "body": "Bumps the go_modules group with 2 updates: [github.com/containerd/containerd/v2](https://github.com/containerd/containerd) and [github.com/docker/buildx](https://github.com/docker/buildx).\n\n\nUpdates `github.com/containerd/containerd/v2` from 2.0.2 to 2.0.4\n- [Release notes](https://github.com/contai\n[…]\n\n  dependency-type: indirect\n  dependency-group: go_modules\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump the go_modules group with 2 updates (#64)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-03-21T06:01:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "45ba7aace95cac7eb0deedc0f8102b527d2b24b7",
          "body": "* feat: support Firewall Zone resource and datasource\n\n* disable flaky test",
          "is_bot": false,
          "headline": "feat: support Firewall Zone resource and datasource (#70)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-21T06:00:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca21f7908315c90ade075b803366db6b5079cc6b",
          "body": "…ss` (#61)\n\n* feat: support Guest Access settings with `resource_setting_guest_access`\n\n* feat: add support for redirect after authentication in guest access settings\n\n* feat: add support for Facebook authentication in guest access settings\n\n* feat: add support for Google authentication in guest acc\n[…]\nal\n\n* feat: retry client action on HTTP 401, but first attempt relogging in\n\n* require controllr version 7.4 for several portal customization attributes\n\n* enable acceptance tests workflow concurrency",
          "is_bot": false,
          "headline": "feat: support Guest Access settings with `resource_setting_guest_acce…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-17T13:53:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "28d28f17f6a914c0093e53cf9ca5bd56e0893bde",
          "body": "…nd UPNP enabled fields only computed (#60)\n\n* feat: simplify setting_usg resource by making geo IP fitering and UPNP enabled fields only computed\n\n* rename block to mode",
          "is_bot": false,
          "headline": "feat: simplify unifi_setting_usg resource by making geo IP fitering a…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-16T22:56:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02d10929c9306ed4a66f68a47a08ec161840b0aa",
          "body": "…e (#58)",
          "is_bot": false,
          "headline": "feat: remove filter from dns_record datasource and use plain structur…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-16T15:25:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b269563553b9b3111b117215b749369eae691c36",
          "body": null,
          "is_bot": false,
          "headline": "ci: remove constraint on acceptance tests parallelism (#59)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-16T14:55:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff14bd365f72c1e39e29ebaabb38e39a05d22c3f",
          "body": "…(#57)\n\n* fix: user `ip` in user datasource is populated with `localDnsRecord`\n\n* add test",
          "is_bot": false,
          "headline": "fix: user `ip` in user datasource is populated with `localDnsRecord` …",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-16T13:08:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9600c6e0687054fb89e9033b413118c3c3d0b16",
          "body": "… `unifi_setting_ips` resource (#56)\n\n* feat: add support for Intrution Prevention System (IPS) settings with `unifi_setting_ips` resource\n\n* require IPS features enabled on controller\n\n* require version 7.4\n\n* require version 7.5 for advanced_filtering_preference\n\n* feat: use Remember Me to prolong session for user/pass authentication\n\n* run some setting mgmt tests on 7.0+ due to auto_upgrade_hour not working until device is adopted and auto upgrade logic is different and not supported",
          "is_bot": false,
          "headline": "feat: add support for Intrution Prevention System (IPS) settings with…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-16T11:53:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b6ff55a18da0c370467900cd1bcee05f2de377c",
          "body": "…source_setting_mgmt` (#54)\n\n* feat: completely support for all site-wide management settings in resource_setting_mgmt\n\n* require controller version minimum 7.3 for debug_tools_enabled",
          "is_bot": false,
          "headline": "feat: completely support for all site-wide management settings in `re…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-15T09:47:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fbb6296e9e704a2ea6e6e06c3dfd5158548f1b91",
          "body": null,
          "is_bot": false,
          "headline": "refactor: migrate resource_setting_mgmt to Terraform Plugin Framework",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-14T09:17:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65f30999e91d2c0abe83fb9a02a8157c99357b79",
          "body": "…#48)\n\nBumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 6.5.0 to 6.5.1.\n- [Release notes](https://github.com/golangci/golangci-lint-action/releases)\n- [Commits](https://github.com/golangci/golangci-lint-action/compare/v6.5.0...v6.5.1)\n\n---\nupdated-dependen\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump golangci/golangci-lint-action from 6.5.0 to 6.5.1 (…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-03-14T06:32:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "55e6bbb4e99cc83cba9d226426ccc1bf3743fae8",
          "body": "…64.7 (#49)\n\nbuild(deps): bump github.com/golangci/golangci-lint\n\nBumps [github.com/golangci/golangci-lint](https://github.com/golangci/golangci-lint) from 1.64.6 to 1.64.7.\n- [Release notes](https://github.com/golangci/golangci-lint/releases)\n- [Changelog](https://github.com/golangci/golangci-lint/\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump github.com/golangci/golangci-lint from 1.64.6 to 1.…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-03-14T06:30:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7440febd101afa764d437213164cf3683f2e4a1f",
          "body": "…_usw` resource (#53)",
          "is_bot": false,
          "headline": "feat: add support for UniFi Switch (USW) settings with `unifi_setting…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-14T06:19:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34c495021fbf84ba1b9470ba5b077eee69913f61",
          "body": null,
          "is_bot": false,
          "headline": "fix: invalid handling of site of DNS resource and datasources (#52)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-14T00:03:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d1643ed8058fbd95f19bc692f2fe96a56fd6cd0",
          "body": "…icResource (#51)",
          "is_bot": false,
          "headline": "refactor: move BaseSettingResource to reusable in broader scope Gener…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-13T23:34:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f2573d72c361ce7afb36cb62a42d9fc254f997c",
          "body": "…log` resource (#47)\n\n* feat: add support for Remote Syslog settings with `unifi_setting_rsyslog` resource\n\n* set controller version constraint on 8.5 for rsyslogd\n\n* require controller version 7.2 for teleport\n\n* fix: use dedicated site for USG setting tests to not interfere with other resources",
          "is_bot": false,
          "headline": "feat: add support for Remote Syslog settings with `unifi_setting_rsys…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-11T23:59:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f82bce6de0629f03626416c3274e82449ca39ced",
          "body": "…fi_setting_dpi` resource (#45)",
          "is_bot": false,
          "headline": "feat: add support for Deep Packet Inspection (DPI) settings with `uni…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-11T10:33:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72dcdd03cef75063b3d960df80b192b3ee5f5f11",
          "body": "…lcd_monitor` resource (#46)",
          "is_bot": false,
          "headline": "feat: add support for LCD Monitor (LCM) settings with `unifi_setting_…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-11T10:07:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcea1e0ba41c6e91da50a25c6123f403de153009",
          "body": "* feat: add support for UPNP and Geo IP filtering to USG settings resource\n\n* feat: support complete USG settings resource\n\n* fix messages in required_together_if.go\n\n* improve docs of USG resource\n\n* tests: require version at least 9.0 for unbind_wan_monitors\n\n* feat: require version at least 8.5 for dns_verification\n\n* fix: use go-unifi 1.5.2 to fix NTP\n\n* require 7.0 or later for timeout preference\n\n* require 7.0 or later for geo IP filtering",
          "is_bot": false,
          "headline": "feat: support complete USG resource (#44)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-11T01:17:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35c74bf59d272e24cd30ec44520f2446c752cfc0",
          "body": "…(#42)\n\n* refactor: migrate USG setting resource to Terraform Plugin Framework\n\n* remove setting_usg from old provider\n\n* add USG resource to provider v2",
          "is_bot": false,
          "headline": "refactor: migrate USG setting resource to Terraform Plugin Framework …",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-05T11:38:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb8fc3871ea319e132ad4a71a2b51cf405fb0d06",
          "body": "Bumps [github.com/filipowm/go-unifi](https://github.com/filipowm/go-unifi) from 1.4.0 to 1.5.0.\n- [Release notes](https://github.com/filipowm/go-unifi/releases)\n- [Changelog](https://github.com/filipowm/go-unifi/blob/main/.goreleaser.yaml)\n- [Commits](https://github.com/filipowm/go-unifi/compare/v1.\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump github.com/filipowm/go-unifi from 1.4.0 to 1.5.0 (#40)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-03-03T21:10:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7856ec47644e8c99aad54733c3f64c07f17566fb",
          "body": "* feat: add Telepor support with `unifi_setting_teleport` resource\n\n* add cidr validators\n\n* fix teleport tests by specifying version constraints\n\n* fix teleport version needed\n\n* require version 7.1\n\n* lint",
          "is_bot": false,
          "headline": "feat: add Teleport support with `unifi_setting_teleport` resource (#39)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-03T20:08:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5da978a5d381bc6dbe6f4b82474e336cc291e195",
          "body": "…pection` resource (#38)\n\n* feat: add SSL inspection resource support with `unifi_setting_ssl_inspection` resource\n\n* add version contstraint",
          "is_bot": false,
          "headline": "feat: add SSL inspection resource support with `unifi_setting_ssl_ins…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-02T19:46:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a87f28545f9b3c4dadf8f2ee5786e73ffd3420e",
          "body": "…0.1 to 0.21.0 (#33)\n\nbuild(deps): bump github.com/hashicorp/terraform-plugin-docs\n\nBumps [github.com/hashicorp/terraform-plugin-docs](https://github.com/hashicorp/terraform-plugin-docs) from 0.20.1 to 0.21.0.\n- [Release notes](https://github.com/hashicorp/terraform-plugin-docs/releases)\n- [Changelo\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump github.com/hashicorp/terraform-plugin-docs from 0.2…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-03-02T17:21:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ef2221cab9b99c1cab8948d11615bbc12988f0af",
          "body": "…etwork_optimization` resource (#37)\n\n* feat: add network optimization resource support with `unifi_setting_network_optimization` resource",
          "is_bot": false,
          "headline": "feat: add network optimization resource support with `unifi_setting_n…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-02T00:41:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b5ed14d8dbb3311a50c0f74c2b71f3c152af7c2",
          "body": "…rce (#36)\n\n* feat: add NTP setting resource support with `unifi_setting_ntp` resource\n\n* linting\n\n* fix missing method\n\n* add missing validators",
          "is_bot": false,
          "headline": "feat: add NTP setting resource support with `unifi_setting_ntp` resou…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-02T00:10:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a78667e6693c0f8777b2e3fe1acd046c7a9269f6",
          "body": "…_setting_magic_site_to_site_vpn` resource (#35)\n\n* feat: add magic site-to-site VPN setting resource support with `unifi_setting_magic_site_to_site_vpn` resource\n\n* do not use default\n\n* require controller version >=7.4 for magic site to site vpn tests",
          "is_bot": false,
          "headline": "feat: add magic site-to-site VPN setting resource support with `unifi…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-01T22:12:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f815ffef794b3f2db144e5f9b2af1f9ce71e272d",
          "body": "… resource (#34)\n\n* feat: add locale setting resource support with `unifi_setting_locale` resource\n\n* lint",
          "is_bot": false,
          "headline": "feat: add locale setting resource support with `unifi_setting_locale`…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-01T17:03:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "273d0dadddcedec87ce5090e413f828a7e382f35",
          "body": "…tting_auto_speedtest` resource (#32)\n\n* feat: add automatic speedtest setting resource support with `unifi_setting_auto_speedtest` resource\n\n* restore lowered test paralellism\n\n* refactoring and fixes\n\n* fix speedtest after refactor\n\n* run speedtest test on versions [7.2,7.4.156), cause later it was removed from USG which is used in tests",
          "is_bot": false,
          "headline": "feat: add automatic speedtest setting resource support with `unifi_se…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-03-01T14:38:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a36940b01905d41c33b1077023b6d62560ee3517",
          "body": "…y` resource (#31)\n\n* feat: add country setting resource support with `unifi_setting_country` resource\n\n* linting",
          "is_bot": false,
          "headline": "feat: add country setting resource support with `unifi_setting_countr…",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-02-27T01:56:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ccac6edebe50542623d8eca5cd7a4fbb55792b0d",
          "body": "* ci: try to fix text file busy error\n\n* set up terraform explicitly before running tests\n\n* remove limitation on parallel tests run",
          "is_bot": false,
          "headline": "ci: fix text file busy error causing test flakiness (#30)",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-02-26T19:22:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cf4ea69ade4589826bc8523dc3006859e3c69bd",
          "body": null,
          "is_bot": false,
          "headline": "docs: add missing contributing file",
          "author_name": "Mateusz Filipowicz",
          "author_login": "filipowm",
          "committed_at": "2025-02-26T17:57:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 3,
      "commits_last_year": 59,
      "latest_release_at": "2026-07-02T19:32:07Z",
      "latest_release_tag": "v1.1.0",
      "releases_from_tags": true,
      "days_since_last_push": 7,
      "active_weeks_last_year": 7,
      "days_since_latest_release": 24,
      "mean_days_between_releases": 247
    },
    "community": {
      "has_readme": false,
      "has_license": false,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": null,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/filipowm/terraform-provider-unifi",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": false,
          "registry_url": "https://pkg.go.dev/github.com/filipowm/terraform-provider-unifi",
          "is_deprecated": false,
          "latest_version": "v1.1.0",
          "repository_url": "https://github.com/filipowm/terraform-provider-unifi",
          "versions_count": 3,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-02T19:32:07Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 24
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 69885,
      "source_files_sampled": 182,
      "oversized_source_files": 2,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 3594
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/apparentlymart/go-cidr",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.1"
        },
        {
          "name": "github.com/biter777/countries",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.7.5"
        },
        {
          "name": "github.com/deckarep/golang-set/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.9.0"
        },
        {
          "name": "github.com/filipowm/go-unifi/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.3.0"
        },
        {
          "name": "github.com/hashicorp/go-cty",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.0"
        },
        {
          "name": "github.com/hashicorp/go-version",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.9.0"
        },
        {
          "name": "github.com/hashicorp/terraform-plugin-docs",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.25.0"
        },
        {
          "name": "github.com/hashicorp/terraform-plugin-framework",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.19.0"
        },
        {
          "name": "github.com/hashicorp/terraform-plugin-framework-validators",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.19.0"
        },
        {
          "name": "github.com/hashicorp/terraform-plugin-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.31.0"
        },
        {
          "name": "github.com/hashicorp/terraform-plugin-log",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.10.0"
        },
        {
          "name": "github.com/hashicorp/terraform-plugin-mux",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.23.1"
        },
        {
          "name": "github.com/hashicorp/terraform-plugin-sdk/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.40.1"
        },
        {
          "name": "github.com/hashicorp/terraform-plugin-testing",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.16.0"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/testcontainers/testcontainers-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.43.0"
        },
        {
          "name": "github.com/testcontainers/testcontainers-go/modules/compose",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.43.0"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.53.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 2,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "paultyng",
          "commits": 210,
          "avatar_url": "https://avatars.githubusercontent.com/u/422474?v=4"
        },
        {
          "type": "User",
          "login": "filipowm",
          "commits": 96,
          "avatar_url": "https://avatars.githubusercontent.com/u/20795389?v=4"
        },
        {
          "type": "User",
          "login": "joshuaspence",
          "commits": 58,
          "avatar_url": "https://avatars.githubusercontent.com/u/234676?v=4"
        },
        {
          "type": "User",
          "login": "kurtmc",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/2661907?v=4"
        },
        {
          "type": "User",
          "login": "ziporah",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/3773929?v=4"
        },
        {
          "type": "User",
          "login": "jamestoyer",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/380725?v=4"
        },
        {
          "type": "User",
          "login": "steverice",
          "commits": 7,
          "avatar_url": "https://avatars.githubusercontent.com/u/1423851?v=4"
        },
        {
          "type": "User",
          "login": "cgerling",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/13140497?v=4"
        },
        {
          "type": "User",
          "login": "MaienM",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/583129?v=4"
        },
        {
          "type": "User",
          "login": "Tommi2Day",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/6551445?v=4"
        }
      ],
      "contributors_sampled": 33,
      "top_contributor_share": 0.476
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "acctest.yml",
        "ci.yaml",
        "conventional-release.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yaml"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 8 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 10,
            "reason": "all dependencies are pinned",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "11 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "70cc40ccebfacb3167de023059d7e82ebde01316",
        "ran_at": "2026-07-27T12:29:30Z",
        "aggregate_score": 3.9,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-26T14:29:36Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/cgerling/terraform-provider-unifi",
    "host": "github.com",
    "name": "terraform-provider-unifi",
    "owner": "cgerling"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 46,
      "inputs": {
        "security": 39,
        "vitality": 63,
        "community": 12,
        "governance": 40,
        "engineering": 69
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 63,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "commits_last_year": 59,
              "human_commit_share": 0.85,
              "days_since_last_push": 7,
              "active_weeks_last_year": 7
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "7/52 weeks with commits",
                "points": 4.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "59 commits in the last year",
                "points": 16,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 59
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "releases_count": 3,
              "latest_release_tag": "v1.1.0",
              "releases_from_tags": true,
              "days_since_latest_release": 24,
              "mean_days_between_releases": 247
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "3 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 24 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 24
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~247 days",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 247
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 12,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": false,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MPL-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MPL-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 40,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 33,
              "top_contributor_share": 0.476
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "2 contributor(s) cover half of all commits",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 48% of commits",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 48
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "33 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 33
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 8 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 55,
            "inputs": {
              "followers": 52,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "cgerling",
              "public_repos": 21,
              "account_age_days": 4043
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "52 followers of cgerling",
                "points": 12.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 52,
                      "login": "cgerling"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "21 public repos, account ~11 yr old",
                "points": 21.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 21
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 69,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "4 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yaml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yaml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": "https://registry.terraform.io/providers/filipowm/unifi/latest/docs",
              "has_readme": false,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://registry.terraform.io/providers/filipowm/unifi/latest/docs",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 39,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 39,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 3.9
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 8 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "11 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 13
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "excellent",
        "name": "AI Readiness",
        "value": 86,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.976,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 3594
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "83 of 85 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 83,
                      "sampled": 85
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "excellent",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.36,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0.15
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yaml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yaml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "36 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 36,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "15 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 15,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 69885,
              "source_files_sampled": 182,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/182 source files over 60KB",
                "points": 54.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 182,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Community profile unavailable",
    "go package 'github.com/filipowm/terraform-provider-unifi' points at a different repository (https://github.com/filipowm/terraform-provider-unifi); excluded from ecosystem scoring",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T12:29:46.480246Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/cgerling/terraform-provider-unifi.svg",
  "full_name": "cgerling/terraform-provider-unifi",
  "license_state": "standard",
  "license_spdx": "MPL-2.0"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo.