Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-23 22:50 UTC

openstack-archive / cookbook-openstack-identity

RETIRED, Chef Cookbook - OpenStack Identity. Mirror of code maintained at opendev.org.

No license detected★ 44 stars⑂ 36 forkssince May 2013archivedView on GitHub ↗

openstack-archive/cookbook-openstack-identity holds a health index of 12 out of 100, placing it in the Critical band. It scores highest on Sustainability & Governance (50/100) and lowest on Vitality (13/100). The repository is archived, so no further maintenance is expected.

12
overall / 100
Critical

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

12
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Abandonment Policy applies a 40% multiplier to weighted overall health and gives it a ceiling of 29.

Ownership

23 followers1,273 public repossince Apr 2020

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

13Critical · 22% of overall
How it's scored
0/36Push recency — last push 885 days ago
0/36Commit cadence — 0/52 weeks with commits
0/18Commit volume — 0 commits in the last year
0/10OpenSSF Scorecard: Maintained — project is archived
Inputs used
commits_last_year0
human_commit_share1
days_since_last_push885
active_weeks_last_year0
How it's scored
16.2/27Ships releases — 5 version tags (no GitHub releases)
0/36Release recency — latest release 1,589 days ago
12.6/27Release cadence — a release every ~206.9 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count5
latest_release_tagv20.0.0
releases_from_tagsyes
days_since_latest_release1,589
mean_days_between_releases206.9
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

32At risk · 18% of overall
How it's scored
26.5/60Stars — 44 stars
12.9/25Forks — 36 forks
0/15Watchers — 0 watchers
Inputs used
forks36
stars44
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
0/22.5License — no license file detected
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

50Moderate · 24% of overall
How it's scored
36/54Bus factor — 3 contributor(s) cover half of all commits
18/22.5Commit distribution — top contributor authored 20% of commits
13.5/13.5Contributor breadth — 44 contributors
10/10OpenSSF Scorecard: Contributors — project has 12 contributing companies or organizations
Inputs used
bus_factor3
contributors_sampled44
top_contributor_share0.198
How it's scored
0/46.8Issue resolution — no issues or no data
0/38.3PR acceptance — 0/4 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs4
Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
9.9/25Owner reach — 23 followers of openstack-archive
25/25Track record — 1,273 public repos, account ~6 yr old
Inputs used
followers23
owner_typeOrganization
is_verified
owner_loginopenstack-archive
public_repos1,273
account_age_days2,303

Engineering Quality

Are baseline engineering and documentation practices in place?

23Critical · 20% of overall
How it's scored
0/24CI workflows
0/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_cino
has_testsno
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.

Documentation

55Moderate
How it's scored
30/30README
0/25Documentation directory
15/15Documentation / homepage site — https://opendev.org/openstack/cookbook-openstack-identity
10/10Repository description
0/10Topics
0/10Wiki
Inputs used
topics
has_wikino
homepagehttps://opendev.org/openstack/cookbook-openstack-identity
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

26Critical · 16% of overall
How it's scored
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 — no data
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 12 contributing companies or organizations
0/10Dangerous-Workflow — no data
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5License — license file not detected
0/7.5Maintained — project is archived
0/5Packaging — no data
0/5Pinned-Dependencies — no data
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — no data
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2.6
Excluded from scoring (no data or not applicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Remaining weights renormalized.

AI Readiness

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.

16Critical · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
37.3/40Legible commit history — 70 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.7
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
0/22Automated tests
0/11Lint / format config
0/11Static type checking
0/10Reproducible environment
0/10Demonstrated agent practice — no agent-authored commits among the last 100
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — no data
Inputs used
has_nixno
has_testsno
lockfiles
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.

Key facts

44GitHub stars
44contributors
0commits, last 12 months
885days since last push
5releases
3bus factor
0open issues
package ecosystems

Data collection warnings

  • Language breakdown unavailable
  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

More detail

Star and fork history 0 ★ / 36 ⇿
0Stars
36Forks
3Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

01325383532013-052016-122020-07
Major 2Minor 1Patch 0

Each point covers 7 days.

OpenSSF Scorecard 2.6 / 10
2.6aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-23 22:49 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/aCI-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 12 contributing companies or organizations
n/aDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
0Maintainedproject is archived
n/aPackagingpackaging workflow not detected
n/aPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
n/aToken-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 891,
      "has_wiki": false,
      "homepage": "https://opendev.org/openstack/cookbook-openstack-identity",
      "languages": {},
      "pushed_at": "2024-02-19T18:30:19Z",
      "created_at": "2013-05-08T20:04:52Z",
      "owner_type": "Organization",
      "updated_at": "2024-03-05T03:03:59Z",
      "description": "RETIRED, Chef Cookbook - OpenStack Identity. Mirror of code maintained at opendev.org.",
      "is_archived": true,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "master",
      "license_spdx_raw": null,
      "primary_language": null,
      "significant_languages": []
    },
    "owner": {
      "blog": "https://opendev.org/openstack",
      "name": "Archived previously-OpenStack repositories",
      "type": "Organization",
      "login": "openstack-archive",
      "company": null,
      "location": null,
      "followers": 23,
      "avatar_url": "https://avatars.githubusercontent.com/u/63051644?v=4",
      "created_at": "2020-04-02T12:04:30Z",
      "is_verified": null,
      "public_repos": 1273,
      "account_age_days": 2303
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v20.0.0",
          "kind": "major",
          "published_at": "2022-03-17T22:49:15Z"
        },
        {
          "tag": "v19.1.1",
          "kind": "patch",
          "published_at": "2021-07-19T21:44:14Z"
        },
        {
          "tag": "v19.1.0",
          "kind": "minor",
          "published_at": "2020-05-20T23:45:22Z"
        },
        {
          "tag": "v19.0.0",
          "kind": "major",
          "published_at": "2020-05-20T23:45:22Z"
        },
        {
          "tag": "v18.0.0",
          "kind": "major",
          "published_at": "2019-12-11T12:16:49Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "44d13c8c6421d123a51e70562a5e43f4018b66de",
          "body": "OpenStack-chef project is retiring\n- https://review.opendev.org/c/openstack/governance/+/905279\n\nthis commit remove the content of this project repo\n\nDepends-On: https://review.opendev.org/c/openstack/project-config/+/909134\nChange-Id: Ida0639315944c8c7852ec37fb10f133e8ab9c455",
          "is_bot": false,
          "headline": "Retire openstack-chef: remove repo content",
          "author_name": "Ghanshyam Mann",
          "author_login": null,
          "committed_at": "2024-02-18T04:50:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f052ede42bab11320fefcafd8e3565269cc00dfb",
          "body": "- Update package names\n- Migrate to using apache2_mod_wsgi resource and require apache2 ~> 8.6\n- Update ChefSpec\n\nDepends-On: https://review.opendev.org/c/openstack/cookbook-openstack-ops-database/+/815139\nDepends-On: https://review.opendev.org/c/openstack/cookbook-openstack-ops-messaging/+/815137\nDepends-On: https://review.opendev.org/c/openstack/cookbook-openstack-integration-test/+/815171\nChange-Id: Ib21c5b2dbd13aa57de926e71db62d042374cabd4\nSigned-off-by: Lance Albertson <lance@osuosl.org>",
          "is_bot": false,
          "headline": "CentOS 8 support",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2021-10-22T23:31:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e76dcb39e181a9c6432e5a16c5b8cc074a93e9db",
          "body": "- Require Chef >= 16.0\n- Remove bind from Berksfile\n- Update copyright years\n\nDepends-On: https://review.opendev.org/c/openstack/cookbook-openstackclient/+/813953\nDepends-On: https://review.opendev.org/c/openstack/cookbook-openstack-ops-database/+/814032\nDepends-On: https://review.opendev.org/c/openstack/cookbook-openstack-ops-messaging/+/814035\nChange-Id: I5d4f38f56e5a411b83b02d2fd9fff2e013947d71\nSigned-off-by: Lance Albertson <lance@osuosl.org>",
          "is_bot": false,
          "headline": "Chef 17 support",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2021-10-14T18:57:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f70a3454c5e6a4826245be68450c017e01767ab7",
          "body": "Since at least Debian 9 (Stretch) the name of the relevant site has been\n'wsgi-keystone' rather than 'keystone'. Then again, as of 21.04 Ubuntu\ncontinues to use the old site name.\n\nTha relevant attribute is also set for RHEL so that recipe validation\ndoesn't fail due to missing resource name, even though the resource in\nquestion is currently guarded by 'if platform_family?(\"debian\")'.\n\nSigned-off-by: Marek Szuba <m.szuba@gsi.de>\nChange-Id: I34b342d0b51cd5e11b1e5de95578ac47939895f9",
          "is_bot": false,
          "headline": "Make the name of default Keystone site for Apache2 a platform option",
          "author_name": "Marek Szuba",
          "author_login": null,
          "committed_at": "2021-07-20T22:14:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5211ab38f015315d3297d0664d8ad8058a36548",
          "body": "…ttribute \"ca_revocation_path\"\n\nAlso set SSLCARevocationCheck alongside SSLCARevocationPath, all one\ngets by setting only the latter is warnings in Apache logs.\n\nNote: with Apache 2.3.15 or newer enabling revocation checks causes\ncertificate validation to fail also when no CRLs for the given certifi\n[…]\napache.org/docs/2.4/mod/mod_ssl.html#sslcarevocationcheck\n\nCo-authored-by: Marek Szuba <m.szuba@gsi.de>\nSigned-off-by: Marek Szuba <m.szuba@gsi.de>\nChange-Id: Ic64249ba32d43877f9ef0325e7156e0d15622a69",
          "is_bot": false,
          "headline": "Possibility to set SSLCARevocationPath for keystone as chef default a…",
          "author_name": "Karim El Aammari",
          "author_login": "kelaamm",
          "committed_at": "2021-07-20T12:26:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "114b459cadb24c870cbcc8e8ffcf590083a32ebd",
          "body": "Also pull bind cookbook from git to fix version pinning issues.\n\nChange-Id: I9bd4f54d9d10e9f3aba98a297213304507b9967d\nSigned-off-by: Lance Albertson <lance@osuosl.org>",
          "is_bot": false,
          "headline": "Moving IRC network reference to OFTC",
          "author_name": "Ghanshyam Mann",
          "author_login": null,
          "committed_at": "2021-07-15T18:11:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f40cfe1d8b4ed6598d068ee6b0686ba6ae3dfcb",
          "body": "- Cookstyle fixes\n\nDepends-On: https://review.opendev.org/c/openstack/openstack-chef/+/779389\nChange-Id: Ib044399cb7fd28cbb874cb08f1a87ca376518e6f\nSigned-off-by: Lance Albertson <lance@osuosl.org>",
          "is_bot": false,
          "headline": "Update to Chef Workstation 21.2.303",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2021-03-09T00:15:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ed88a8ff48d003931a6c20c49e876ab12160e9c",
          "body": "Update ChefSpec due to changes made in apache2 cookbook.\n\nDepends-On: https://review.opendev.org/756168\nChange-Id: Ie4a830620f217f5879ae4270850214902c202dbf\nSigned-off-by: Lance Albertson <lance@osuosl.org>",
          "is_bot": false,
          "headline": "Cookstyle 6.19.5 fixes",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2020-10-06T00:13:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a45f9e60a51b942dae855ab0356953bf84f3292",
          "body": "Depends-On: https://review.opendev.org/740342\nDepends-On: https://review.opendev.org/747542\nDepends-On: https://review.opendev.org/747554\nDepends-On: https://review.opendev.org/747555\nChange-Id: I4ad921b46ee476d9e866303e33be7b8803cdff98\nSigned-off-by: Lance Albertson <lance@osuosl.org>",
          "is_bot": false,
          "headline": "Chef 16 updates",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2020-08-28T00:20:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "368296c9e50d10e626b6e64316ef0962fc2e22e7",
          "body": "Changed:\n- Update release to train\n- Update to apache2 ~> 8.1\n\nFixed:\n- Cookstyle\n- ChefSpec\n\nRemoved:\n- Unused .rubocop.yml\n\nChange-Id: I2dc8c767ac4f6bb0635ffa4a64d6e8e47fc29093\nDepends-On: https://review.opendev.org/731850\nDepends-On: https://review.opendev.org/731851\nDepends-On: https://review.opendev.org/731855\nDepends-On: https://review.opendev.org/731858",
          "is_bot": false,
          "headline": "Updates for Train",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2020-06-09T16:58:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c49dedfbcd3fb35864f10bba9cce814dbaf1a5e5",
          "body": "- Cookstyle fixes\n- Refactor Berksfile to use groups so we can exclude integration testing\n  cookbooks\n- Update documentation\n- Enable sensitive resources for template[/etc/keystone/keystone.conf]\n  and execute[bootstrap_keystone] to improve security.\n- Update delivery configuration to exclude integ\n[…]\nrg/706101\nDepends-On: https://review.opendev.org/706140\nDepends-On: https://review.opendev.org/706147\nDepends-On: https://review.opendev.org/706158\nChange-Id: I6c5005b23ee209650911146e373c4cf082cbee9e",
          "is_bot": false,
          "headline": "Stein fixes",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2020-03-23T16:58:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "453ab3bb95bb6a3c23f70352eea5529d88dacaec",
          "body": "This brings us up to date with the latest apache2 cookbook which\nincluded a major refactor in 6.0.0 removing all of the definitions and\nrecipe with proper resources. Instead of using the apache2_default_site\nresource, directly use a template and then enable the config file using\nthe apache2_site res\n[…]\n as we no longer have attributes for it\n- Include additional cookbooks in Berksfile required for CI\n\nDepends-On: https://review.opendev.org/702772\n\nChange-Id: I717247217523e89251e4c0bead0c1a0d114ade2a",
          "is_bot": false,
          "headline": "Update to apache2 ~> 8.0 cookbook",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2020-01-30T17:28:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "21255e36b4d930a69e50707c6f66c25fd1fadfb6",
          "body": "I've run into this issue on systems that already have python2-urllib3\ninstalled, but it's older than what gets installed from the RDO\nrepository and breaks the db sync for keystone. By adding it here, that\nwill ensure it's always upgraded before we try running db sync.\n\nChange-Id: If876315001c8136fad654d7408ec9f656ef48775",
          "is_bot": false,
          "headline": "Upgrade python2-urllib3 on CentOS",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2020-01-23T00:05:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6d377db3efaa40646efdc57582f1e8af9e761e1",
          "body": "Change-Id: Icabebd997591b7208c92aa0a01f066d87c0f1b84",
          "is_bot": false,
          "headline": "Use Ubuntu 18.04 for ChefSpec tests",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2020-01-06T19:44:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d3d0b2f9c43984794c02d0b2ceb33717b25f12c",
          "body": "This updates all references of let(:chef_run) to cached(:chef_run) to\nspeed up tests. By doing this, we have to create a new cached(:chef_run)\nblock whenever we need to adjust node attributes for testing.\n\nIn addition:\n\n- Add missing ChefSpec tests for cloud_config and _credential_tokens\n  recipes\n\nChange-Id: I9f3b86de8f7aa97a5954b2e0f564452e1897a6e3",
          "is_bot": false,
          "headline": "Improve ChefSpec test speed by enabling caching",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2019-12-18T02:59:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b571b3c44487cc18c3bb06502a6c58fe07899fa0",
          "body": "- Replace git.openstack.org with opendev.org\n- Update some documentation\n- Move README.md to README.rst for better rendering\n- Drop obsolete bootstrap.sh script\n- Drop obsolete default recipe\n\nChange-Id: I7894951c9ac0bbd00007da5face15e9418880bc4",
          "is_bot": false,
          "headline": "Updates for rocky",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2019-12-06T19:19:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87d4d2ed4075153e09c4e11105571b209ae76de9",
          "body": "Python2.7 is going EOL soon, let us deploy python3 for Rocky from the\nstart, so we avoid having to switch later.\n\nAlso update Berksfile to allow dependency testing and require chef >= 14 now.\n\nChange-Id: Id4c06c8fc136ae3cde97e751373049db989de21e",
          "is_bot": false,
          "headline": "Use python3 packages on Ubuntu",
          "author_name": "Jens Harbott",
          "author_login": "jharbott",
          "committed_at": "2019-11-26T10:46:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65e61a916ddc039c2fd571fdc3470d169034cc56",
          "body": "Change-Id: Ib8f7bf2608b06178388b91fc7b90460896bce416",
          "is_bot": false,
          "headline": "Replace git.openstack.org with opendev.org",
          "author_name": "inspurericzhang",
          "author_login": "jndatawave",
          "committed_at": "2019-11-19T09:47:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1649fd84263084913301173d5c75bfaaa07ccd16",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Add a cloud_config recipe\"",
          "author_name": "Zuul",
          "author_login": null,
          "committed_at": "2019-09-10T09:43:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2902385efe0358cddae5f9619b1b2fe12a2531f",
          "body": "Using a cloud config file when accessing a cloud is the modern variant\nof setting lots of environment variables, so we add a new recipe that\nproduces a cloud config matching what we are deploying.\n\nClean up the old openrc template a bit.\n\nChange-Id: I8574d9f4299be5b2a374140b461ef48e9e80ae6b",
          "is_bot": false,
          "headline": "Add a cloud_config recipe",
          "author_name": "Jens Harbott",
          "author_login": "jharbott",
          "committed_at": "2019-08-30T14:29:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c2bfb4990b0c99a844624022b2ed4a57b37e4d3",
          "body": "This uses edit_resource to add a notification in the identity apache\nconfiguration when it gets updated. This is a workaround due to the fact\nwe are using a version of the apache2 cookbook that is still using\ndefinitions and cannot add notifications with definitions.\n\nThis is intended to ensure we o\n[…]\n in the Stein release when we migrate to the newer\napache2 cookbook which uses proper resources.\n\nChange-Id: I13de063d1e7ffd356d754eb0f2d8286a3c694836\nSigned-off-by: Lance Albertson <lance@osuosl.org>",
          "is_bot": false,
          "headline": "Properly notify apache restarts on keystone configuration updates",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2019-07-08T02:10:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "df72871ac839a7cea73ee427bc8ea7c456615a7a",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Fixes to support fog-openstack-1.x\"",
          "author_name": "Zuul",
          "author_login": null,
          "committed_at": "2019-07-05T08:37:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9a1116736811d85ceb837fc27669f628dbf67b8",
          "body": "If the chef-client fails between keystone package installation and the\ndisabling of the default keystone config file from UCA package, then\napache2 may end up with conflicting site configurations trying to bind\nto the same port.\n\nbackport: stable/queens\n\nChange-Id: Ib52a4d5195f9ef8d7caa8478c8293fe894624ee5",
          "is_bot": false,
          "headline": "Disable UCA keystone apache2 site early",
          "author_name": "Roger Luethi",
          "author_login": "ideaship",
          "committed_at": "2019-07-05T06:39:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b185a5205d7cb9262b593c7c5f82514be6bdb772",
          "body": "fog-openstack-1.x already appends \"auth/tokens\" so we no longer need to\ndo that.  In addition, comment out endpoint type until this PR [1] gets\nmerged and released.\n\n[1] https://github.com/fog/fog-openstack/pull/494\n\nDepends-On: https://review.opendev.org/666176\nChange-Id: I2a73e87648bff58180c6ee2355a733a8e030fa4b\nSigned-off-by: Lance Albertson <lance@osuosl.org>",
          "is_bot": false,
          "headline": "Fixes to support fog-openstack-1.x",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2019-07-03T23:03:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8a2a909b0b6c623370cb8ea09130adc8dae2d5a",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Drop admin endpoints\"",
          "author_name": "Zuul",
          "author_login": null,
          "committed_at": "2019-05-06T12:09:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ad3f2ec044d5166523d0003123803bd1dd444b3",
          "body": "This commit was bulk generated and pushed by the OpenDev sysadmins\nas a part of the Git hosting and code review systems migration\ndetailed in these mailing list posts:\n\nhttp://lists.openstack.org/pipermail/openstack-discuss/2019-March/003603.html\nhttp://lists.openstack.org/pipermail/openstack-discus\n[…]\npattern matching, but it's possible some\nwere updated incorrectly or missed entirely. Please reach out to us\nvia the contact information listed at https://opendev.org/ with any\nquestions you may have.",
          "is_bot": false,
          "headline": "OpenDev Migration Patch",
          "author_name": "OpenDev Sysadmins",
          "author_login": null,
          "committed_at": "2019-04-19T19:36:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "284d54be798a3cdea0f1745f22e39a0cc0db2a0f",
          "body": "The admin endpoints offer no special functionality, users may talk to\nthe public endpoints instead. The only historic use case has been the\nkeystone v2 admin endpoint, but with keystone v3 API, even that is no\nlonger needed, except that it's use is hardcoded in keystonemiddleware.\nSo we prepare ever\n[…]\n052\nDepends-On: https://review.openstack.org/652064\nDepends-On: https://review.openstack.org/652098\nDepends-On: https://review.openstack.org/652589\nChange-Id: Iddfae1c2cb29217cd9aae89d56bc65fa935fcd28",
          "is_bot": false,
          "headline": "Drop admin endpoints",
          "author_name": "Jens Harbott",
          "author_login": "jharbott",
          "committed_at": "2019-04-18T11:06:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "90fd9ccf5997f109753c4e6563e1b979233e80c0",
          "body": "This is in preparation of dropping the admin endpoint, we need this\nattribute in place first so we can reference it in other cookbooks.\n\nChange-Id: Idee227f26fcc74412873c5afd02dfcce32145ea7",
          "is_bot": false,
          "headline": "Add endpoint_type attribute defaulting to internalURL",
          "author_name": "Jens Harbott",
          "author_login": "jharbott",
          "committed_at": "2019-04-15T08:17:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4313c5711f0b5f2b8cc6262c59a2c2b7f5d00984",
          "body": "This was only half-working anyway since we moved to keystone V3, so we\nshould just drop it. If someone wants to configure their deployment with\nit, they can easily set up a wrapper for it.\n\nChange-Id: Ifdf96502d18895e3b79dfa235fd102b42a0f4bc3",
          "is_bot": false,
          "headline": "Drop support for a templated catalog",
          "author_name": "Jens Harbott",
          "author_login": "jharbott",
          "committed_at": "2019-04-04T12:49:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af1d3b1485d041d868537aa2bdccf5c25eba40b8",
          "body": "Setting the keystone option [auth]/methods by default blocks additions\nlike application_credential that was newly added to Keystone in Queens.\nLet's stick to Keystone's defaults instead, deployments can override\nthese settings if they need to.\n\nAlso drop some even older version of these attributes that haven't been\nused at all anymore for some time.\n\nChange-Id: I10b31efe1e94fc69cda65e2f7fb7a669afb166ba",
          "is_bot": false,
          "headline": "Stop overriding auth methods",
          "author_name": "Jens Harbott",
          "author_login": "jharbott",
          "committed_at": "2019-03-01T09:15:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eabbbb9b5c5b25f59aefcec3addaa770e91c714b",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Pin apache2 cookbook to 5.0.1\"",
          "author_name": "Zuul",
          "author_login": null,
          "committed_at": "2018-12-11T13:54:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f6d02faf17776135c756e6b4f277f230814fec9",
          "body": "This change eliminates a kitchen failure with apache2-5.2.1\n\nChange-Id: Ida4e1c4a166a0baac4937e088b42f22a8ab524ab",
          "is_bot": false,
          "headline": "Pin apache2 cookbook to 5.0.1",
          "author_name": "Samuel Cassiba",
          "author_login": null,
          "committed_at": "2018-12-11T05:14:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87747401c27202b3599190fcae60eeaa7da47828",
          "body": "Change-Id: I11d837c702f2122570f568d47f64696977bb8547",
          "is_bot": false,
          "headline": "Change openstack-dev to openstack-discuss",
          "author_name": "ZhijunWei",
          "author_login": "weizj",
          "committed_at": "2018-12-05T04:21:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d139297cf905d6eca5638baf52a37db1da24509d",
          "body": "Change-Id: Ie3c70574ccd44d39e72ea59098741b77ed7cb08c",
          "is_bot": false,
          "headline": "Update the URL in README.md",
          "author_name": "melissaml",
          "author_login": null,
          "committed_at": "2018-09-23T09:26:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05a1bee419e0e78ac1e9b56f3462be97eb2f9b7b",
          "body": "Change-Id: Ie1ba251712f38ffc6539d3d00c4a6806f75538ce",
          "is_bot": false,
          "headline": "Rename openstack-chef-repo references to openstack-chef",
          "author_name": "Samuel Cassiba",
          "author_login": null,
          "committed_at": "2018-08-07T04:49:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3410066ae1082e0fb6bb685174b63feea5cc396c",
          "body": "Depends-On: Ia24eef700ab6c7fe359a17070981dc93e0300a18\nDepends-On: I75d827d383f701da8650cd0e9d1f2501e22cf6a2\nChange-Id: Id835cbf8fc8cf2dc32a3ecdfffb17b01547fb0db",
          "is_bot": false,
          "headline": "starting rocky development patch",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2018-08-03T13:40:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e30e2cf418d4f5cf4cf806bf0e937055e30e31af",
          "body": "Finish the removal of creating an admin endpoint for keystone. This was\nstarted in [0] but some fragments were still remaining.\n\nAt the same time the option to create an internal identity endpoint that\nis different from the public one is reintroduced.\n\n[0] I01d44e48053cad7aeb92636f4b41649204006c93\n\nChange-Id: Id74966d9f1279f725bc41c08e434230a7845bbc1",
          "is_bot": false,
          "headline": "Fixup keystone endpoint handling",
          "author_name": "Jens Harbott",
          "author_login": "jharbott",
          "committed_at": "2018-07-16T19:24:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41b3463312360c5b65c8d287052591fee0a45be8",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Simplify identity endpoint\"",
          "author_name": "Zuul",
          "author_login": null,
          "committed_at": "2018-07-03T06:31:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7657e34edadfccf0d85081f6507f6591119eec4f",
          "body": "Per the Keystone Install Guide[1] the admin endpoint is superseded in\nfavor of a single public endpoint. As a result, the admin endpoint is no\nlonger deployed by default.\n\n[1] https://docs.openstack.org/keystone/queens/install/keystone-install-ubuntu.html#install-and-configure-components\n\nDepends-On\n[…]\nn: I06d0f98e641a041ddc864f524858edc0cffbbbba\nDepends-On: Ied0fb46ae8c10273fde31691b910dc2748845faf\nChange-Id: I01d44e48053cad7aeb92636f4b41649204006c93\nImplements: blueprint simplify-identity-endpoint",
          "is_bot": false,
          "headline": "Simplify identity endpoint",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2018-06-28T23:24:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7d8b8b5c271caf0a67a96adf4ca926800ab4f90d",
          "body": "In order to avoid errors when deploying multiple controller nodes, we\nneed to deploy credential-tokens from data bags just like we already do\nfor fernet-tokens. Otherwise each controller would use a different set\nof tokens generated locally.\n\nDrop the corresponding calls to keystone-manage, as they are a) not\nidempotent and b) generate files that are never used anyway.\n\nDepends-On: Icf0a8f644ddbfa61bfef124a772663e8af4e1f16\nChange-Id: Idabc34d101d9fb145a205acedf8f652ebec3ad9f",
          "is_bot": false,
          "headline": "Fix token handling for keystone",
          "author_name": "Jens Harbott",
          "author_login": "jharbott",
          "committed_at": "2018-06-28T12:58:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e9d7c9966d5c3d16ef6b366fd0e9261f8cbc43b",
          "body": "We define these variables from the corresponding node attributes, use\nthen instead of accessing the node attributes afterwards.\n\nChange-Id: I1215d24f341e0ae37b7e0be978578aa2985e4af1",
          "is_bot": false,
          "headline": "Use variables keystone_user and keystone_group",
          "author_name": "Jens Harbott",
          "author_login": "jharbott",
          "committed_at": "2018-06-28T12:58:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df5472c9c8b4316b20a11777be12d6705ececebd",
          "body": "Change-Id: Ia10c3c30f4c4e024f64b9a08f8b0d5213e3f5302\nImplements: blueprint deprecate-rakefiles",
          "is_bot": false,
          "headline": "Add delivery config",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2018-04-12T05:24:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aff741a327dd6082cdead59bee2214468a3eb3c6",
          "body": "* rename keystone-main to keystone-public to better align with Keystone\n  conventions[0]\n\n[0] https://review.openstack.org/194442\n\nChange-Id: I98a5d41b4de3a3d7ef680d00ac898c93c5bc2a41",
          "is_bot": false,
          "headline": "Rename keystone-main service",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2018-03-23T13:51:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a781e6c11fbe2d4171f19bb0e32eafc5496f007a",
          "body": "* use git.openstack.org instead of github for berks dependency\nresolution\n\nChange-Id: Icddbddfae5ec075c9c113287135a02bad48144e7",
          "is_bot": false,
          "headline": "starting queens development patch and use git.openstack.org",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2018-03-06T12:01:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c607a3fb20ab6b033047b089a7a8fbafdc6e84c",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Zuul: Remove project name\"",
          "author_name": "Zuul",
          "author_login": null,
          "committed_at": "2018-02-14T18:51:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23884c6b52ab007af0ab36776a7dbd9bac4f8c4a",
          "body": "Change-Id: I07fb6f7f668a4ea0c04a149c8f8cb94e739468d8\nImplements: blueprint modern-chef",
          "is_bot": false,
          "headline": "Removed deprecated postgres test",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2018-02-07T15:42:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db5eb09a26c2bf296ecf6a24cd5a18ace477ccd0",
          "body": "Zuul no longer requires the project-name for in-repo configuration.\nOmitting it makes forking or renaming projects easier.\n\nChange-Id: I680e12ba32a72d56536de04f542900dface4aeda",
          "is_bot": false,
          "headline": "Zuul: Remove project name",
          "author_name": "James E. Blair",
          "author_login": null,
          "committed_at": "2018-02-05T21:58:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d407581474092a7147b3056648f0567ce3081e96",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"identity refactor for Pike and Chef 13\"",
          "author_name": "Zuul",
          "author_login": null,
          "committed_at": "2017-12-22T21:35:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ba453b9f521a47f46e350ea210033d3e2785cd8",
          "body": "- implemented foodcritic and cookstyle corrections\n- deprecated node.foo.bar method access for node['foo']['bar'] bracket syntax\n- moved apt package_overrides to common cookbook\n\nImplements blueprint modern-chef\n\nChange-Id: I9ab420186b2f93cfc7fcc7be7c406a3176a991e1",
          "is_bot": false,
          "headline": "identity refactor for Pike and Chef 13",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2017-12-11T04:04:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b13ee78385bfa45c251cdff914bbbd7f197ba294",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Add native zuul v3 jobs defined in openstack-chef-repo\"",
          "author_name": "Zuul",
          "author_login": null,
          "committed_at": "2017-11-30T16:58:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13022392740b7d4dd3105c0c5664fd3c0cbca74a",
          "body": "The step that ran keystone-manage credential_setup has been removed\nas \"deprecated\" with the \"Initial identity Pike updates\" [1].\n\nHowever, the Pike CLI documentation for keystone-manage does not\nindicate that the command is deprecated [2] and the install-guide\ncontinues to use it [3].\n\nAlso, I got \n[…]\nb3a)\n[2] https://docs.openstack.org/keystone/pike/cli/index.html\n[3] https://docs.openstack.org/keystone/pike/install/keystone-install-ubuntu.html\n\nChange-Id: Iad5afd70ab99d968a6546bd19e5e5831a8299a49",
          "is_bot": false,
          "headline": "Re-add keystone-manage credential_setup",
          "author_name": "Roger Luethi",
          "author_login": "ideaship",
          "committed_at": "2017-11-02T12:52:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8ea88f33ab4e9a4ccc629c366bffa3004152f815",
          "body": "Change-Id: I1bee1117dfd4187a9391d826f6cc7f8ac2aba936",
          "is_bot": false,
          "headline": "Add native zuul v3 jobs defined in openstack-chef-repo",
          "author_name": "Jens Harbott",
          "author_login": "jharbott",
          "committed_at": "2017-11-02T10:35:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbbc525cc43d2435c7a038dbc41b7c283aef3d64",
          "body": "Other cookbooks have switched to using the node attribute\nhttps://github.com/openstack/cookbook-openstack-common/blob/master/attributes/default.rb#L292\nUsing platform_family breaks with chef-client 13.x\n\nCloses-Bug: #1724987\n\nChange-Id: I02fcb5d9403210d913e85487de5ef0dae6066bdc",
          "is_bot": false,
          "headline": "Use the attribute instead of method to get platform_family",
          "author_name": "Arun S A G",
          "author_login": "sagarun",
          "committed_at": "2017-10-19T21:23:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a8b6424ba06f9a86917969837aff38d7ae8c690",
          "body": "Change-Id: I5481547214c7a96b64f3a183f494e3807c1c7735\nCloses-Bug: #1719861",
          "is_bot": false,
          "headline": "make fernet key file resource sensitive",
          "author_name": "Stefan Hoffmann",
          "author_login": "mrhopeman",
          "committed_at": "2017-09-27T12:43:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a66540d8157507ea9fde456241fc5c613ad7afb9",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"use variable fernet-key data bag\"",
          "author_name": "Jenkins",
          "author_login": null,
          "committed_at": "2017-09-22T21:15:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79e57bd7999b6df72c2094275e763e71b266f204",
          "body": "instead of hard coded vault name the attribute\n['openstack']['secret']['secrets_data_bag'] is used.\n\nChange-Id: I286fbfe89395544d1f8d0139acca0d689e4737fa\nCloses-Bug: #1714523",
          "is_bot": false,
          "headline": "use variable fernet-key data bag",
          "author_name": "Stefan Hoffmann",
          "author_login": "mrhopeman",
          "committed_at": "2017-09-19T07:55:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1961a12a43ec8ee2d39e1633616c1126c9e391fc",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Initial identity Pike updates\"",
          "author_name": "Jenkins",
          "author_login": null,
          "committed_at": "2017-09-13T14:07:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "995fe07550f34423d2b5f406f53ec8df182ef5a8",
          "body": "- the original invocation of keystone-manage bootstrap was in the wrong recipe,\n  so it needed to be moved to server-apache for resource ordering. restored the\n  original flags used\n- regen .rubocop_todo.yml to pass rubocop\n\nCloses-Bug: #1714510\nChange-Id: I9d3916e7f306d4c0463ec93cad40d2e78bd7eed8",
          "is_bot": false,
          "headline": "Corrected keystone bootstrapping command",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2017-09-01T14:14:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5279aa4fbc6e2885e86954105237c94d71890f20",
          "body": "- Switched default linter to cookstyle\n- Renamed rake tasks to better conform with Chef conventions\n- Removed deprecated credential_setup\n\nChange-Id: I518ed83f7e19c590e7846160889faf46db274b3a",
          "is_bot": false,
          "headline": "Initial identity Pike updates",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2017-08-31T03:57:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "275c12c3a614df47feac20bb853b55d393b24556",
          "body": "We now only support fernet tokens, for which token flushing is no longer\nneeded, see [1]. So we drop the corresponding cron job and the\nattributes to configure it. This also gets rid of the error messages\nwhich it is currently producing.\n\n[1] https://docs.openstack.org/security-guide/identity/tokens.html#fernet-tokens\n\nChange-Id: Ia5fe5f5d0c98ca0a77f03478edfe1777e0a89612",
          "is_bot": false,
          "headline": "Drop token-flush cronjob",
          "author_name": "Jens Harbott",
          "author_login": "jharbott",
          "committed_at": "2017-08-21T12:26:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "862bfdd7c46f7f90d7ccc06ad372940f86c15b16",
          "body": "Change-Id: I638c23934c209d2074256f3f30129cf426e34ae0",
          "is_bot": false,
          "headline": "starting pike development patch",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2017-08-17T12:19:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a967c291ac7291f2a8b4e688cf44caa48c125b9",
          "body": "- Keystone config updates for Ocata\n- Style and lint fixes to support newer chefdk\n- Rewrote metadata.rb for readability\n\nChange-Id: Ie1d5f27a9cf8803044568a31e4dae7654b02c9a1",
          "is_bot": false,
          "headline": "Keystone config updates for Ocata, style and lint fixes",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2017-08-02T06:17:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "150c363d68ad467f9a537aadf18418f0d80f342e",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"add new Chef OpenStack Team Logo to README\"",
          "author_name": "Jenkins",
          "author_login": null,
          "committed_at": "2017-05-29T23:56:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0a5cfbd1e89c129ba2e3bc98cddb96c92560015",
          "body": "Change-Id: I9a0d3760f2579c5475d202d4894867c8bba42e77",
          "is_bot": false,
          "headline": "add new Chef OpenStack Team Logo to README",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2017-05-29T08:53:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36d484e3011314841c8ac9ccffe1086de0e2ea40",
          "body": "- corrects SELinux enablement for Keystone, as RHEL comes with SELinux\n  enabled by default.\n- removes executable bit from metadata.rb\n\nChange-Id: I97e73bcc0d4721283067e41b988bccb1ddf6c031",
          "is_bot": false,
          "headline": "Corrects SELinux enablement",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2017-04-04T13:58:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f83bc81674e8d1a2e99b16f1fd9aedfc2478e532",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Fixup Identity service deployment for Ocata\"",
          "author_name": "Jenkins",
          "author_login": null,
          "committed_at": "2017-04-01T14:59:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8b8302aaefa9a28aac8c344010784db78ce7b88",
          "body": "- Remove recipe for PKI tokens as they have been dropped from keystone\n- Use Fernet tokens unconditionally\n- Cleanup paste deployment according to keystone changes in Ocata\n\nChange-Id: I28c27caacc09a3e46eca135a6c4f5a841f4715f9",
          "is_bot": false,
          "headline": "Fixup Identity service deployment for Ocata",
          "author_name": "Jens Rosenboom",
          "author_login": null,
          "committed_at": "2017-03-10T10:47:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41dd09a0a72bcf52a54125d318caefc8586987c7",
          "body": "Project specific URLs are obsolete, use docs.openstack.org - and use\nhttps for that site.\n\nChange-Id: I149eec4340711ce46bd38188818db75946d0e67f",
          "is_bot": false,
          "headline": "Replace obsolete vanity openstack.org URLs",
          "author_name": "Andreas Jaeger",
          "author_login": "ajaeger",
          "committed_at": "2017-03-08T18:40:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae02664362e71d5124bad982bfb0c7c37df13cc5",
          "body": "Change-Id: I0fe3039cf46cd415b8ece73aec00e3603da793d9",
          "is_bot": false,
          "headline": "starting ocata development patch",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2017-02-23T16:06:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bb86dd4ce7cd7b795ffa4b9c36d5a3a15150f74",
          "body": "The use of the keystone_wsgi_file that we copy in order to create our\nkeystone apps is deprecated and the file will be removed for Ocata.\n\nSo we switch to using the variant provided by upstream instead.\n\nChange-Id: I8970d4ee9692fd13d52b2304ff3a1ae93b693500",
          "is_bot": false,
          "headline": "Fix wsgi app creation",
          "author_name": "Jens Rosenboom",
          "author_login": null,
          "committed_at": "2017-02-21T10:55:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f858e3678ced8ab3b35879233e18da659c265dc",
          "body": "- removed deprecated rabbitmq attributes\n- added rabbit_transport_url\n\nChange-Id: I0ca0fcc1e261eeadb76c9355a0f14499085d9bda",
          "is_bot": false,
          "headline": "RPC_backend / transport_url workover",
          "author_name": "Christoph Albers",
          "author_login": null,
          "committed_at": "2016-12-20T11:45:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9b6b2661672fefb8dd334fdbcead5b7023a76af",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Deprecated python-keystoneclient\"",
          "author_name": "Jenkins",
          "author_login": null,
          "committed_at": "2016-12-20T11:01:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1cccaa0842d77a2be11f378a4c03a574c5caea9d",
          "body": "- deleted client.rb\n- deprecated python-keystoneclient references\n\nImplements blueprint newton-xenial\n\nChange-Id: Ia1406308a9c78a0361cd0e2e0844f0e7a3cf4b9f",
          "is_bot": false,
          "headline": "Deprecated python-keystoneclient",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2016-12-15T04:11:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f8ba8fda6de41f4ee8ee76badf198d98a1bcb28",
          "body": "* added a small ruby block with a loop to check if the keystonen admin\n  endpoint is up before trying to register projects, users etc.\n* will wait 60 seconds for admin endpoint to become ready and raise\n  error specific exception otherwise if Timeout::Error was raised\n\nChange-Id: Ief678b0f40685e91ced9bddde95b916f4587b330",
          "is_bot": false,
          "headline": "Wait for identity endpoint instead of sleeping",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2016-12-13T13:55:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ade1b23af8133d46eded96263eaf78e27a0cc6b6",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"update cookbook dependencies for next release\"",
          "author_name": "Jenkins",
          "author_login": null,
          "committed_at": "2016-12-08T07:50:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b35a881b934e3a90e529af20e3c4fed4761ff4d",
          "body": "Depends-On: Ib256c315d5439beb8d4ec83c5cc7d7c9b182378a\nChange-Id: Ic6b00a08ec29a9a7c04a72c743af5f756db45edf",
          "is_bot": false,
          "headline": "update cookbook dependencies for next release",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2016-12-05T11:32:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0dd8100a2a18fb3d5919c3659aea2f1ff23e220f",
          "body": "This patch adds the team's and repository's badges to the README file.\nThe motivation behind this is to communicate the project status and\nfeatures at first glance.\n\nFor more information about this effort, please read this email thread:\n\nhttp://lists.openstack.org/pipermail/openstack-dev/2016-October/105562.html\n\nTo see an example of how this would look like check:\n\nhttps://gist.github.com/9be741f3b667eb4e72f7e97648335f16\n\nChange-Id: I6eea8331ec2cab9605314401b5cfceb5e13c3e1e",
          "is_bot": false,
          "headline": "Show team and repo badges on README",
          "author_name": "Flavio Percoco",
          "author_login": "flaper87",
          "committed_at": "2016-11-26T10:52:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4dcd956337e523a89e19756e4971b3c33f84a4ff",
          "body": "- Removed v2 support\n- Workover Endpoint creation\n  Identity Endpoints now will be bootstrapped\n- Removed bootstrap_token\n- Added domain_creation\n- Edited openrc to work with itendity_v3\n- changed \"tenant\"-naming to project\n- Removed unused files and functions\n  providers/register.rb\n  spec/register\n[…]\n/machters.rb\n- rewrote specs\n- updated readme\n- added apache_site disable keystone since\n  ubuntu auto-enables it\n- bumbed ubuntu version to 16.04\n\nChange-Id: I0f8955f05de9b33711c54b9a198f45018cceb8e1",
          "is_bot": false,
          "headline": "use_cookbook-openstackclient/identity_v3",
          "author_name": "Christoph Albers",
          "author_login": null,
          "committed_at": "2016-09-29T15:52:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "07518048675a66ba4858864205c5bd208f07b11b",
          "body": "Some cert providers require an chain cert file so this allows for this option.\nIn addition, I added tests for SSL that were missing for the apache vhost file.\n\nChange-Id: Ib3c6cf82f6afb8a79952745d8fb2116a05f59c39",
          "is_bot": false,
          "headline": "Include option to set SSLCertificateChainFile",
          "author_name": "Lance Albertson",
          "author_login": "ramereth",
          "committed_at": "2016-08-13T19:36:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae8f0ec57a204b10a0d76d4feae29ff0b4bc3e7b",
          "body": "The attribute is set false by default as documented here:\nhttp://docs.openstack.org/mitaka/config-reference/identity/options.html\n\nChange-Id: I5b7bc37f08f30014468317b55eaab7a431fb58cb",
          "is_bot": false,
          "headline": "Removes unneeded default attribute",
          "author_name": "Hendrik Frese",
          "author_login": null,
          "committed_at": "2016-07-28T13:05:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6b72c41058eff5d7945e468a78beec243a4a41d",
          "body": "Change-Id: I34e4c7b29ff7c36c91245d90fb0b6897847cd22f\nDepends-On: I6ce4587caa3ae68ddbd3ef1a521aaf46f4840b2c",
          "is_bot": false,
          "headline": "Style and lint fixes to support newer ChefDK",
          "author_name": "Samuel Cassiba",
          "author_login": "sbcas",
          "committed_at": "2016-07-02T03:22:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6208a34946f2a1585a9e0ba010f6d255fb3a2093",
          "body": "Change-Id: I2e9c4e159076df49dae5d5cae2e64afa5835373b",
          "is_bot": false,
          "headline": "initial commit for the newton development cycle",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2016-05-31T08:31:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fda2a0d5b7eee32c1b04e45d328f24a6940b7fc",
          "body": "* added a lot of inline comments for attributes, recipes and provider\n* updated README to the current state of the cookbook\n\nChange-Id: Ic7b7ae6d26ce56e2237fe3215aff9ab447946b48",
          "is_bot": false,
          "headline": "Documenation update after refactoring",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2016-04-27T21:12:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24757760b3b18ee0a64f17ffc1be7b432bfeeedf",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Remove default apache port\"",
          "author_name": "Jenkins",
          "author_login": null,
          "committed_at": "2016-04-11T07:47:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27c46d645080a770d46913f068bc23662c50a659",
          "body": "The default apache port overlaps with horizon, but\nuses a different address syntax, *:80  vs 0.0.0.0:80.\nThis causes apache2 to sometimes fail on startup with\nAddress already in use: AH00072: make_sock: could not bind to address [::]:80\n\nChange-Id: Ib45393b0244dd4cffb440c84c614ba9a104df105",
          "is_bot": false,
          "headline": "Remove default apache port",
          "author_name": "Mark Vanderwiel",
          "author_login": "kramvan1",
          "committed_at": "2016-04-08T16:18:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8a54c8e56a9b507e30700cdac870bbe4606d4a0",
          "body": "The option \"verbose\" in the [DEFAULT] section is deprecated, it's\ndefault value would be false anyway.\n\nChange-Id: Ib7809425ca5c1651cd7642f3a6cf56cb7f6444aa",
          "is_bot": false,
          "headline": "Remove the deprecated \"verbose\" option",
          "author_name": "Jens Rosenboom",
          "author_login": null,
          "committed_at": "2016-04-08T15:02:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbea65b625d9937ced5ddde9c7f304c1928ef236",
          "body": "Version 3.2.0 of the apache2 cookbook was released, update our\ndependency so that we are compatible with the other openstack\ncookbooks and berkshelf resolution can succeed. Drop the reference to\nthe github version.\n\nChange-Id: I55110726ee846f579849ea039a759ef1a0ad9bff",
          "is_bot": false,
          "headline": "Update dependency for apache2 cookbook",
          "author_name": "Jens Rosenboom",
          "author_login": null,
          "committed_at": "2016-03-29T14:50:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "340e9f2f48998b8c2c2dcec9ee047a61888d8b56",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Fixup identity backend handling\"",
          "author_name": "Jenkins",
          "author_login": null,
          "committed_at": "2016-03-07T16:16:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52d8000c1acdb61b46ff45900ea31508850435ff",
          "body": "Instead of creating an artificial, non-functional identity-internal\nendpoint use the identity-main backend that is provided via the default\nconfig for both public and internal endpoints.\n\nChange-Id: Ia7d7f11108f0945ccd944d7e4a5c7f7ef68bc654",
          "is_bot": false,
          "headline": "Fixup identity backend handling",
          "author_name": "Jens Rosenboom",
          "author_login": null,
          "committed_at": "2016-03-03T18:49:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe6e4adb6b140cd02e3cd937f4d0212e96be3f64",
          "body": "On recent test machines, curl isn't available anymore, so use wget\ninstead. Piping directly into bash isn't that great anyway.\n\nChange-Id: I7faa2a67e9233ed68e16e25cd24afe2120df6cda",
          "is_bot": false,
          "headline": "Fix bootstrap.sh",
          "author_name": "Jens Rosenboom",
          "author_login": null,
          "committed_at": "2016-03-03T18:38:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0271eb1711ef6716a2f00f2e7df06835101169bc",
          "body": "* the apache2 cookbook got patched recently and now uses an array of\n  \"ipaddress:port\" to define where apache2 should listen\n\nDepends-On: I7304932c19398c2bd245bbb7cbad6df4f487047e\nChange-Id: Id91fb812ba91dab2803c68d24adaddbe0fde7a5e",
          "is_bot": false,
          "headline": "use Array for apache2 listen attributes",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2016-03-03T13:26:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d47ebc4e527feb6ea90272c9981e599ddbe93f91",
          "body": "* use the bind_address method from common to get address for keystone\n\nWIP specs and deps missing\n\nChange-Id: I206c8cbab66dbeb708947cc9b95c8ecfdf6c2c14",
          "is_bot": false,
          "headline": "use new bind_address method from common",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2016-02-24T15:42:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6585d611cb93579c1b33431411c82126b3a90096",
          "body": "* added recipe for fernet_tokens (recipes/_fernet_tokens.rb)\n* moved pki setup to seperate recipe (recipes/_pki_tokens.rb)\n* included fernet or pki tokens recipe based on auth strategy attibute\n* adapted spec accordingly and added specs for fernet_tokens\n\nChange-Id: I37af3e8e5d4b93e0de7f4ef2d999a05573eefc26",
          "is_bot": false,
          "headline": "add fernet tokens as optional token deployment method",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2016-02-24T15:41:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a26d528b5e34c79d8a7bdf60c5f58199f5b86bba",
          "body": "* endpoint type (admin, internal, public) and service (identitiy, network etc.)\n  was switched during refactoring, this patch reverts this unintended switching\n\nChange-Id: Ia5bddfc5e2fd77cd6e9e855c680b079f78fc1c3f\nDepends-On: Iec485deaf415e4187a323435cce2b6bbadfc5d42",
          "is_bot": false,
          "headline": "invert the order of endpoint and bind_service attributes",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2016-02-12T17:38:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3f18966ea3a01885a1f031b7ccab046325fce09",
          "body": "* added new logic into templates/default/keystone.conf.erb\n* refactored attributes throughout all recipes that were connected to\n  the attributes used for the keystone.conf.erb template to adapt the new\n  template attribute syntax\n* moved all attributes from attributes/default.rb that were used in\n \n[…]\nocop_todo.yaml conaining all remaining exceptions\n\nChange-Id: I3262b2e6f792f37c32a446e6567790b82bdd4613\nImplements: blueprint cookbook-refactoring\nDepends-On: I0547182085eed91d05384fdd7734408a839a9a2c",
          "is_bot": false,
          "headline": "refactoring final step",
          "author_name": "Jan Klare",
          "author_login": null,
          "committed_at": "2016-02-08T09:17:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "98030c26e065f39c545db48bc36414a15e9bd83d",
          "body": "The current hack just does a apache reload, but a full\nrestart is required on centos.\n\nChange-Id: I1deb415bc6f8d035775c9bd723ae8b2207c333e6\nCloses-Bug: #1512480",
          "is_bot": false,
          "headline": "Fix centos keystone-apache timeout",
          "author_name": "Mark Vanderwiel",
          "author_login": "kramvan1",
          "committed_at": "2015-11-04T18:55:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b8a8f89492d11e9fb2bf4ffc1733d4a0f09b095",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"Use keystone.wsgi instead of wsgi.py for RHEL/CentOS\"",
          "author_name": "Jenkins",
          "author_login": null,
          "committed_at": "2015-10-30T01:47:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3fbc1bd092f3c0372bfd5430b6d74037c086f641",
          "body": "Add missing gate integration task, but use the one from\nCommon cookbook to make future updates easy.\n\nChange-Id: I03c54dc3284715edd79207cd158b7f9fb0be3bcd",
          "is_bot": false,
          "headline": "Add integration task",
          "author_name": "Mark Vanderwiel",
          "author_login": "kramvan1",
          "committed_at": "2015-10-06T14:47:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f178a00b84b59ef04139ebff96888214db585f72",
          "body": "Change-Id: I6bddae9fc83a5fc133e43a27e96e1a7110c94cfb\nPartial-Bug: #1501064",
          "is_bot": false,
          "headline": "Sync keystone paste.ini with liberty changes",
          "author_name": "Mark Vanderwiel",
          "author_login": "kramvan1",
          "committed_at": "2015-09-29T21:48:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eae4ded65dd4c2a5c4b47ebb93826ffe3b24bdfb",
          "body": "Change-Id: I5a8e83a6238374afde42a6f5d896fc211fb49dce\nCloses-Bug: #1491479",
          "is_bot": false,
          "headline": "Use keystone.wsgi instead of wsgi.py for RHEL/CentOS",
          "author_name": "Samuel Cassiba",
          "author_login": null,
          "committed_at": "2015-09-02T15:52:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 5,
      "commits_last_year": 0,
      "latest_release_at": "2022-03-17T22:49:15Z",
      "latest_release_tag": "v20.0.0",
      "releases_from_tags": true,
      "days_since_last_push": 885,
      "active_weeks_last_year": 0,
      "days_since_latest_release": 1589,
      "mean_days_between_releases": 206.9
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 25,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 36,
      "stars": 44,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2013-05-14",
            "count": 1
          },
          {
            "date": "2013-07-08",
            "count": 1
          },
          {
            "date": "2013-07-23",
            "count": 1
          },
          {
            "date": "2013-08-22",
            "count": 1
          },
          {
            "date": "2013-10-12",
            "count": 1
          },
          {
            "date": "2014-01-13",
            "count": 1
          },
          {
            "date": "2014-01-17",
            "count": 1
          },
          {
            "date": "2014-01-23",
            "count": 1
          },
          {
            "date": "2014-05-12",
            "count": 1
          },
          {
            "date": "2014-05-14",
            "count": 1
          },
          {
            "date": "2014-05-28",
            "count": 1
          },
          {
            "date": "2014-05-29",
            "count": 1
          },
          {
            "date": "2014-05-30",
            "count": 1
          },
          {
            "date": "2014-06-30",
            "count": 1
          },
          {
            "date": "2014-08-04",
            "count": 1
          },
          {
            "date": "2014-08-18",
            "count": 1
          },
          {
            "date": "2014-09-06",
            "count": 1
          },
          {
            "date": "2014-11-25",
            "count": 1
          },
          {
            "date": "2014-12-03",
            "count": 1
          },
          {
            "date": "2015-01-16",
            "count": 1
          },
          {
            "date": "2015-04-02",
            "count": 1
          },
          {
            "date": "2015-04-07",
            "count": 1
          },
          {
            "date": "2015-05-21",
            "count": 1
          },
          {
            "date": "2015-07-24",
            "count": 1
          },
          {
            "date": "2015-09-09",
            "count": 1
          },
          {
            "date": "2015-11-03",
            "count": 1
          },
          {
            "date": "2016-02-19",
            "count": 1
          },
          {
            "date": "2016-02-29",
            "count": 1
          },
          {
            "date": "2016-04-15",
            "count": 1
          },
          {
            "date": "2016-06-23",
            "count": 1
          },
          {
            "date": "2017-06-14",
            "count": 1
          },
          {
            "date": "2017-07-27",
            "count": 1
          },
          {
            "date": "2018-02-08",
            "count": 1
          },
          {
            "date": "2018-05-22",
            "count": 1
          },
          {
            "date": "2020-07-13",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 35,
        "total_forks": 36
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": null,
      "source_files_sampled": 0,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [],
      "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": [],
      "dependencies": [],
      "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": 4
      },
      "bus_factor": 3,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "jaypipes",
          "commits": 67,
          "avatar_url": "https://avatars.githubusercontent.com/u/265023?v=4"
        },
        {
          "type": "User",
          "login": "retr0h",
          "commits": 65,
          "avatar_url": "https://avatars.githubusercontent.com/u/9895?v=4"
        },
        {
          "type": "User",
          "login": "kramvan1",
          "commits": 47,
          "avatar_url": "https://avatars.githubusercontent.com/u/5861591?v=4"
        },
        {
          "type": "User",
          "login": "iartarisi",
          "commits": 25,
          "avatar_url": "https://avatars.githubusercontent.com/u/35473?v=4"
        },
        {
          "type": "User",
          "login": "mattray",
          "commits": 21,
          "avatar_url": "https://avatars.githubusercontent.com/u/330023?v=4"
        },
        {
          "type": "User",
          "login": "ramereth",
          "commits": 15,
          "avatar_url": "https://avatars.githubusercontent.com/u/48997?v=4"
        },
        {
          "type": "User",
          "login": "sbcas",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/791892?v=4"
        },
        {
          "type": "User",
          "login": "UshF",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/947919?v=4"
        },
        {
          "type": "User",
          "login": "jharbott",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/3973691?v=4"
        },
        {
          "type": "User",
          "login": "mattt416",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/16207?v=4"
        }
      ],
      "contributors_sampled": 44,
      "top_contributor_share": 0.198
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": false,
      "ci_workflows": [],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "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 12 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no 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": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project is archived",
            "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": null,
            "reason": "no dependencies found",
            "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": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "44d13c8c6421d123a51e70562a5e43f4018b66de",
        "ran_at": "2026-07-23T22:49:46Z",
        "aggregate_score": 2.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/openstack-archive/cookbook-openstack-identity",
    "host": "github.com",
    "name": "cookbook-openstack-identity",
    "owner": "openstack-archive"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "critical",
      "name": "Overall health",
      "note": "Abandonment Policy applies a 40% multiplier to weighted overall health and gives it a ceiling of 29.",
      "notes": [
        {
          "code": "abandonment_overall_adjustment",
          "params": {
            "cap": 29,
            "pct": 40
          }
        }
      ],
      "value": 12,
      "inputs": {
        "security": 26,
        "vitality": 13,
        "community": 32,
        "governance": 50,
        "engineering": 23,
        "abandonment_cap": 29,
        "abandonment_state": "declared",
        "abandonment_multiplier": 40,
        "weighted_overall_before_abandonment": 29,
        "overall_after_abandonment_multiplier": 12
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "critical",
        "name": "Vitality",
        "value": 13,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "critical",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "commits_last_year": 0,
              "human_commit_share": 1,
              "days_since_last_push": 885,
              "active_weeks_last_year": 0
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 885 days ago",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 885
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "0/52 weeks with commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "0 commits in the last year",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project is archived",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "at_risk",
            "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": 32,
            "inputs": {
              "releases_count": 5,
              "latest_release_tag": "v20.0.0",
              "releases_from_tags": true,
              "days_since_latest_release": 1589,
              "mean_days_between_releases": 206.9
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "5 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 1589 days ago",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 1589
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~206.9 days",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 206.9
                    }
                  }
                ],
                "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": "at_risk",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "cap": 29,
              "state": "declared",
              "guards": [],
              "signals": [],
              "red_flag": true,
              "multiplier_pct": 40,
              "declared_reason": "archived",
              "unverified_reason": null,
              "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": "the repository is archived on GitHub",
                "points": 40,
                "status": "partial",
                "details": [
                  {
                    "code": "abandonment_archived",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 32,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 39,
            "inputs": {
              "forks": 36,
              "stars": 44,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "44 stars",
                "points": 26.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 44
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "36 forks",
                "points": 12.9,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 36
                    }
                  }
                ],
                "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": true,
              "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": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "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": "moderate",
        "name": "Sustainability & Governance",
        "value": 50,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "good",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "bus_factor": 3,
              "contributors_sampled": 44,
              "top_contributor_share": 0.198
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "3 contributor(s) cover half of all commits",
                "points": 36,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 20% of commits",
                "points": 18,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 20
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "44 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 44
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 12 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. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 4
            },
            "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": "0/4 decided PRs merged",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 0,
                      "decided": 4
                    }
                  }
                ],
                "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": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "followers": 23,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "openstack-archive",
              "public_repos": 1273,
              "account_age_days": 2303
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "23 followers of openstack-archive",
                "points": 9.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 23,
                      "login": "openstack-archive"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1273 public repos, account ~6 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1273
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "critical",
        "name": "Engineering Quality",
        "value": 23,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "critical",
            "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": 1,
            "inputs": {
              "has_ci": false,
              "has_tests": false,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 0,
                "status": "missed",
                "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": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": "https://opendev.org/openstack/cookbook-openstack-identity",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://opendev.org/openstack/cookbook-openstack-identity",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "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": "critical",
        "name": "Security",
        "value": 26,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 26,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 2.6
            },
            "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 12 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project is archived",
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "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": 12
            },
            "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": "critical",
        "name": "AI Readiness",
        "value": 16,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 37,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.7,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "70 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 37.3,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 70,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "critical",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "has_nix": false,
              "has_tests": false,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          }
        ],
        "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": [
    "Language breakdown unavailable",
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T22:50:01.067197Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/openstack-archive/cookbook-openstack-identity.svg",
  "full_name": "openstack-archive/cookbook-openstack-identity",
  "license_state": "absent",
  "license_spdx": null
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statistics.