公开记录
软件健康报告模式 0.27.0 · 指标 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.

未检测到许可证★ 44 星标⑂ 36 复刻始于 2013年5月已归档在 GitHub 上查看 ↗

openstack-archive/cookbook-openstack-identity 的健康指数为 100 分中的 12 分,处于「危急」区间。 其得分最高的类别是Sustainability & Governance(50/100),最低的是Vitality(13/100)。 该仓库已归档,预计不会再有维护。

12
总分 / 100
危急

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

12
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

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

所有权

23 关注者1,273 个公开仓库始于 2020年4月

该仓库由组织支持——共同承担、可问责的托管责任,可延续于任何单一维护者之后。

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

13危急 · 占总体的 22%
评分方式
0/36推送新近度 — 最近一次推送于 885 天前
0/36提交节奏 — 52 周中有 0 周有提交
0/18提交量 — 最近一年 0 次提交
0/10OpenSSF Scorecard:Maintained — project is archived
所用输入
commits_last_year0
human_commit_share1
days_since_last_push885
active_weeks_last_year0

发布纪律

32存在风险
评分方式
16.2/27有发布版本 — 5 个版本标签(无 GitHub 发布版本)
0/36发布时效 — 最近一次发布版本于 1,589 天前
12.6/27发布节奏 — 约每 206.9 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count5
latest_release_tagv20.0.0
releases_from_tags
days_since_latest_release1,589
mean_days_between_releases206.9
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

32存在风险 · 占总体的 18%

流行度与采用

39存在风险
评分方式
26.5/60星标 — 44 个星标
12.9/25复刻 — 36 个复刻
0/15关注者 — 0 位关注者
所用输入
forks36
stars44
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

25危急
评分方式
22.5/22.5README
0/22.5许可证 — 未检测到许可证文件
0/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

50中等 · 占总体的 24%
评分方式
36/54巴士系数 — 3 位贡献者贡献了半数提交
18/22.5提交分布 — 头号贡献者编写了 20% 的提交
13.5/13.5贡献者广度 — 44 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 12 contributing companies or organizations
所用输入
bus_factor3
contributors_sampled44
top_contributor_share0.198
评分方式
0/46.8议题解决 — 没有议题或无数据
0/38.3PR 接受 — 已裁定的 PR 中 0/4 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs4
已排除计分(无数据或不适用):议题解决。 其余权重已重新归一化。
评分方式
30/30所有权背书 — 组织持有
0/20已验证域名
9.9/25所有者影响力 — openstack-archive 有 23 位关注者
25/25既往记录 — 1,273 个公开仓库,账户约 6 年
所用输入
followers23
owner_typeOrganization
is_verified
owner_loginopenstack-archive
public_repos1,273
account_age_days2,303

工程质量

基础的工程与文档实践是否到位?

23危急 · 占总体的 20%
评分方式
0/24CI 工作流
0/24存在测试
0/16Linter 配置
0/9.6Pre-commit 钩子
0/6.4.editorconfig
0/20OpenSSF Scorecard:CI-Tests — 无数据
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config
已排除计分(无数据或不适用):OpenSSF Scorecard:CI-Tests。 其余权重已重新归一化。

文档

55中等
评分方式
30/30README
0/25文档目录
15/15文档 / 主页站点 — https://opendev.org/openstack/cookbook-openstack-identity
10/10仓库描述
0/10主题标签
0/10Wiki
所用输入
topics
has_wiki
homepagehttps://opendev.org/openstack/cookbook-openstack-identity
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

26危急 · 占总体的 16%

安全态势

26危急
评分方式
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 — 无数据
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 — 无数据
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5许可证 — license file not detected
0/7.5Maintained — project is archived
0/5Packaging — 无数据
0/5Pinned-Dependencies — 无数据
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — 无数据
0/7.5Token-Permissions — 无数据
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2.6
已排除计分(无数据或不适用):ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions。 其余权重已重新归一化。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

16危急 · 占总体的 0%
评分方式
0/45代理指令 — 没有 CLAUDE.md / AGENTS.md / 编辑器规则
0/15机器可读文档(llms.txt)
37.3/40可读的提交历史 — 100 次人类提交中有 70 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.7
agent_instruction_files
agent_instruction_max_bytes
评分方式
0/18一条命令的引导启动
0/22自动化测试
0/11Lint / 格式化配置
0/11静态类型检查
0/10可复现环境
0/10已体现的代理实践 — 最近 100 次提交中没有代理编写的提交
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — 无数据
所用输入
has_nix
has_tests
lockfiles
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
已排除计分(无数据或不适用):OpenSSF Scorecard:Pinned-Dependencies。 其余权重已重新归一化。

关键数据

44GitHub 星标
44贡献者
0最近 12 个月提交数
885距最近推送天数
5发布版本数
3巴士系数(bus factor)
0开放议题
软件包生态系统数

数据采集警告

  • 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

更多细节

Star 与 Fork 历史 0 ★ / 36 ⇿
0Star
36Fork
3发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

01325383532013-052016-122020-07
主版本 2次版本 1修订 0

每个点涵盖 7 天。

OpenSSF Scorecard 2.6 / 10
2.6综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。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
不适用CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 12 contributing companies or organizations
不适用Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
0Maintainedproject is archived
不适用Packagingpackaging workflow not detected
不适用Pinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
不适用Signed-Releasesno releases found
不适用Token-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
全部依赖 未采集

本报告未能采集到解析后的依赖集合:GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

原始 JSON 报告 机器可读
{
  "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
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.27.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计.