From 6371b6f85778746db8ced68d827b2347a819511e Mon Sep 17 00:00:00 2001 From: Patrice Chalin Date: Thu, 16 Apr 2026 23:01:59 -0400 Subject: [PATCH] Publish analyses in Docus, fix links, rewrite cross-plugin links Signed-off-by: Patrice Chalin --- .htmltest.yml | 13 +- .markdownlintignore | 10 + README.md | 14 +- analyses/2021/contour/analysis.md | 2 + analyses/2021/fluxcd/analysis.md | 2 + analyses/2021/krator/analysis.md | 2 + .../2021/kubernetes-gateway-api/analysis.md | 5 +- analyses/2021/notary/analysis.md | 2 + analyses/2021/tremor/analysis.md | 2 + analyses/2023/backstage/backstage-analysis.md | 84 +- .../backstage/backstage-implementation.md | 56 +- analyses/2023/backstage/backstage-issues.md | 2 + analyses/2023/backstage/user-roles.md | 2 + analyses/2023/etcd/etcd-analysis.md | 100 +- analyses/2023/etcd/etcd-issues.md | 2 + analyses/2023/in-toto/in-toto-analysis.md | 2 + analyses/2023/in-toto/in-toto-doc-issues.md | 2 + .../2023/in-toto/in-toto-implementation.md | 2 + analyses/2023/porter/analysis.md | 2 +- analyses/2024/keda/keda-analysis.md | 98 +- analyses/2024/keda/keda-implementation.md | 70 +- analyses/2024/keda/keda-issues.md | 52 +- analyses/2025/helm/helm-analysis.md | 12 +- analyses/2025/helm/helm-implementation.md | 3 +- analyses/2025/helm/helm-issues-list.md | 3 +- analyses/2025/knative/analysis.md | 4 +- analyses/2025/knative/issues.md | 2 +- analyses/2025/vitess/analysis.md | 10 +- analyses/2026/flatcar/analysis.md | 27 +- docs/analysis/templates/analysis.md | 8 +- docs/localization/ja/index.md | 14 +- docusaurus.config.ts | 53 +- lib/getBuildContext.ts | 29 + lib/getCurrentBranch.ts | 22 + lib/getGitHubRepoUrl.ts | 33 + lib/remarkRewriteLinks/README.md | 75 + lib/remarkRewriteLinks/index.test.mts | 197 ++ lib/remarkRewriteLinks/index.ts | 149 ++ package-lock.json | 108 +- package.json | 11 +- sidebarsAnalyses.ts | 7 + static/refcache.json | 2020 ++++++++++++++++- tsconfig.json | 3 +- 43 files changed, 2897 insertions(+), 419 deletions(-) create mode 100644 .markdownlintignore create mode 100644 lib/getBuildContext.ts create mode 100644 lib/getCurrentBranch.ts create mode 100644 lib/getGitHubRepoUrl.ts create mode 100644 lib/remarkRewriteLinks/README.md create mode 100644 lib/remarkRewriteLinks/index.test.mts create mode 100644 lib/remarkRewriteLinks/index.ts create mode 100644 sidebarsAnalyses.ts diff --git a/.htmltest.yml b/.htmltest.yml index 46e52b86..128bc970 100644 --- a/.htmltest.yml +++ b/.htmltest.yml @@ -3,13 +3,14 @@ CacheExpires: 4500h # ~ 6 months DirectoryPath: build TestFilesConcurrently: true IgnoreDirs: + # We don't fix broken links on old analysis pages. + # - analyses/202[0-5]/ IgnoreInternalURLs: # list of paths IgnoreURLs: # list of regexes of URLs or path to be ignored - ^https?://localhost - \?no-link-check - - _PROJECT-WEBSITE_ - - _PROJECT-DOC-URL_ - # FIXME: temporary ignore rules - - assistance\.md - - LICENSE - - /analyses/ + # Old analysis pages are not updated. Ignore broken links: + - ^https://(docs|www).tremor.rs/ + - ^https://knative.dev/docs/(concepts|reference|relnotes)/ + - ^https://knative.dev/development/concepts/serving-resources/revisions/ + - ^https://vitess.io/docs/21.0/ diff --git a/.markdownlintignore b/.markdownlintignore new file mode 100644 index 00000000..899d0a77 --- /dev/null +++ b/.markdownlintignore @@ -0,0 +1,10 @@ +# Paths excluded from markdownlint (see `markdownlint --help` → --ignore-path). +# Patterns follow .gitignore semantics (see markdownlint-cli). + +# Dependencies and build output +node_modules/ +build/ +.docusaurus/ + +# Scratch / local +tmp/ diff --git a/README.md b/README.md index ed38a749..1069a33b 100644 --- a/README.md +++ b/README.md @@ -3,15 +3,15 @@ This site contains resources provided by the CNCF Technical Documentation team, including: -- [Docs](docs/) about building websites and developing technical documentation, +- [Docs](/docs/) about building websites and developing technical documentation, including recommended tools, best practices, how-tos, and evaluation checklists. It provides specific guidelines for: - Setting up and maintaining a documentation website. - Writing technical documentation for a project. - Seeking assistance from the CNCF TechDocs community. - - [Analyzing project documentation](docs/analysis/). -- [Analyses](analyses/): a collection of documentation analyses of CNCF projects - performed by the TechDocs team. + - [Analyzing project documentation](/docs/analysis/). +- [Analyses](/analyses/): a collection of documentation analyses of CNCF + projects performed by the TechDocs team. ## TechDocs Q&A @@ -29,7 +29,7 @@ every month at 8am Pacific time][date-time]. The TechDocs team can help CNCF projects analyze and improve their documentation. For details, see the TechDocs -[assistance program](docs/assistance.md). +[assistance program](/docs/assistance.md). ## CNCF TechDocs team @@ -46,8 +46,8 @@ Consultants and volunteers also contribute to CNCF TechDocs efforts. ## Licenses -- Documentation: [CC-BY-4.0](LICENSE) -- Code: [Apache-2.0](LICENSE-CODE) +- Documentation: [CC-BY-4.0](https://github.com/cncf/techdocs/blob/main/LICENSE) +- Code: [Apache-2.0](https://github.com/cncf/techdocs/blob/main/LICENSE-CODE) [date-time]: https://tockify.com/cncf.public.events/monthly?search=CNCF%20Tech%20Writers%20Office%20Hours diff --git a/analyses/2021/contour/analysis.md b/analyses/2021/contour/analysis.md index eca478c6..b6d7c4e4 100644 --- a/analyses/2021/contour/analysis.md +++ b/analyses/2021/contour/analysis.md @@ -4,6 +4,8 @@ tags: [contour] cSpell:ignore: Horgan celestehorgan hashlinks --- + + # Docs assessment ## Introduction diff --git a/analyses/2021/fluxcd/analysis.md b/analyses/2021/fluxcd/analysis.md index f78270e5..84a3a171 100644 --- a/analyses/2021/fluxcd/analysis.md +++ b/analyses/2021/fluxcd/analysis.md @@ -4,6 +4,8 @@ tags: [fluxcd] cSpell:ignore: celestehorgan Horgan --- + + # Assessment template Prepared by: Celeste Horgan diff --git a/analyses/2021/krator/analysis.md b/analyses/2021/krator/analysis.md index f4f72706..128990ee 100644 --- a/analyses/2021/krator/analysis.md +++ b/analyses/2021/krator/analysis.md @@ -4,6 +4,8 @@ tags: [krator] cSpell:ignore: Krator celestehorgan CODEOWNERS --- + + # Krator Docs assessment ## Introduction diff --git a/analyses/2021/kubernetes-gateway-api/analysis.md b/analyses/2021/kubernetes-gateway-api/analysis.md index 372a53d7..759aa693 100644 --- a/analyses/2021/kubernetes-gateway-api/analysis.md +++ b/analyses/2021/kubernetes-gateway-api/analysis.md @@ -4,6 +4,9 @@ tags: [kubernetes-gateway-api] cSpell:ignore: Meha Bhalodiya mehabhalodiya kubernetes --- + + + # Assessment: Project Kubernetes Gateway API Prepared by: Meha Bhalodiya @@ -103,7 +106,7 @@ as well as where to find them. - **Prepared a Miro board: [https://miro.com/app/board/uXjVO_1cS9k=/](https://miro.com/app/board/uXjVO_1cS9k=/)** - ![information_architecture](../docs/images/gapi_info_arch.png) + ![information_architecture](../../../docs/images/gapi_info_arch.png) - There are improvements we could make: - With the collection of guided, step-by-step instructions (tasks, hands-on diff --git a/analyses/2021/notary/analysis.md b/analyses/2021/notary/analysis.md index 76634b1b..9f502eba 100644 --- a/analyses/2021/notary/analysis.md +++ b/analyses/2021/notary/analysis.md @@ -4,6 +4,8 @@ tags: [notary] cSpell:ignore: docset notaryproject celestehorgan --- + + # Notary Project Docs Assessment Date: 2021-07-31 Project: [Notary Project](https://github.com/notaryproject/) diff --git a/analyses/2021/tremor/analysis.md b/analyses/2021/tremor/analysis.md index e84ef354..0b9f7f8a 100644 --- a/analyses/2021/tremor/analysis.md +++ b/analyses/2021/tremor/analysis.md @@ -4,6 +4,8 @@ tags: [tremor] cSpell:ignore: Horgan onramps offramps LLDB Wayfair --- + + # Assessment: Project Tremor Prepared by: Celeste Horgan Date: July 2021 diff --git a/analyses/2023/backstage/backstage-analysis.md b/analyses/2023/backstage/backstage-analysis.md index 281db938..5797d831 100644 --- a/analyses/2023/backstage/backstage-analysis.md +++ b/analyses/2023/backstage/backstage-analysis.md @@ -7,7 +7,9 @@ author: Dave Welsch (@dwelsch-esi) cSpell:ignore: clotributor dwelsch Welsch runbooks WCAG --- -# Introduction + + +## Introduction This document analyzes the effectiveness and completeness of the [Backstage][backstage-io] open source software (OSS) project's documentation and @@ -19,7 +21,7 @@ prerequisite for program graduation. The documentation analysis is the first step of a CNCF process aimed at assisting projects with their documentation efforts. -## Purpose +### Purpose This document was written to analyze the current state of Backstage documentation. It aims to provide project leaders with an informed understanding @@ -32,7 +34,7 @@ This document: - Compares existing documentation against the CNCF’s standards - Recommends a program of key improvements with the largest return on investment -## Scope of analysis +### Scope of analysis The documentation discussed here includes the entire contents of the website (which contains the technical docs), as well as documentation for contributors @@ -58,7 +60,7 @@ Backstage GitHub repo. - Backstage plugins: https://backstage.spotify.com/ -## How this document is organized +### How this document is organized This document is divided into three sections that represent three major areas of concern: @@ -85,7 +87,7 @@ that can be completed in constrained blocks of time. Ultimately, the implementation items should be tracked as a series of Github [issues][backstage-issues]. -## How to use this document +### How to use this document Readers interested only in actionable improvements should skip this document and read [backstage-implementation.md][implementation-doc]. @@ -101,7 +103,7 @@ to their area of concern: Examples of CNCF documentation that demonstrates the analysis criteria are linked from the [Criteria][cncf-doc-criteria] specification. -### Recommendations, requirements, and best practices +#### Recommendations, requirements, and best practices Notwithstanding the fact that this analysis measures documentation against CNCF project maturity standards, in most cases there is more than one way to do @@ -114,7 +116,7 @@ understood as "recommended" or "should" at the strongest, and "optional" or "may" in many cases. Any "must" or "required" actions are clearly denoted as such, and pertain to legal requirements such as copyright and licensing issues. -# Project documentation +## Project documentation | Criteria | 1 | 2 | 3 | 4 | 5 | | -------------------------- | --- | --- | --- | --- | --- | @@ -130,7 +132,7 @@ Scale: - 3 = (Is present, but needs work) - 5 = (Is executed extremely well or no improvement required) -## Comments: project documentation +### Comments: project documentation Backstage is a platform for organizing and managing software projects. This complicates the documentation, because it can be difficult to distinguish among @@ -155,7 +157,7 @@ that documentation should be organized under at least four roles: 3. Extending a Backstage app: DevOp or internal tooling developer. 4. Extending the Backstage platform: contributing developer. -### Overall Issues +#### Overall Issues The main issues with the Backstage documentation are: @@ -178,7 +180,7 @@ Started][backstage-doc-getting-started]. However: The following sections contain brief analyses of each element of the Project Documentation rubric. -### Information architecture +#### Information architecture **Conceptual content** is abundant throughout the Backstage documentation. This is good, because using Backstage effectively requires a thorough understanding @@ -220,7 +222,7 @@ necessary). It's not clear that the documentation is completely **up to date**, although [release notes][backstage-doc-rn] exist and are easily findable. -### New user content +#### New user content **New user** content is present and findable ("**signposted**"), including **installation** instructions for all applicable **OSes**. However, the [Getting @@ -233,7 +235,7 @@ workflow **path** after installation. There is **example content** available, including tutorials for a variety of tasks and a very nice [demo server][backstage-demo]. -### Content maintainability & site mechanics +#### Content maintainability & site mechanics The documentation is **searchable**. There does not seem to be a **localization** framework. There doesn't currently seem to be any kind of @@ -242,7 +244,7 @@ localization effort. There does not seem to be any mechanism for **versioning** documentation content. -### Content creation processes +#### Content creation processes The procedures for duplicating the documentation locally and for contributing documentation are [documented][backstage-microsite] but are [not easily @@ -255,7 +257,7 @@ It would be nice if this situation were made clear explicitly. The website does not have a clear individual **owner or maintainer**. -### Inclusive language +#### Inclusive language I found no content that uses non-recommended words as documented by the [Inclusive Naming Initiative][inclusive-naming] website. @@ -263,14 +265,14 @@ I found no content that uses non-recommended words as documented by the The website makes occasional use of words like "simple" and "easy", but avoids explicitly ableist language. -## Recommendations: project documentation +### Recommendations: project documentation The following sections contain recommendations for improvements to the Backstage project documentation. These recommendations are for broad improvements that would greatly increase documentation effectiveness. For details, see [Implementation][implementation]. -### Clarify user roles and objectives +#### Clarify user roles and objectives Any systemic improvement to the Backstage documentation hinges on clearly defining and documenting user roles. This is a first step in defining any @@ -283,7 +285,7 @@ understanding of how Backstage is used should feel free to modify this list if it serves the needs of the project, keeping in mind that the purpose of the user roles is to organize the task-based documentation. -### Develop instructional documentation +#### Develop instructional documentation Most of the Backstage documentation seems to have evolved from architecture and design documentation. This makes it very rich in conceptual material and @@ -322,7 +324,7 @@ task, or reference. In some cases this will mean that two pages are extracted from a single existing page. Conversely, some pages may prove to be redundant. The new, more focused pages can then be reorganized as described below. -### Reorganize the documentation site +#### Reorganize the documentation site Right now different types of documentation (conceptual/architectural; instructional; reference) for different user roles are intermixed throughout the @@ -348,7 +350,7 @@ help navigate the site. Much of this is automated by the static site generator (currently _Docusaurus_), but it's the writer's responsibility to assure that these navigation aids are adequate. -# Contributor documentation +## Contributor documentation | Criteria | 1 | 2 | 3 | 4 | 5 | | ----------------------------------------- | --- | --- | --- | --- | --- | @@ -363,7 +365,7 @@ Scale: - 3 = (Is present, but needs work) - 5 = (Is executed extremely well or no improvement required) -## Comments: contributor documentation +### Comments: contributor documentation A unique feature of Backstage is that user and contributor roles exist on a spectrum; plugins designed or modified to serve a particular organization can be @@ -373,7 +375,7 @@ contributors is intermingled, and easily confused, with instructions for admin users trying to expand functionality by modifying or adding code, especially plugins. -### Communication methods documented +#### Communication methods documented Communication channels are clearly documented on the [Community][backstage-community] page of the website, including **message @@ -385,7 +387,7 @@ main menu. There are 22 related repositories listed on the [Backstage project page][backstage-github-project]. A little digging is required to suss out the purpose of some of these projects. -### Beginner friendly issue backlog +#### Beginner friendly issue backlog The backlog is robustly **triaged** and documented. A **"good first issue"** label is available and prominently recommended. Issues are **well documented** @@ -394,7 +396,7 @@ with complete descriptions. There are quite a few **stale backlog items** open in the backlog list. Many, perhaps a majority, of these seem to be plugin requests. -### New contributor getting started content +#### New contributor getting started content The Backstage OSS **community** is visible and accessible on a [community page][backstage-community] reached via a top-level menu item on the website. @@ -408,18 +410,18 @@ the Getting Started documentation. Backstage is listed in the [Clotributor][] tool. -### Project governance documentation +#### Project governance documentation Governance is clearly documented in [GOVERNANCE.md][backstage-governance]. -## Recommendations: contributor documentation +### Recommendations: contributor documentation As an open source project, Backstage looks healthy and well run. The only recommendation here is to disentangle the contributor documentation from the product documentation. -# Website +## Website | Criteria | 1 | 2 | 3 | 4 | 5 | | ------------------------------------------- | --- | --- | --- | --- | --- | @@ -443,9 +445,9 @@ Scale: - 3 = (Is present, but needs work) - 5 = (Is executed extremely well or no improvement required) -## Comments: website +### Comments: website -### Single-source requirement +#### Single-source requirement The source files for the website and technical documentation reside in two separate directories of the Backstage GitHub repo, built as a single unit by @@ -453,7 +455,7 @@ _Docusaurus_. There is no separate **website repo**. The strategy for **generating the docs** is documented but obscure. -### Minimal website requirements +#### Minimal website requirements Listed and acknowledged below are the (cumulative) _minimal_ website requirements for projects based on their [maturity level][cncf-maturity-stages]: @@ -474,14 +476,14 @@ sandbox, incubating, graduated and archived. | Archived | Archived status of the project is obvious to site visitors | n/a | | Archived | Link to successor project website and/or migration documentation (if it exists) | n/a | -### Branding and design +#### Branding and design The Backstage **brand** is easily recognizable through the logo and color scheme. The scheme is **used consistently** across the website and docs. The website **typography** is easy to read. -### Case studies/social proof +#### Case studies/social proof **Case studies** and **testimonials** are not prominent and are not readily findable from the website. There is no **logo wall** of participating @@ -490,7 +492,7 @@ organizations. The project has an **active blog**. **Community discussions** are available on the website. -### SEO, Analytics and site-local search +#### SEO, Analytics and site-local search **Analytics** @@ -513,7 +515,7 @@ The current **custodian(s)** of the following accounts are **not** clearly documented: analytics, Google Search Console, site-search (such as Google CSE or Algolia). -### Maintenance planning +#### Maintenance planning The **website tooling** (Docusaurus static site build) is well supported. @@ -524,14 +526,14 @@ build time** was under 30 seconds for a local build on a Mac M1. Maintainers have sufficient **permissions** to download and build the doc. Checking in the doc requires a PR and approval from a project maintainer. -### Usability, accessibility and devices +#### Usability, accessibility and devices Backstage.io is partially conformant with [WCAG 2.1 level AA][wcag-understanding] with respect to **accessibility**. -## Recommendations: website +### Recommendations: website -### Single-source repo +#### Single-source repo The documentation is isolated from the code by virtue of being in its own directories; however, its location and build instructions are hard to find. @@ -545,7 +547,7 @@ many repositories. Creating one more for documentation would make the project organization cleaner and make it easier to contribute to the project documentation. -### Minimum website requirements for maturity level +#### Minimum website requirements for maturity level To meet the maturity level standards for a graduated project, the following aspects should be updated as described in [Project documentation][proj-doc]: @@ -555,22 +557,22 @@ aspects should be updated as described in [Project documentation][proj-doc]: - Update and reorganize the documentation with respect to user orientation and task-based support of use cases. -### Case studies/social proof +#### Case studies/social proof Implement a **logo wall** of participating organizations, with links to testimonials and/or case studies. -### SEO, Analytics and site-local search +#### SEO, Analytics and site-local search Add documentation and website custodians to the project maintainer lists in `OWNERS.md` and wherever else project maintainers are documented. -### Maintenance planning +#### Maintenance planning Add a prominent call for website and documentation maintainers in the project introduction alongside the call for code maintainers. -### Accessibility +#### Accessibility Improve compliance in these areas: diff --git a/analyses/2023/backstage/backstage-implementation.md b/analyses/2023/backstage/backstage-implementation.md index 2bb9916e..c831e7b3 100644 --- a/analyses/2023/backstage/backstage-implementation.md +++ b/analyses/2023/backstage/backstage-implementation.md @@ -4,7 +4,9 @@ tags: [backstage] cSpell:ignore: rigeur runbooks toolkits --- -# Introduction + + +## Introduction This document provides actionable suggestions for improving the Backstage technical documentation. @@ -12,7 +14,7 @@ technical documentation. For an analysis and general discussion of recommendations on Backstage technical documentation, see [backstage-analysis.md][backstage-analysis]]. -## Recommendations, requirements, and best practices +### Recommendations, requirements, and best practices Notwithstanding the fact that this analysis measures documentation against CNCF project maturity standards, in most cases there is more than one way to do @@ -32,21 +34,21 @@ The top-level documentation recommendations for this project are: - Organize and "signpost" documentation by role and task so that stakeholders can find documentation that supports their roles' activities. -# Definitions +## Definitions These implementations rely on the following definitions. -## Organization +### Organization It is assumed that Backstage is adopted by a medium-to-large _organization_ (_org_) made up of a number of _groups_. -## Group +### Group A group is defined by its responsibility for one or more software _products_ that are manageable in Backstage. -## Product +### Product Products can include but are not limited to: internal and external toolkits and APIs; components; databases; and web-based and standalone applications. @@ -54,21 +56,21 @@ APIs; components; databases; and web-based and standalone applications. A group needs 1) visibility into the org's entire corpus of products, and 2) to publicize its own software products to the org. -## Developer +### Developer Members of a group can have various functional and organizational roles, including: software engineer; dev-op; QA engineer; software architect; network engineer; engineering manager; and many others. These implementations refer to a group member generically as a _developer_ (_dev_). -## Contributor +### Contributor The org has ties to the Backstage open source software (OSS) project through developers who contribute to the project and who participate in discussions, newsgroups, and other community forums. These OSS participants, regardless of their employer or job function, are called _contributors_. -# User Roles +## User Roles The only distinctions among Backstage users relevant to this implementation discussion are among _user roles_. User roles are defined to organize @@ -94,7 +96,7 @@ this analysis. They are important considerations, however, that should be addressed by any organization and for which further exploration and documentation would be valuable. -# Implementation: Fill gaps in instructional documentation +## Implementation: Fill gaps in instructional documentation "Instructional documentation" is a broad category that includes such traditional documentation artifacts as tutorials; getting started guides; procedural recipes @@ -126,7 +128,7 @@ explaining what the configuration controls. The sections below give recommendations for the most important instructional documentation improvements to Backstage for each user role. -## Administrator +### Administrator The following artifacts should be written and made findable for administrators. @@ -147,7 +149,7 @@ The following artifacts should be written and made findable for administrators. - Troubleshoot common problems - Tune server performance -## Developer +### Developer The following artifacts should be written and made findable for developers. @@ -164,7 +166,7 @@ The following artifacts should be written and made findable for developers. - Deprecating and retiring a product from Backstage - Searching for a component in Backstage -## Integrator +### Integrator There are a dizzying array of issues with writing, modifying, and maintaining plugins in Backstage. This is not a detailed recipe for documenting those @@ -180,7 +182,7 @@ issues. For integrators, at a high level, a program should be undertaken to: references and architecture discussions) into supporting documentation, referenced from the integration tasks. -## Contributor +### Contributor For a plugin-dependent project like Backstage, it's vital that community members contribute plugins, for two reasons: @@ -194,7 +196,7 @@ repo and should be limited to how to contribute software to the product. "How to write a plugin" documentation should be included in the website-based doc as described above. -# Organize and "signpost" documentation +## Organize and "signpost" documentation Right now different types of documentation (conceptual/architectural; instructional; reference) for different user roles are intermixed throughout the @@ -210,7 +212,7 @@ to learning the software and becoming proficient as quickly as possible. Some documents are used by more than one user role. These docs are listed first under the heading **Common**. -## Common +### Common | Document | Description | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | @@ -219,14 +221,14 @@ under the heading **Common**. | Glossary | A dictionary of product-specific terms. Also commonly includes domain- and industry-specific terms that are necessary to understanding the product. | | Knowledge base | An encyclopedic collection of related background, conceptual, and reference information that doesn't fit elsewhere in the documentation. Similar to a FAQ, but more structured, more searchable and, therefore, more useful. | -## Evaluator +### Evaluator | Document | Description | | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Logo wall | Not a technical document, but a _de rigeur_ feature on a product website these days. The logo wall shows at a glance an instantly recognizable selection of organizations that use the product. The logos typically link to testimonials or to the organizations' own websites. | | Case studies | Another element on a product website that is as much marketing as technical material, a case study nonetheless helps an evaluator decide whether to adopt the product. A handful of well written case studies is sufficient. | -## Administrator +### Administrator | Document | Description | | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -234,7 +236,7 @@ under the heading **Common**. | Installation and configuration guide | A guide to downloading, installing, and configuring an organization-wide Backstage instance ("app"). | | Administrator guide | Contains all tasks the administrator needs to maintain the Backstage app: onboarding developers; installing plugins; starting, stopping, upgrading, and troubleshooting the app; using containers; evaluating and tuning server performance. | -## Developer +### Developer | Document | Description | | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -244,22 +246,22 @@ under the heading **Common**. | Tutorials | Tasks that are good candidates for tutorials are difficult, often-used tasks that must be mastered to use the product effectively. Many of these are probably in daily use by developers. | | Cookbooks | There might be specialized tasks required of developers by an organization that should be documented, especially if they are performed infrequently. | -## Integrator +### Integrator | Document | Description | | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Technical overview | Same as the common technical overview, but an integrator will need more detail about the plugin architecture. | | Cookbooks | The integrator will need to write plugins. This encompasses a large body of task knowledge. The best way to document these is as a collection of tasks or procedures explaining how to complete each task. Even with a comprehensive collection of task documents, some creativity is probably needed by the integrator, since every new plugin by definition is solving a new problem. | -## Contributor +### Contributor | Document | Description | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | GitHub Instructions | Contributing a plugin to Backstage is essentially an exercise in creating and shepherding a pull request through the Backstage community process. This can be documented entirely in GitHub, or it can be a separate section in the Backstage documentation. Regardless, the contributing instructional material should be separate from the integration/"How to write a plugin" material. | -# Website and documentation infrastructure +## Website and documentation infrastructure -## Single-source repo +### Single-source repo Move the Backstage documentation out of the [Backstage repo][backstage-github-project] and into its own repo within the [Backstage @@ -270,23 +272,23 @@ In the meantime, put references to the documentation contributing and build instructions alongside the project code instructions in the contributor documentation in the Backstage repo. -## Case studies/social proof +### Case studies/social proof Implement a **logo wall** of participating organizations, with links to testimonials or the organizations' websites. Write or solicit a handful of representative case studies and link them from the website. -## SEO, Analytics and site-local search +### SEO, Analytics and site-local search Add documentation and website custodians to the project maintainer lists in `OWNERS.md` and wherever else project maintainers are documented. -## Maintenance planning +### Maintenance planning Add a prominent call for website and documentation maintainers in the project introduction alongside the call for code maintainers. -## Accessibility +### Accessibility Improve compliance in these areas: diff --git a/analyses/2023/backstage/backstage-issues.md b/analyses/2023/backstage/backstage-issues.md index df7056fb..0b14efe6 100644 --- a/analyses/2023/backstage/backstage-issues.md +++ b/analyses/2023/backstage/backstage-issues.md @@ -3,6 +3,8 @@ title: Backstage umbrella issue tags: [backstage] --- + + # Backstage umbrella issue ## Overview diff --git a/analyses/2023/backstage/user-roles.md b/analyses/2023/backstage/user-roles.md index d1869b55..30ee0b51 100644 --- a/analyses/2023/backstage/user-roles.md +++ b/analyses/2023/backstage/user-roles.md @@ -3,6 +3,8 @@ title: Backstage User Roles for Doc tags: [backstage] --- + + # Backstage User Roles for Doc This document provides recommendations for user roles, or personas, for diff --git a/analyses/2023/etcd/etcd-analysis.md b/analyses/2023/etcd/etcd-analysis.md index f8a06145..ca277a54 100644 --- a/analyses/2023/etcd/etcd-analysis.md +++ b/analyses/2023/etcd/etcd-analysis.md @@ -7,7 +7,9 @@ author: Dave Welsch (@dwelsch-esi) cSpell:ignore: Welsch dwelsch --- -# Introduction + + +## Introduction This document analyzes the effectiveness and completeness of the [etcd][etcd-io] open source software (OSS) project's documentation and website. It is funded by @@ -19,7 +21,7 @@ prerequisite for program graduation. The documentation analysis is the first step of a CNCF process aimed at assisting projects with their documentation efforts. -## Purpose +### Purpose This document was written to analyze the current state of etcd documentation. It aims to provide project leaders with an informed understanding of potential @@ -35,7 +37,7 @@ This document: actionable suggestions and recommendations for overall organization and presentation of documentation -## Scope of analysis +### Scope of analysis The documentation discussed here includes the entire contents of the website (which contains the technical docs), as well as documentation for contributors @@ -57,7 +59,7 @@ Netlify platform. The site's code is stored on the etcd GitHub repo. - Other etcd repos: `https://github.com/etcd-io/*` -## How this document is organized +### How this document is organized This document is divided into three sections that represent three major areas of concern: @@ -84,7 +86,7 @@ that can be completed in constrained blocks of time. Ultimately, the implementation items should be tracked as a series of Github [issues][etcd-issues]. -## How to use this document +### How to use this document Readers interested only in actionable improvements should skip this document and read [etcd-implementation.md][implementation-doc]. @@ -100,7 +102,7 @@ to their area of concern: Examples of CNCF documentation that demonstrate the analysis criteria are linked from the [Criteria][cncf-doc-criteria] specification. -### Recommendations, requirements, and best practices +#### Recommendations, requirements, and best practices This analysis measures documentation against CNCF project maturity standards, and suggests possible improvements. In most cases there is more than one way to @@ -112,7 +114,7 @@ understood as "recommended" or "should" at the strongest, and "optional" or "may" in many cases. Any "must" or "required" actions are clearly denoted as such, and pertain to legal requirements such as copyright and licensing issues. -# Project documentation +## Project documentation etcd is a **graduated** project of CNCF. This means that the project should have [_very high_][cncf-doc-criteria] standards for documentation. @@ -125,7 +127,7 @@ etcd is a **graduated** project of CNCF. This means that the project should have | Content creation processes | 2 - needs improvement | | Inclusive language | 2 - needs improvement | -## Comments +### Comments Much of the documentation seems as if it hasn't been reviewed and updated for a while. @@ -133,7 +135,7 @@ while. The following sections contain brief assessments of each element of the Project Documentation rubric. -### Information architecture +#### Information architecture There is **high-level conceptual** and design content, but it is hard to find. Most of it is in a _Learning_ section, which is not a conventional label for a @@ -220,7 +222,7 @@ installation procedure in the documentation. If this represents a separate, automated installation workflow it should be offered as a procedure in the user doc. -### New user content +#### New user content There is a single paragraph on the [website][etcd-io] landing page with a "Learn more" link that goes to the current documentation table of contents (ToC). It @@ -261,7 +263,7 @@ There are instructions for installing and getting started in the etcd-io/etcd [README][etcd-readme]. It would be preferable to point new users and contributors to the documentation straightaway. -### Content maintainability & site mechanics +#### Content maintainability & site mechanics Documentation content is **versioned** with the software. Versions are maintained in separate **directories** in the website content repo. @@ -287,7 +289,7 @@ There do not appear to be plans to translate the documentation from English. There is a Github issue label (`area/documentation`) for **documentation issues**. -### Content creation processes +#### Content creation processes There are instructions for contributing to documentation and for **releasing a new version** of the etcd **documentation** in the `README.md` file in the @@ -304,7 +306,7 @@ The website repo For example, instructions for building the website state that the local build starts the server on `localhost:8888`. It's actually `localhost:1313`. -### Inclusive language +#### Inclusive language Language is mostly inclusive. For example, the neutral terms "Leader" and "Follower" are used to describe server failover roles. @@ -319,9 +321,9 @@ For example: action]"; for example, "Creating a user is as easy as" in [Role-based access control](https://etcd.io/docs/v3.5/op-guide/authentication/rbac/). -## Recommendations +### Recommendations -### Information architecture +#### Information architecture Reorganize the table of contents (ToC) to separate three types of information: @@ -388,7 +390,7 @@ they're no longer relevant. Consider removing the installation example from the [etcd Play][demo server] server and pointing the user to the documentation's installation instructions. -### New user content +#### New user content Point "Learn more" links to a "Start here" page that provides orientation and sets out paths for different user roles. For example, the Developer path should @@ -419,7 +421,7 @@ paths for specific persona use cases. Remove getting-started instructions from the main GitHub repo README and instead point the user to the documentation. -### Content maintainability & site mechanics +#### Content maintainability & site mechanics Remove links to documentation for previous releases from the current documentation version. Going forward, write doc for each release without @@ -435,7 +437,7 @@ References to previous versions are in the following 3.5 documentation files: - metrics.md - dev-guide/discovery_protocol.md -### Content creation processes +#### Content creation processes Update the content creation instructions in the website README file. @@ -443,12 +445,12 @@ Move issue and PR submission guidelines from the documentation ("Triage") to the Github repo. Link to these guidelines from a Troubleshooting section in the docs. -### Inclusive language +#### Inclusive language Audit the documentation for non-inclusive language. See the [Inclusive Naming Initiative](https://inclusivenaming.org/) website. -# Contributor documentation +## Contributor documentation etcd is a **graduated** project of CNCF. This means that the project should have [_very high_](../../docs/analysis/criteria.md) standards for contributor @@ -461,9 +463,9 @@ documentation. | “New contributor” getting started content | 3 - meets standards | | Project governance documentation | 4 - meets or exceeds standards | -## Comments +### Comments -### Communication methods documented +#### Communication methods documented **Communication channels** include a Google Group and Twitter, and are documented on the [Community][etcd-community] page. @@ -482,7 +484,7 @@ list**. the etcd repo. These should be in the repo itself, with a pointer from the documentation troubleshooting section. -### Beginner friendly issue backlog +#### Beginner friendly issue backlog There is a **good first issue** label. Issues are generally **well documented** by submitters and discussed in the Issues forum. There is a label @@ -500,38 +502,38 @@ issues for the etcd main repo at the time of this writing: | 6 mo - 12 mo | 40 | \*\*\*\*\*\*\*\* | | > 12 mo | 52 | \*\*\*\*\*\*\*\*\*\*\* | -### New contributor getting started content +#### New contributor getting started content There is a [**Community**][etcd-community] page on the etcd website. There is no dedicated **"first-contributor"** document, but there are multiple resources and pointers in the general contributor instructions. New contributors should have minimal difficulty **finding help** if they need it. -### Project governance documentation +#### Project governance documentation [**Project governance**][etcd-govern] is clearly documented. -## Recommendations +### Recommendations -### Communication methods documented +#### Communication methods documented Move the information from the [Triage][etcdio-triage] doc section into the repo itself, with pointers from the documentation Troubleshooting guide. -### Beginner friendly issue backlog +#### Beginner friendly issue backlog No recommendations. -### New contributor getting started content +#### New contributor getting started content Consider creating a conspicuous "First contributor start here" document in the repo, with links to the other contributor resources. -### Project governance documentation +#### Project governance documentation No recommendations. -# Website +## Website etcd is a **graduated** project of CNCF. This means that the project should have [_very high_](../../docs/analysis/criteria.md) standards for documentation. @@ -553,9 +555,9 @@ etcd is a **graduated** project of CNCF. This means that the project should have | Intra-site / local search | 5 - exemplary | | Account custodians are documented | 4 - meets or exceeds standards | -## Comments +### Comments -### Single-source requirement +#### Single-source requirement The website has its own GitHub **repository**. The website repo contains the documentation and is separated from the project source code. @@ -563,7 +565,7 @@ documentation and is separated from the project source code. **Contributor documentation** is contained in the [main code repo][github-etcd-etcd] in well labeled Markdown files. -### Minimal website requirements +#### Minimal website requirements Except for archived projects, requirements are cumulative through project maturity levels so, for example, incubating projects must satisfy the @@ -589,7 +591,7 @@ sandbox, incubating, graduated and archived. | Archived | Archived status of the project is obvious to site visitors | n/a | | Archived | Link to successor project website and/or migration documentation (if it exists) | n/a | -### Usability, accessibility and devices +#### Usability, accessibility and devices The site is **usable from mobile**. **Doc pages are readable**. Features such as **search** and **top-nav** work; the **in-page TOC** is missing on a small phone @@ -601,13 +603,13 @@ on the landing page. Basic **website features**, including navigation, can be done via **keyboard**. Unknown whether **text-to-speech** is a good user experience for listeners. -### Branding and design +#### Branding and design The website and documentation carry an **easily recognizable brand** for the project based on logo, color scheme, and template layout. The brand is used **consistently** on the site. The text is easily **readable**. -### Case studies/social proof +#### Case studies/social proof The landing page lists a tiny **"logo wall"** of four "Used by" organizations, though given that one of those organizations is Kubernetes, this seems adequate. @@ -625,7 +627,7 @@ production installation, including when it was launched, the cluster size, what application is using etcd, and the cloud environment. The list of production users in this file is probably not exhaustive. -### SEO, Analytics and site-local search +#### SEO, Analytics and site-local search The website has site-wide search, GA4 enabled, and well indexed on popular search engines; matches perfectly to our criteria. @@ -647,7 +649,7 @@ search engines; matches perfectly to our criteria. - Account custodians are not clearly documented. -### Maintenance planning +#### Maintenance planning The website uses Hugo and Docsy, which are the recommended **website tooling** for CNCF projects. @@ -662,52 +664,52 @@ Site maintainers have **adequate permissions** to update the website. Maintainers of the [website repository][website-repo] are adequately documented in the OWNERS file in the repo. Approvers and reviewers are listed. -### Other +#### Other The website is accessible via **HTTPS**. Requests using **HTTP** are properly redirected to the **HTTPS** URLs. The [demo server][] uses unsecured HTTP. -## Recommendations +### Recommendations -### Single-source requirement +#### Single-source requirement No recommendations. -### Minimal website requirements +#### Minimal website requirements Update website to include DCO or other source validation. Identify stakeholders (user roles). Ensure that instructions exist in the documentation for all major use cases for each stakeholder. -### Usability, accessibility and devices +#### Usability, accessibility and devices Consider replacing low-contrast text for the benefit of visually impaired users. -### Branding and design +#### Branding and design No recommendations. -### Case studies/social proof +#### Case studies/social proof Consider adding user testimonials and/or case studies to the web page. Consider posting updates and news to the blog more regularly. -### SEO, Analytics and site-local search +#### SEO, Analytics and site-local search **Account custodians** - Areas such as analytics, Google Search Console, site-search (such as Google CSE or Algolia) must have at least one custodian assigned. -### Maintenance planning +#### Maintenance planning No recommendations. -### Other +#### Other Consider securing the [demo server][] using HTTPS. diff --git a/analyses/2023/etcd/etcd-issues.md b/analyses/2023/etcd/etcd-issues.md index 76833943..2ad360fa 100644 --- a/analyses/2023/etcd/etcd-issues.md +++ b/analyses/2023/etcd/etcd-issues.md @@ -4,6 +4,8 @@ tags: [etcd] cSpell:ignore: reconf --- + + # Overview Here is an outline of the recommended changes to the etcd documentation. diff --git a/analyses/2023/in-toto/in-toto-analysis.md b/analyses/2023/in-toto/in-toto-analysis.md index dca0bd54..9f3fc462 100644 --- a/analyses/2023/in-toto/in-toto-analysis.md +++ b/analyses/2023/in-toto/in-toto-analysis.md @@ -3,6 +3,8 @@ title: Analysis of Existing Documentation tags: [in-toto] --- + + # Analysis of Existing Documentation This document characterizes the effectiveness and completeness of the in-toto diff --git a/analyses/2023/in-toto/in-toto-doc-issues.md b/analyses/2023/in-toto/in-toto-doc-issues.md index f599d1d3..376509d4 100644 --- a/analyses/2023/in-toto/in-toto-doc-issues.md +++ b/analyses/2023/in-toto/in-toto-doc-issues.md @@ -3,6 +3,8 @@ title: Documentation Issues tags: [in-toto] --- + + # Documentation Issues These issues identify and classify tasks that contributors can undertake to diff --git a/analyses/2023/in-toto/in-toto-implementation.md b/analyses/2023/in-toto/in-toto-implementation.md index 5ec2ab27..451bcfeb 100644 --- a/analyses/2023/in-toto/in-toto-implementation.md +++ b/analyses/2023/in-toto/in-toto-implementation.md @@ -4,6 +4,8 @@ tags: [in-toto] cSpell:ignore: roadmaps Cappos --- + + # Implementation ## Organizational principles diff --git a/analyses/2023/porter/analysis.md b/analyses/2023/porter/analysis.md index c2050c53..3b9d2e67 100644 --- a/analyses/2023/porter/analysis.md +++ b/analyses/2023/porter/analysis.md @@ -4,7 +4,7 @@ tags: [porter] cSpell:ignore: Uchechukwu Obasi --- - + # Porter Docs Analysis diff --git a/analyses/2024/keda/keda-analysis.md b/analyses/2024/keda/keda-analysis.md index cb4517dd..9cf11356 100644 --- a/analyses/2024/keda/keda-analysis.md +++ b/analyses/2024/keda/keda-analysis.md @@ -9,7 +9,7 @@ cSpell:ignore: Welsch dwelsch pastable servicedesk -# Introduction +## Introduction This document analyzes the effectiveness and completeness of the [KEDA](https://keda.sh) open source software (OSS) project's documentation and @@ -21,7 +21,7 @@ prerequisite for program graduation. The documentation analysis is the first step of a CNCF process aimed at assisting projects with their documentation efforts. -## Purpose +### Purpose This document was written to analyze the current state of KEDA documentation. It aims to provide project leaders with an informed understanding of potential @@ -37,7 +37,7 @@ This document: actionable suggestions and recommendations for overall organization and presentation of documentation -## Scope of analysis +### Scope of analysis The documentation discussed here includes the entire contents of the website (which contains the technical docs), as well as documentation for contributors @@ -59,7 +59,7 @@ Netlify platform. The site's code is stored on the KEDA GitHub repo. - Other KEDA repos under https://github.com/kedacore/ -## How this document is organized +### How this document is organized This document is divided into three sections that represent three major areas of concern: @@ -86,7 +86,7 @@ that can be completed in constrained blocks of time. Ultimately, the implementation items should be tracked as a series of Github [issues](keda-issues.md). -## How to use this document +### How to use this document Readers interested only in actionable improvements should skip this document and read [keda-implementation.md](./keda-implementation.md). @@ -102,7 +102,7 @@ to their area of concern: Examples of CNCF documentation that demonstrate the analysis criteria are linked from the [criteria](../../docs/analysis/criteria.md) specification. -### Recommendations, requirements, and best practices +#### Recommendations, requirements, and best practices This analysis measures documentation against CNCF project maturity standards, and suggests possible improvements. In most cases there is more than one way to @@ -115,7 +115,7 @@ strongest, and "optional" or "may" in many cases. Any "must" or "required" actions are clearly denoted as such, and pertain to legal requirements such as copyright and licensing issues. -# Project documentation +## Project documentation KEDA is a **graduated** project of CNCF. This means that the project should have [_very high_](../../docs/analysis/criteria.md) standards for documentation. @@ -128,9 +128,9 @@ KEDA is a **graduated** project of CNCF. This means that the project should have | Content creation processes | 2 - needs improvement | | Inclusive language | 2 - needs improvement | -## Comments +### Comments -### Information architecture +#### Information architecture There is an overview containing **high-level conceptual** content that explains what KEDA is and how it works. The conceptual overview has one diagram, which @@ -169,7 +169,7 @@ their own directory in the repo. Release notes are provided in the project main repo, and linked from a ROADMAP file. They are not linked from the documentation pages. -### New user content +#### New user content There is partial **getting started** information in the documentation as [Deploying KEDA](https://keda.sh/docs/2.13/deploy/), the first topic in the @@ -207,7 +207,7 @@ roadmap. There is easily **copy-pastable** content for CLI input where appropriate, including in the installation instructions. -### Content maintainability & site mechanics +#### Content maintainability & site mechanics The documentation is **Searchable** using functionality provided by the site generation engine. @@ -218,7 +218,7 @@ multiple languages** in case that changes. The documentation is **versioned**. The repo contains a separate folder for each version. -### Content creation processes +#### Content creation processes The procedure for **building and releasing a new version** is documented in the doc repo README file. @@ -230,7 +230,7 @@ The MAINTAINERS doc in the website repo points to the MAINTAINERS doc in the main repo, which does not tell who is **responsible for documentation pull requests**. The website does not have a **clear owner or maintainer**. -### Inclusive language +#### Inclusive language The documentation includes some examples of [**non-inclusive language**](https://inclusivenaming.org/). For example: @@ -243,9 +243,9 @@ The documentation includes some examples of - https://keda.sh/docs/2.13/troubleshooting/#google-kubernetes-engine-gke - https://keda.sh/docs/2.13/scalers/redis-sentinel-lists/#authentication-parameters -## Recommendations +### Recommendations -### Information architecture +#### Information architecture Reorganize the Table of Contents. Rename "The KEDA Documentation"; the name is misleading since it implies that it contains the entire documentation set. I'd @@ -267,29 +267,29 @@ or link to other documentation that does, for example the [Kubernetes documentation on HPA](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/). For example, explain how to do 0-to-1 scaling. -### New user content +#### New user content Clearly label the starting point for new users. Make sure that there is an easy to follow workflow for installation, configuring and running a basic scaler, and any other tasks required to begin using KEDA. -### Content maintainability & site mechanics +#### Content maintainability & site mechanics No recommendations -### Content creation processes +#### Content creation processes Make it easier to find the instructions for releasing a new version of the documentation and updating the documentation. Document in the repo who the website/documentation maintainers are. -### Inclusive language +#### Inclusive language Remove non-inclusive language throughout the documentation as recommended on the [inclusive naming website](https://inclusivenaming.org/). -# Contributor documentation +## Contributor documentation KEDA is a **graduated** project of CNCF. This means that the project should have [_very high_](../../docs/analysis/criteria.md) standards for contributor @@ -302,9 +302,9 @@ documentation. | “New contributor” getting started content | 3 - meets standards | | Project governance documentation | 4 - meets or exceeds standards | -## Comments +### Comments -### Communication methods documented +#### Communication methods documented The KEDA main repo points to **community** resources, including a KEDA Slack channel in the Kubernetes workspace. There is a **community page** on the @@ -312,7 +312,7 @@ website that invites readers to a **biweekly Zoom meeting**. The main website has direct links in the footer to the Slack community, the **GitHub** repo, and a Twitter feed. I could not find any mention of a **mailing list**. -### Beginner friendly issue backlog +#### Beginner friendly issue backlog Doc **issues** in the repo are **well documented** and have been labeled and, presumably, **triaged**. @@ -323,7 +323,7 @@ applied to any issues). There are **stale issues**, but they seem for the most part to be managed. There are only ~30 open issues in the doc repo. -### New contributor getting started content +#### New contributor getting started content The website contains a **community section**. @@ -331,14 +331,14 @@ There is **CONTRIBUTORS** document in the website/documentation repo with instructions for **getting help** and building and contributing new documentation. -### Project governance documentation +#### Project governance documentation **Governance** is clearly documented in its own repo. Presumably this information is applicable to all of the repos in kedacore. -## Recommendations +### Recommendations -### Communication methods documented +#### Communication methods documented If there is a mailing list or other news distribution channel, add it to the community page. (Note: As discussed in the @@ -346,19 +346,19 @@ community page. (Note: As discussed in the newsletter. This is OK since there are plenty of other active communication channels.) -### Beginner friendly issue backlog +#### Beginner friendly issue backlog Revisit stale issues if they are not being reviewed. -### New contributor getting started content +#### New contributor getting started content No recommendations. -### Project governance documentation +#### Project governance documentation No recommendations. -# Website +## Website KEDA is a **graduated** project of CNCF. This means that the project should have [_very high_](../../docs/analysis/criteria.md) standards for documentation. @@ -380,9 +380,9 @@ KEDA is a **graduated** project of CNCF. This means that the project should have | Intra-site / local search | 5 - exemplary | | Account custodians are documented | 2 - needs improvement | -## Comments +### Comments -### Single-source requirement +#### Single-source requirement Source files for all website pages reside in a **single repo**. However, some user documentation pages (specifically, "Getting started" topics linked from the @@ -391,7 +391,7 @@ tech docs on the website. Website files are all in the website repo. -### Minimal website requirements +#### Minimal website requirements Except for archived projects, requirements are cumulative through project maturity levels so, for example, incubating projects must satisfy the @@ -418,7 +418,7 @@ sandbox, incubating, graduated and archived. | Archived | Archived status of the project is obvious to site visitors | n/a | | Archived | Link to successor project website and/or migration documentation (if it exists) | n/a | -### Usability, accessibility and devices +#### Usability, accessibility and devices The website is **usable from mobile**. Top-nav is reachable only via the hamburger menu on mobile devices. There is no in-page TOC or other context on @@ -439,13 +439,13 @@ only**. As with any text that contains a lot of code and special characters, **text-to-speech** is **not likely to offer listeners a good experience**. -### Branding and design +#### Branding and design The website and documentation carry an **easily recognizable brand** for the project based on logo, color scheme, and template layout. The **brand is used consistently** on the site. The website's text is **easily readable**. -### Case studies/social proof +#### Case studies/social proof I'm unable to find **case studies** or **user testimonials** for the project. They're probably not as important for KEDA as they are for a more extensive @@ -460,7 +460,7 @@ There are **community talks** for the project on YouTube. One talk, from KubeCon There is a substantial **logo wall of users and participating organizations**. The KEDA project solicits users to register as "listed users." -### SEO, Analytics and site-local search +#### SEO, Analytics and site-local search **Analytics:** @@ -479,7 +479,7 @@ The KEDA project solicits users to register as "listed users." - There are no records showing the different account custodians; nothing is listed on `MAINTAINERS.md` and no `OWNERS.md` is found. -### Maintenance planning +#### Maintenance planning The website uses Hugo and Docsy, which are the recommended **website tooling** for CNCF projects. @@ -493,18 +493,18 @@ community or third-party scalers (plugin components). Presumably, **site maintainers have adequate permissions** since the documentation is up to date with the software. -### Other +#### Other The website is accessible via **HTTPS**. Requests using **HTTP** are properly redirected to the **HTTPS** URLs. -## Recommendations +### Recommendations -### Single-source requirement +#### Single-source requirement No recommendations. -### Minimal website requirements +#### Minimal website requirements Identify stakeholder roles in the user documentation (even if there is only one role). This could be as minimal as a "who should use this documentation" @@ -513,29 +513,29 @@ paragraph in the product introduction. Update docs per Implementation and Issues recommendations (separate documents). Especially, improve new user documentation. -### Usability, accessibility and devices +#### Usability, accessibility and devices No recommendations. -### Branding and design +#### Branding and design No recommendations. -### Case studies/social proof +#### Case studies/social proof No recommendations. -### SEO, Analytics and site-local search +#### SEO, Analytics and site-local search The current custodian(s) of the following accounts should be clearly documented: analytics (GA4), site-search (Algolia). You can create an `OWNERS.md` file for this. -### Maintenance planning +#### Maintenance planning Explicitly list and solicit maintainers and contributors for documentation. -### Other +#### Other No recommendations. diff --git a/analyses/2024/keda/keda-implementation.md b/analyses/2024/keda/keda-implementation.md index 46e5bc32..489c1595 100644 --- a/analyses/2024/keda/keda-implementation.md +++ b/analyses/2024/keda/keda-implementation.md @@ -3,9 +3,9 @@ title: Implementing KEDA Doc Improvements tags: [KEDA] --- - + -# Introduction +## Introduction This document provides actionable suggestions for improving the KEDA technical documentation. @@ -13,7 +13,7 @@ documentation. For an analysis and general discussion of recommendations on KEDA technical documentation, see [keda-analysis.md][keda-analysis]. -## Recommendations, requirements, and best practices +### Recommendations, requirements, and best practices This analysis measures documentation against CNCF project maturity standards, and suggests possible improvements. In most cases there is more than one way to @@ -37,7 +37,7 @@ The documentation recommendations for this project are: - [Make user roles explicit](#make-user-roles-explicit) - [Clarify documentation maintainers](#clarify-documentation-maintainers) -# Reorganize the Table of Contents +## Reorganize the Table of Contents Reorganize the Table of Contents to: @@ -79,18 +79,18 @@ Here is a proposed outline for the tech doc Table of Contents: current "KEDA Documentation" heading) - [Deploying KEDA](https://keda.sh/docs/2.13/deploy/) - Prerequisites (https://keda.sh/docs/2.13/operate/cluster/#requirements) - - [Deploying with Helm](?no-link-check#helm) - - [Installing](?no-link-check#install) - - [Uninstalling](?no-link-check#uninstall) - - [Deploying with Operator Hub](?no-link-check#operatorhub) - - [Installing](?no-link-check#install-1) - - [Uninstalling](?no-link-check#uninstall-1) - - [Deploying using the deployment YAML files](?no-link-check#yaml) - - [Installing](?no-link-check#install-2) - - [Uninstalling](?no-link-check#uninstall-2) - - [Deploying KEDA on MicroK8s](?no-link-check#microk8s) - - [Installing](?no-link-check#install-3) - - [Uninstalling](?no-link-check#uninstall-3) + - [Deploying with Helm](https://keda.sh/docs/2.13/deploy/#helm) + - [Installing](https://keda.sh/docs/2.13/deploy/#install) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall) + - [Deploying with Operator Hub](https://keda.sh/docs/2.13/deploy/#operatorhub) + - [Installing](https://keda.sh/docs/2.13/deploy/#install-1) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall-1) + - [Deploying using the deployment YAML files](https://keda.sh/docs/2.13/deploy/#yaml) + - [Installing](https://keda.sh/docs/2.13/deploy/#install-2) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall-2) + - [Deploying KEDA on MicroK8s](https://keda.sh/docs/2.13/deploy/#microk8s) + - [Installing](https://keda.sh/docs/2.13/deploy/#install-3) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall-3) - Hello, KEDA (write a procedure for a simplest-possible use case for users to get started on - something like https://github.com/kedacore/sample-hello-world-azure-functions) @@ -157,11 +157,11 @@ Among other things, the reorganization includes these changes: - Separate reference and task information that appears on the same page and move each to the appropriate section. -# Write a Glossary +## Write a Glossary Create a glossary of terms specific to KEDA. Add to the Reference section. -# Add "How to set up a scaler" to the Operator guide +## Add "How to set up a scaler" to the Operator guide Setting up a scaler seems to be largely a matter of installing the scaler and providing parameters in a configuration file. While the configurations are @@ -173,7 +173,7 @@ least most) scalers. Any scaler that requires special instructions other than the configuration file should have its own procedure page, listing the extra steps required. -# Write a New User workflow +## Write a New User workflow Write a task-based, step-by-step workflow for new users. Assume the new user has no experience with KEDA and is fairly new to Kubernetes. @@ -198,24 +198,24 @@ annotated to illustrate this point: the differences here to help the new user decide. Also, if prerequisites depend on the deployment type, you can optionally put a Prerequisites section in each deployment procedure rather than here._ - - [Deploying with Helm](?no-link-check#helm) - - [Installing](?no-link-check#install) - - [Uninstalling](?no-link-check#uninstall) \* - - [Deploying with Operator Hub](?no-link-check#operatorhub) - - [Installing](?no-link-check#install-1) - - [Uninstalling](?no-link-check#uninstall-1) - - [Deploying using the deployment YAML files](?no-link-check#yaml) - - [Installing](?no-link-check#install-2) - - [Uninstalling](?no-link-check#uninstall-2) - - [Deploying KEDA on MicroK8s](?no-link-check#microk8s) - - [Installing](?no-link-check#install-3) - - [Uninstalling](?no-link-check#uninstall-3) + - [Deploying with Helm](https://keda.sh/docs/2.13/deploy/#helm) + - [Installing](https://keda.sh/docs/2.13/deploy/#install) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall) \* + - [Deploying with Operator Hub](https://keda.sh/docs/2.13/deploy/#operatorhub) + - [Installing](https://keda.sh/docs/2.13/deploy/#install-1) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall-1) + - [Deploying using the deployment YAML files](https://keda.sh/docs/2.13/deploy/#yaml) + - [Installing](https://keda.sh/docs/2.13/deploy/#install-2) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall-2) + - [Deploying KEDA on MicroK8s](https://keda.sh/docs/2.13/deploy/#microk8s) + - [Installing](https://keda.sh/docs/2.13/deploy/#install-3) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall-3) - Hello, KEDA (write a procedure for a simplest-possible use case for users to get started on - something like https://github.com/kedacore/sample-hello-world-azure-functions) _analogous to a "Hello World" exercise in programming language or API guides_ -# Update the doc content creation instructions +## Update the doc content creation instructions In the keda-docs [README](https://github.com/kedacore/keda-docs/blob/main/README.md): @@ -230,12 +230,12 @@ In the keda-docs Document in the repo (keda-docs, keda, or both) who the website/documentation maintainers are. -# Remove non-inclusive language +## Remove non-inclusive language Remove non-inclusive language throughout the documentation as recommended by the [Inclusive Naming Initiative](https://inclusivenaming.org/). -# Make user roles explicit +## Make user roles explicit KEDA seems to have only one explicit user role (or _persona_), namely, an Operator using KEDA to scale resources on a Kubernetes installation. Regardless, @@ -247,7 +247,7 @@ repo. The definition of the Operator role could be as minimal as a "who should use this documentation" paragraph in the product introduction. -# Clarify documentation maintainers +## Clarify documentation maintainers Create an `OWNERS.md` file to document (on the repo) the current custodian(s) of the following accounts: analytics (GA4), site-search (Algolia). diff --git a/analyses/2024/keda/keda-issues.md b/analyses/2024/keda/keda-issues.md index 7b048c8e..b7d218ec 100644 --- a/analyses/2024/keda/keda-issues.md +++ b/analyses/2024/keda/keda-issues.md @@ -4,15 +4,15 @@ tags: [KEDA] cSpell:ignore: externalscaler findability --- - + -# Overview +## Overview This document outlines the recommended changes to the KEDA documentation. The following issues are added to the [project repo](https://github.com/kedacore/keda-docs). -# Issue: Reorganize the Table of Contents +## Issue: Reorganize the Table of Contents Reorganize the Table of Contents to: @@ -35,7 +35,7 @@ on individual sections is broken out into sub-issues. - Reference. See [Create a Reference](#issue-create-a-reference-topic). - [Scalers](https://keda.sh/docs/2.13/scalers/). -## Issue: Reorganize Concepts +### Issue: Reorganize Concepts Remove everything that's not a conceptual overview. @@ -56,7 +56,7 @@ or provide a starting point. - [External Scalers](https://keda.sh/docs/2.13/concepts/external-scalers/) - [Admission Webhooks](https://keda.sh/docs/2.13/concepts/admission-webhooks/) -## Issue: Write a "Getting Started" guide +### Issue: Write a "Getting Started" guide Write a task-based, step-by-step workflow for new users. Start with the current "KEDA Documentation" section. @@ -86,24 +86,24 @@ into multiple pages, one for each procedure. This reduces frustration. Also, if prerequisites depend on the deployment type, you can optionally put a Prerequisites section in each deployment procedure rather than here._ - - [Deploying with Helm](?no-link-check#helm) - - [Installing](?no-link-check#install) - - [Uninstalling](?no-link-check#uninstall) - - [Deploying with Operator Hub](?no-link-check#operatorhub) - - [Installing](?no-link-check#install-1) - - [Uninstalling](?no-link-check#uninstall-1) - - [Deploying using the deployment YAML files](?no-link-check#yaml) - - [Installing](?no-link-check#install-2) - - [Uninstalling](?no-link-check#uninstall-2) - - [Deploying KEDA on MicroK8s](?no-link-check#microk8s) - - [Installing](?no-link-check#install-3) - - [Uninstalling](?no-link-check#uninstall-3) + - [Deploying with Helm](https://keda.sh/docs/2.13/deploy/#helm) + - [Installing](https://keda.sh/docs/2.13/deploy/#install) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall) + - [Deploying with Operator Hub](https://keda.sh/docs/2.13/deploy/#operatorhub) + - [Installing](https://keda.sh/docs/2.13/deploy/#install-1) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall-1) + - [Deploying using the deployment YAML files](https://keda.sh/docs/2.13/deploy/#yaml) + - [Installing](https://keda.sh/docs/2.13/deploy/#install-2) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall-2) + - [Deploying KEDA on MicroK8s](https://keda.sh/docs/2.13/deploy/#microk8s) + - [Installing](https://keda.sh/docs/2.13/deploy/#install-3) + - [Uninstalling](https://keda.sh/docs/2.13/deploy/#uninstall-3) - Hello, KEDA (write a procedure for a simplest-possible use case for users to get started on - something like https://github.com/kedacore/sample-hello-world-azure-functions) _analogous to a "Hello World" exercise in programming language or API guides_ -## Issue: Update the Operator Guide +### Issue: Update the Operator Guide Some guidelines: @@ -160,7 +160,7 @@ or provide a starting point. - [Troubleshooting](https://keda.sh/docs/2.13/concepts/troubleshooting/) `/docs/2.13/troubleshooting/` -## Issue: Create a "Reference" topic +### Issue: Create a "Reference" topic - The Reference section should be at or near the end of the ToC - Include the following information in the Reference section: @@ -185,7 +185,7 @@ or provide a starting point. - [FAQ](https://keda.sh/docs/2.13/reference/faq/) - Glossary -# Separate reference and task information +## Separate reference and task information A common practice that reduces documentation effectiveness is mixing conceptual and task information. _Conceptual_ discussion can be thought of as _How it @@ -215,7 +215,7 @@ some judgement might be required to rearrange things. | Events | https://keda.sh/docs/2.13/operate/events/ | This is reference information. | | Integrate with Prometheus | https://keda.sh/docs/2.13/integrations/prometheus/ | Split this into a task ("Integrating with Prometheus" and a reference "Metrics Exported to Prometheus". | -# Write a Glossary +## Write a Glossary Create a glossary of terms specific to KEDA. It wouldn't hurt to include some key Kubernetes terms as well, especially acronyms. Add to the Reference section. @@ -246,7 +246,7 @@ Here is a partial list of terms to include: For an example from another CNCF project, see the [glossary in the Backstage documentation](https://backstage.io/docs/references/glossary/). -# Write "Setting Up a Scaler" +## Write "Setting Up a Scaler" Setting up a scaler seems to be largely a matter of installing the scaler and providing parameters in a configuration file. While the configurations are @@ -258,7 +258,7 @@ Users should be able to follow the procedure for any (or at least most) scalers. Any scaler that requires special instructions other than the configuration file should have its own procedure page, listing the extra steps required. -# Make user roles explicit +## Make user roles explicit KEDA seems to have only one explicit user role (or _persona_), namely, an Operator using KEDA to scale resources on a Kubernetes installation. Regardless, @@ -270,7 +270,7 @@ repo. The definition of the Operator role could be as minimal as a "who should use this documentation" paragraph in the product introduction. -# Update the doc content creation instructions +## Update the doc content creation instructions Make the following changes to improve the effectiveness of the KEDA documentation contributor instructions. @@ -285,7 +285,7 @@ In the keda-docs so that they're not separated by "Writing documentation for a new authentication provider". -# Clarify the KEDA website and documentation maintainers +## Clarify the KEDA website and documentation maintainers Create an `OWNERS.md` file to document (on the kedacore/keda-docs repo) the current custodian(s) of the following accounts: analytics (GA4), site-search @@ -295,7 +295,7 @@ Explicitly document in the repo (keda-docs, keda, or both) who the website/documentation maintainers are. Solicit maintainers and contributors for documentation, either in the new OWNERS file or the governance MAINTAINERS file. -# Remove non-inclusive language +## Remove non-inclusive language Remove non-inclusive language throughout the documentation as recommended by the [Inclusive Naming Initiative](https://inclusivenaming.org/). Some examples of diff --git a/analyses/2025/helm/helm-analysis.md b/analyses/2025/helm/helm-analysis.md index f37fb24b..7b48cdf0 100644 --- a/analyses/2025/helm/helm-analysis.md +++ b/analyses/2025/helm/helm-analysis.md @@ -263,10 +263,10 @@ is documented for users that need more help: information about working with the community and searching the existing issues in the Helm repo to troubleshoot. -- There are also some minimal FAQs here: https://helm.sh/docs/faq/. They include - a few questions about installing and one question about uninstalling. It looks - like this information is not really an "FAQ", but rather information about - installing/uninstalling Helm that might have been documented under FAQs +- There are also some minimal FAQ pages for installing and uninstalling. They + include a few questions about installing and one question about uninstalling. + It looks like this information is not really an "FAQ", but rather information + about installing/uninstalling Helm that might have been documented under FAQs because it lacks a more permanent home. The Helm docs lack clear troubleshooting steps for different common tasks. @@ -727,10 +727,10 @@ The numeric rating values used in this document are as follows 4. Meets or exceeds standards 5. Exemplary -[criteria]: ../criteria.md +[criteria]: /docs/analysis/criteria.md [implementation]: ./helm-implementation.md [issues list]: ./helm-issues-list.md [project-website]: https://helm.sh/ [Rating (1-5)]: #rating-values [rfc-spec]: https://www.rfc-editor.org/rfc/rfc2119 -[website guidelines]: ../../website-guidelines-checklist.md +[website guidelines]: /docs/website-guidelines-checklist.md diff --git a/analyses/2025/helm/helm-implementation.md b/analyses/2025/helm/helm-implementation.md index d599601a..d09a4095 100644 --- a/analyses/2025/helm/helm-implementation.md +++ b/analyses/2025/helm/helm-implementation.md @@ -135,8 +135,7 @@ personas, and the primary concepts/terms to know. There are several pages in the docs that are likely out-of-date or otherwise no longer relevant. For example: -- "FAQs" https://helm.sh/docs/faq/installing and - https://helm.sh/docs/faq/uninstalling +- "FAQs" pages for installing and uninstalling - Best practices section: https://helm.sh/docs/chart_best_practices/ diff --git a/analyses/2025/helm/helm-issues-list.md b/analyses/2025/helm/helm-issues-list.md index f0440c1c..78ac570d 100644 --- a/analyses/2025/helm/helm-issues-list.md +++ b/analyses/2025/helm/helm-issues-list.md @@ -60,8 +60,7 @@ high-level Helm overview page. See the proposed sidebar in Review each of these pages/section to see if their content can be redistributed or deleted: -- "FAQs" https://helm.sh/docs/faq/installing and - https://helm.sh/docs/faq/uninstalling +- "FAQs" pages for installing and uninstalling - Best practices section: https://helm.sh/docs/chart_best_practices/ diff --git a/analyses/2025/knative/analysis.md b/analyses/2025/knative/analysis.md index 106f3906..b6ac418b 100644 --- a/analyses/2025/knative/analysis.md +++ b/analyses/2025/knative/analysis.md @@ -841,9 +841,9 @@ The numeric rating values used in this document are as follows 4. Meets or exceeds standards 5. Exemplary -[criteria]: ../criteria.md +[criteria]: /docs/analysis/criteria.md [project-doc-website]: https://knative.dev/docs/ [project-website]: https://knative.dev/docs/ [Rating (1-5)]: #rating-values [rfc-spec]: https://www.rfc-editor.org/rfc/rfc2119 -[website guidelines]: ../../website-guidelines-checklist.md +[website guidelines]: /docs/website-guidelines-checklist.md diff --git a/analyses/2025/knative/issues.md b/analyses/2025/knative/issues.md index 3e74e1ad..a3c69e32 100644 --- a/analyses/2025/knative/issues.md +++ b/analyses/2025/knative/issues.md @@ -399,7 +399,7 @@ Related material in the current doc: - https://knative.dev/docs/getting-started/next-steps/ - https://knative.dev/docs/bookstore/page-0/welcome-knative-bookstore-tutorial/ - https://knative.dev/docs/bookstore/disclaimer/ -- https://knative.dev/docs/bookstore/* (all bookstore pages) +- all pages in the Bookstore tutorial - https://knative.dev/docs/serving/architecture/ - https://knative.dev/docs/serving/request-flow/ - https://knative.dev/docs/serving/encryption/encryption-overview/ diff --git a/analyses/2025/vitess/analysis.md b/analyses/2025/vitess/analysis.md index d721b18d..08faad06 100644 --- a/analyses/2025/vitess/analysis.md +++ b/analyses/2025/vitess/analysis.md @@ -1034,6 +1034,12 @@ TBD No recommendations. +## Companion documents + +Separate implementation and issues-list documents are not yet available for this +analysis. Use this page's recommendations and notes as the current source for +follow-up work. + ## References and notes ### Rating values @@ -1049,8 +1055,8 @@ The numeric rating values used in this document are as follows: ### References [criteria]: ../../docs/analysis/criteria.md -[implementation]: ./implementation.md?no-link-check -[issues list]: ./issues-list.md?no-link-check +[implementation]: #companion-documents +[issues list]: #companion-documents [project-doc-website]: https://vitess.io/docs/ [project-website]: https://vitess.io/ [Rating (1-5)]: #rating-values diff --git a/analyses/2026/flatcar/analysis.md b/analyses/2026/flatcar/analysis.md index 14597477..a3a3120e 100644 --- a/analyses/2026/flatcar/analysis.md +++ b/analyses/2026/flatcar/analysis.md @@ -6,7 +6,8 @@ modified: 2026-04-04 author: Bruce Hamilton (@iRaindrop) --- - + + ## Introduction @@ -25,9 +26,9 @@ efforts. This document was written to analyze the current state of Flatcar documentation. It aims to provide project leaders with an informed understanding of potential -problems in current project documentation. A second **implementation** document -outlines an actionable plan for improvement. A third document is an **issues -list** of issues to be added to the project documentation repository. These +problems in current project documentation. A second [implementation] document +outlines an actionable plan for improvement. A third document is an [issues +list] of issues to be added to the project documentation repository. These issues can be taken up by contributors to improve the documentation. This document: @@ -55,7 +56,7 @@ repository. The site's code is stored on the Flatcar GitHub repo. #### Out of scope Any Flatcar content that is not accessed by the documentation URL, -https://www.flatcar.org/docs/latest,is outside the scope of this analysis. The +https://www.flatcar.org/docs/latest, is outside the scope of this analysis. The FAQ and Blog are outside the scope, however an argument can be made to keep an up-to-date FAQ in the core documentation. @@ -88,7 +89,7 @@ into a series of issues and entered as GitHub project-doc-website/issues. ### How to use this document Readers interested only in actionable improvements should skip this document and -read the **implementation plan** and **issues list**. +read the [implementation][] plan and [issues list][]. Readers interested in the current state of the documentation and the reasoning behind the recommendations should read the section of this document pertaining @@ -724,6 +725,12 @@ We evaluate on the following: #### Other +#### Companion documents + +Separate implementation and issues-list documents are not yet available for this +analysis. Use this page's recommendations and notes as the current source for +follow-up work. + #### References and notes ##### Rating values @@ -736,10 +743,10 @@ The numeric rating values used in this document are as follows 4. Meets or exceeds standards 5. Exemplary -[criteria]: ../criteria.md -[implementation]: ./implementation.md -[issues list]: ./issues-list.md +[criteria]: /docs/analysis/criteria.md +[implementation]: #companion-documents +[issues list]: #companion-documents [project-website]: _PROJECT-WEBSITE_ [Rating (1-5)]: #rating-values [rfc-spec]: https://www.rfc-editor.org/rfc/rfc2119 -[website guidelines]: ../../website-guidelines-checklist.md +[website guidelines]: /docs/website-guidelines-checklist.md diff --git a/docs/analysis/templates/analysis.md b/docs/analysis/templates/analysis.md index f37e7b7b..2551255f 100644 --- a/docs/analysis/templates/analysis.md +++ b/docs/analysis/templates/analysis.md @@ -45,8 +45,8 @@ efforts. This document was written to analyze the current state of _PROJECT_ documentation. It aims to provide project leaders with an informed understanding of potential problems in current project documentation. A second -[implementation] document, , outlines an actionable plan for improvement. A -third document is an [issues list] of issues to be added to the project +[implementation][] document, , outlines an actionable plan for improvement. A +third document is an [issues list][] of issues to be added to the project documentation repository. These issues can be taken up by contributors to improve the documentation. @@ -109,7 +109,7 @@ into a series of issues and entered on GitHub `PROJECT-DOC-WEBSITE/issues`. ### How to use this document Readers interested only in actionable improvements should skip this document and -read the **[implementation] plan** and **[issues] list**. +read the [implementation][] plan and [issues list][]. Readers interested in the current state of the documentation and the reasoning behind the recommendations should read the section of this document pertaining @@ -550,7 +550,7 @@ The numeric rating values used in this document are as follows [criteria]: ../criteria.md [implementation]: ./implementation.md [issues list]: ./issues-list.md -[project-website]: _PROJECT-WEBSITE_ +[project-website]: ?fixme-target-dne=_PROJECT-WEBSITE_ [Rating (1-5)]: #rating-values [rfc-spec]: https://www.rfc-editor.org/rfc/rfc2119 [website guidelines]: ../../website-guidelines-checklist.md diff --git a/docs/localization/ja/index.md b/docs/localization/ja/index.md index 442cae0e..cd96c84f 100644 --- a/docs/localization/ja/index.md +++ b/docs/localization/ja/index.md @@ -11,12 +11,12 @@ title: CNCF日本語ローカライゼーション向けガイドライン ## 目次 -- [スタイルガイド](?no-link-check#スタイルガイド) -- [固有の用語](?no-link-check#固有の用語) - - [例](?no-link-check#例) -- [レビュー](?no-link-check#レビュー) -- [プロジェクト](?no-link-check#プロジェクト) -- [コミュニケーション](?no-link-check#コミュニケーション) +- [スタイルガイド](#スタイルガイド) +- [固有の用語](#固有の用語) + - [例](#例) +- [レビュー](#レビュー) +- [プロジェクト](#プロジェクト) +- [コミュニケーション](#コミュニケーション) ## スタイルガイド @@ -54,7 +54,7 @@ CNCFのプロジェクト特有の用語については、原則として英語 ## レビュー -ローカライゼーションのPRを作成した際は、ローカライゼーションレビュアーにレビューを依頼してください。各リポジトリのレビュアーは、[プロジェクト](?no-link-check#プロジェクト)の表を参考にしてください。 +ローカライゼーションのPRを作成した際は、ローカライゼーションレビュアーにレビューを依頼してください。各リポジトリのレビュアーは、[プロジェクト](#プロジェクト)の表を参考にしてください。 2人以上のローカライゼーションレビュアーからの承認を得ることを推奨します。 ローカライゼーションレビュアーからの承認を得た後、各リポジトリのメンテナーにPRのマージを依頼してください。 diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 45d8d288..e313d135 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -1,14 +1,25 @@ -// cSpell:ignore cncf +// cSpell:ignore cncf dracula +import path from 'node:path'; import { themes as prismThemes } from 'prism-react-renderer'; import type { Config } from '@docusaurus/types'; import type * as Preset from '@docusaurus/preset-classic'; +import getBuildContext from './lib/getBuildContext'; +import remarkRewriteLinks from './lib/remarkRewriteLinks'; const title = 'CNCF TechDocs'; const repo = 'https://github.com/cncf/techdocs'; -const buildEnv = process.env.BUILD_ENV || 'production'; -const isProd = buildEnv === 'production'; +const { buildEnv, isProd, assetBaseUrl } = getBuildContext(repo); +const importedReadmePath = path.resolve('README.md'); + +// Rewrite GitHub-friendly relative links so they also work on the site: +// - cross-plugin links (`../../docs|analyses/...`) → site-absolute URLs +// - data assets the MDX loader can't bundle (e.g. `.csv`) → GitHub blob URL +const rewriteLinks: [ + typeof remarkRewriteLinks, + Parameters[0], +] = [remarkRewriteLinks, { assetBaseUrl }]; const config: Config = { title, @@ -28,6 +39,15 @@ const config: Config = { onBrokenLinks: 'warn', // TODO: 'error' or 'throw' once we've fixed all links markdown: { + // Only needed for imported Markdown partials outside content plugins. + // In this repo, that's the root README.md imported by src/pages/index.mdx. + preprocessor: ({ fileContent, filePath }) => + path.resolve(filePath) === importedReadmePath + ? fileContent.replace( + /(\]\(|\]:\s*)(\/(?:docs|analyses)\/[^\s)#?]+)\.md(?=$|[\s)#?])/g, + '$1$2/', + ) + : fileContent, hooks: { onBrokenMarkdownLinks: 'warn', }, @@ -44,9 +64,15 @@ const config: Config = { [ 'classic', { + // Our remark plugin must run before Docusaurus's own `resolveMarkdownLinks` + // and `transformImage` so cross-plugin URLs are rewritten first. docs: { sidebarPath: './sidebars.ts', editUrl: isProd ? `${repo}/tree/main` : undefined, + beforeDefaultRemarkPlugins: [rewriteLinks], + }, + pages: { + beforeDefaultRemarkPlugins: [rewriteLinks], }, theme: { customCss: './src/css/custom.css', @@ -55,6 +81,20 @@ const config: Config = { ], ], + plugins: [ + [ + '@docusaurus/plugin-content-docs', + { + id: 'analyses', + path: 'analyses', + routeBasePath: 'analyses', + sidebarPath: './sidebarsAnalyses.ts', + editUrl: isProd ? `${repo}/tree/main/analyses` : undefined, + beforeDefaultRemarkPlugins: [rewriteLinks], + }, + ], + ], + themeConfig: { // TODO: Replace with your project's social card // image: 'img/docusaurus-social-card.jpg', @@ -71,6 +111,13 @@ const config: Config = { position: 'left', label: 'Docs', }, + { + type: 'docSidebar', + docsPluginId: 'analyses', + sidebarId: 'analysesSidebar', + position: 'left', + label: 'Analyses', + }, ], }, footer: { diff --git a/lib/getBuildContext.ts b/lib/getBuildContext.ts new file mode 100644 index 00000000..adf437a4 --- /dev/null +++ b/lib/getBuildContext.ts @@ -0,0 +1,29 @@ +import getCurrentBranch from './getCurrentBranch'; +import getGitHubRepoUrl from './getGitHubRepoUrl'; + +export interface BuildContext { + buildEnv: string; + isProd: boolean; + isDeployPreview: boolean; + assetBranch: string; + assetRepo: string; + assetBaseUrl: string; +} + +export default function getBuildContext(repo: string): BuildContext { + const buildEnv = process.env.BUILD_ENV || 'production'; + const isProd = buildEnv === 'production'; + const isDeployPreview = !isProd && !!process.env.DEPLOY_PRIME_URL; + const assetBranch = isDeployPreview ? getCurrentBranch() || 'main' : 'main'; + const assetRepo = isDeployPreview ? getGitHubRepoUrl() || repo : repo; + const assetBaseUrl = `${assetRepo}/blob/${assetBranch}`; + + return { + buildEnv, + isProd, + isDeployPreview, + assetBranch, + assetRepo, + assetBaseUrl, + }; +} diff --git a/lib/getCurrentBranch.ts b/lib/getCurrentBranch.ts new file mode 100644 index 00000000..aa30c0cb --- /dev/null +++ b/lib/getCurrentBranch.ts @@ -0,0 +1,22 @@ +import { execSync } from 'node:child_process'; + +export default function getCurrentBranch(): string | undefined { + const fromEnv = + // Netlify exposes BRANCH/HEAD for deploy contexts; GitHub Actions uses + // the GITHUB_* refs below. + process.env.HEAD || + process.env.BRANCH || + process.env.GITHUB_HEAD_REF || + process.env.GITHUB_REF_NAME; + if (fromEnv) return fromEnv; + + try { + const branch = execSync('git branch --show-current', { + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'ignore'], + }).trim(); + return branch || undefined; + } catch { + return undefined; + } +} diff --git a/lib/getGitHubRepoUrl.ts b/lib/getGitHubRepoUrl.ts new file mode 100644 index 00000000..8911cedc --- /dev/null +++ b/lib/getGitHubRepoUrl.ts @@ -0,0 +1,33 @@ +import { execSync } from 'node:child_process'; + +function normalizeGitHubUrl(remoteUrl: string): string | undefined { + const ssh = remoteUrl.match(/^git@github\.com:([^/]+\/[^/]+?)(?:\.git)?$/); + if (ssh) return `https://github.com/${ssh[1]}`; + + const https = remoteUrl.match( + /^https:\/\/github\.com\/([^/]+\/[^/]+?)(?:\.git)?$/, + ); + if (https) return `https://github.com/${https[1]}`; + + return undefined; +} + +export default function getGitHubRepoUrl( + remote = 'origin', +): string | undefined { + const fromEnv = process.env.REPOSITORY_URL; + if (fromEnv) { + const normalized = normalizeGitHubUrl(fromEnv); + if (normalized) return normalized; + } + + try { + const remoteUrl = execSync(`git remote get-url ${remote}`, { + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'ignore'], + }).trim(); + return normalizeGitHubUrl(remoteUrl); + } catch { + return undefined; + } +} diff --git a/lib/remarkRewriteLinks/README.md b/lib/remarkRewriteLinks/README.md new file mode 100644 index 00000000..1b91e6a5 --- /dev/null +++ b/lib/remarkRewriteLinks/README.md @@ -0,0 +1,75 @@ +# `remarkRewriteLinks` + +Remark plugin that rewrites Markdown link destinations so files authored for +GitHub also resolve on our Docusaurus site. + +## What it handles + +Source files use GitHub-relative links. Docusaurus resolves most natively; we +cover three gaps: + +1. **Cross-plugin links** (`(../)+docs|analyses/...`). `analyses/` is a separate + `plugin-content-docs` instance, so Docusaurus's `resolveMarkdownLinks` can't + follow these. We map them to site-absolute `/docs|analyses/...`, stripping + `.md` and adding `/` for `trailingSlash: true`. +2. **Unbundled data assets** (default: `.csv`). MDX loader bundles only + images/video/audio/PDF; others leak as filesystem paths. We rewrite to + `/` (= GitHub blob URL). +3. **Site-absolute `.md` in imported Markdown** (e.g. `README.md` imported by + `src/pages/index.mdx`). Handled by a one-line global `markdown.preprocessor` + in `docusaurus.config.ts` (the imported file is outside any plugin's remark + scope). The plugin also handles this case as defense-in-depth for direct + `rewriteHref` callers. + +Everything else (same-plugin `.md`, images, externals, fragments) is left to +Docusaurus. + +## Wiring gotcha: `beforeDefaultRemarkPlugins`, not `remarkPlugins` + +Docusaurus's `resolveMarkdownLinks` and `transformImage` run as default remark +plugins. `remarkPlugins` runs **after** them — too late; they'll have already +warned on our cross-plugin URLs. Use `beforeDefault...` so we rewrite first and +the defaults bundle what's left (images get content hashes). + +Registered under `presets.classic.docs`, `presets.classic.pages`, and the +`analyses` plugin. + +## Design + +- AST, not regex: code fences, titles, angle brackets, ref-style links handled + by the parser. +- `rewriteHref(href, sourceFile, opts)` is a pure function, exported and + unit-testable without the pipeline. +- Minimal scope — only rewrites what Docusaurus can't handle itself. + +## Adding asset types (`.zip`, `.xlsx`, ...) + +Config-only, no code change: + +```ts +[ + remarkRewriteLinks, + { + assetBaseUrl: `${repo}/blob/main`, + assetExtensions: ['.csv', '.zip', '.xlsx', '.tsv'], + }, +]; +``` + +Guidelines: + +- Don't add extensions Docusaurus already bundles (images/video/audio/PDF) — + you'd lose local bundling and content hashing. +- Don't add `.md` / `.mdx` (handled elsewhere). +- `assetBaseUrl` defaults to the GitHub blob URL, which renders `.csv` / `.tsv` + as tables and previews `.xlsx` / `.zip`. For large downloads use a CDN + instead. + +If you want a file **bundled** rather than linked out to GitHub, add a webpack +`asset/resource` rule via `configureWebpack` in a small Docusaurus plugin — +separate, larger change. + +## Tests + +`npm run test:unit` — covers both `rewriteHref` and full parse → plugin → +stringify integration. diff --git a/lib/remarkRewriteLinks/index.test.mts b/lib/remarkRewriteLinks/index.test.mts new file mode 100644 index 00000000..e8c0c371 --- /dev/null +++ b/lib/remarkRewriteLinks/index.test.mts @@ -0,0 +1,197 @@ +// cSpell:ignore howto knative mdast remark unified vfile vitess extensionless gapi kubernetes gateway api passthroughs unrooted + +import assert from 'node:assert/strict'; +import { describe, it } from 'node:test'; +import { unified } from 'unified'; +import remarkParse from 'remark-parse'; +import remarkStringify from 'remark-stringify'; +import { VFile } from 'vfile'; +import remarkRewriteLinks, { rewriteHref } from './index.ts'; + +const ASSET_BASE = 'https://github.com/cncf/techdocs/blob/main'; + +function dedent(s: string): string { + return s.replace(/^ +/gm, '').trim(); +} + +/** Run a single Markdown source through the plugin and return the rendered output. */ +async function run( + md: string, + filePath: string, + opts: Parameters[0] = { assetBaseUrl: ASSET_BASE }, +): Promise { + const file = new VFile({ value: md, path: filePath }); + const out = await unified() + .use(remarkParse) + .use(remarkRewriteLinks, opts) + .use(remarkStringify) + .process(file); + return String(out).trim(); +} + +describe('rewriteHref (cross-plugin links)', () => { + it('maps (../)+docs/.../foo.md to /docs/.../foo/', () => { + assert.strictEqual( + rewriteHref('../../docs/analysis/criteria.md', 'analyses/2025/x/a.md'), + '/docs/analysis/criteria/', + ); + }); + + it('maps (../)+analyses/.../foo.md to /analyses/.../foo/', () => { + assert.strictEqual( + rewriteHref( + '../../analyses/2025/knative/analysis.md', + 'docs/analysis/howto.md', + ), + '/analyses/2025/knative/analysis/', + ); + }); + + it('maps (../)+docs/.../foo.mdx to /docs/.../foo/', () => { + assert.strictEqual( + rewriteHref('../../docs/analysis/criteria.mdx', 'analyses/2025/x/a.md'), + '/docs/analysis/criteria/', + ); + }); + + it('adds a trailing slash to extensionless cross-plugin pages', () => { + assert.strictEqual( + rewriteHref( + '../../analyses/2025/knative/analysis', + 'docs/analysis/howto.md', + ), + '/analyses/2025/knative/analysis/', + ); + }); + + it('preserves cross-plugin trailing slash', () => { + assert.strictEqual( + rewriteHref('../../analyses/', 'docs/analysis/howto.md'), + '/analyses/', + ); + }); + + it('preserves #fragment after the rewritten path', () => { + assert.strictEqual( + rewriteHref( + '../../docs/analysis/criteria.md#website', + 'analyses/2023/etcd/etcd-analysis.md', + ), + '/docs/analysis/criteria/#website', + ); + }); + + it('strips .md from site-absolute /docs/.../foo.md and /analyses/.../foo.md', () => { + assert.strictEqual( + rewriteHref('/docs/analysis/criteria.md', 'analyses/2025/x/a.md'), + '/docs/analysis/criteria/', + ); + assert.strictEqual( + rewriteHref('/analyses/2024/keda/keda-analysis.md', 'docs/howto.md'), + '/analyses/2024/keda/keda-analysis/', + ); + }); +}); + +describe('rewriteHref (asset links)', () => { + it('rewrites a relative .csv against the asset base URL', () => { + assert.strictEqual( + rewriteHref('backstage-doc-survey.csv', 'analyses/2023/backstage/x.md', { + assetBaseUrl: ASSET_BASE, + }), + `${ASSET_BASE}/analyses/2023/backstage/backstage-doc-survey.csv`, + ); + }); + + it('leaves .csv links untouched when no assetBaseUrl is provided', () => { + assert.strictEqual( + rewriteHref('data.csv', 'analyses/2023/backstage/index.md'), + 'data.csv', + ); + }); + + it('normalizes an absolute filesystem sourceFile against projectRoot', () => { + const root = '/Users/me/repo'; + assert.strictEqual( + rewriteHref( + 'data.csv', + '/Users/me/repo/analyses/2023/backstage/index.md', + { assetBaseUrl: ASSET_BASE, projectRoot: root }, + ), + `${ASSET_BASE}/analyses/2023/backstage/data.csv`, + ); + }); +}); + +describe('rewriteHref (passthroughs)', () => { + const source = 'docs/analysis/howto.md'; + + it('leaves absolute, protocol-relative, mailto and fragment URLs untouched', () => { + for (const href of [ + 'https://example.com/a.md', + 'mailto:foo@example.com', + '//cdn.example.com/a.md', + '#section', + ]) { + assert.strictEqual(rewriteHref(href, source), href); + } + }); + + it('leaves unrooted same-plugin .md links to Docusaurus', () => { + assert.strictEqual(rewriteHref('./foo.md', source), './foo.md'); + assert.strictEqual(rewriteHref('../foo.md', source), '../foo.md'); + }); + + it('leaves cross-plugin image assets untouched', () => { + assert.strictEqual( + rewriteHref( + '../../../docs/images/gapi_info_arch.png', + 'analyses/2021/kubernetes-gateway-api/analysis.md', + ), + '../../../docs/images/gapi_info_arch.png', + ); + }); +}); + +describe('remarkRewriteLinks (full pipeline)', () => { + it('rewrites inline, reference, image and angle-bracketed destinations', async () => { + const md = dedent(` + See [criteria](../../docs/analysis/criteria.md) and [survey]. + + [survey]: backstage-doc-survey.csv + [angle]: <../../docs/analysis/criteria.md> + + ![arch](../../../docs/images/gapi_info_arch.png) + `); + const out = await run(md, 'analyses/2023/backstage/backstage-analysis.md'); + assert.match(out, /\[criteria\]\(\/docs\/analysis\/criteria\/\)/); + assert.match( + out, + new RegExp( + `\\[survey\\]: ${ASSET_BASE.replace(/\//g, '\\/')}` + + `\\/analyses\\/2023\\/backstage\\/backstage-doc-survey\\.csv`, + ), + ); + assert.match(out, /\[angle\]: \/docs\/analysis\/criteria\//); + assert.match( + out, + /!\[arch\]\(\.\.\/\.\.\/\.\.\/docs\/images\/gapi_info_arch\.png\)/, + ); + }); + + it('does not touch URL-like text inside fenced code blocks', async () => { + const md = dedent(` + \`\`\` + [criteria](../../docs/analysis/criteria.md) + \`\`\` + `); + const out = await run(md, 'analyses/2023/backstage/x.md'); + assert.match(out, /criteria\]\(\.\.\/\.\.\/docs\/analysis\/criteria\.md/); + }); + + it('preserves inline link titles', async () => { + const md = '[x](../../docs/analysis/criteria.md "a title")'; + const out = await run(md, 'analyses/2023/backstage/x.md'); + assert.strictEqual(out, '[x](/docs/analysis/criteria/ "a title")'); + }); +}); diff --git a/lib/remarkRewriteLinks/index.ts b/lib/remarkRewriteLinks/index.ts new file mode 100644 index 00000000..192662bc --- /dev/null +++ b/lib/remarkRewriteLinks/index.ts @@ -0,0 +1,149 @@ +// cSpell:ignore cncf mdast unist vfile + +import path from 'node:path'; +import { visit } from 'unist-util-visit'; +import type { Definition, Image, Link, Root } from 'mdast'; +import type { Plugin } from 'unified'; +import type { VFile } from 'vfile'; + +/** + * Remark plugin that rewrites Markdown link destinations so source files + * authored for GitHub also resolve correctly on our Docusaurus site. + * + * Two cases are handled here; everything else is left to Docusaurus: + * + * 1. **Cross-plugin links** like `(../)+docs|analyses/...` don't resolve + * because `analyses/` is its own `plugin-content-docs` instance. They + * are mapped to site-absolute `/docs|analyses/...`. If they end in + * `.md`, the extension is stripped and a trailing `/` is appended + * (Docusaurus's own `.md` resolver only fires for unrooted same-plugin + * links). + * + * 2. **Unbundled data assets** (default: `.csv`) get rewritten to + * `/` so they work on both GitHub and + * the site. (Docusaurus's MDX loader only bundles a fixed set of asset + * extensions — images, video, audio, PDF.) + * + * Same-plugin `.md` links and image paths are intentionally left untouched: + * Docusaurus's built-in remark plugins resolve them natively against the + * filesystem, which works across plugin boundaries for non-Markdown assets. + */ + +export interface Options { + /** + * Base URL for unbundled data-asset files. Typically the repo's canonical + * blob URL, e.g. `https://github.com///blob/`. + * If unset, asset links are left untouched. + */ + assetBaseUrl?: string; + + /** Asset extensions to rewrite (lower-case, with leading dot). */ + assetExtensions?: readonly string[]; + + /** + * Absolute project root, used to resolve `vfile.path` to a repo-relative + * path for asset URL construction. Defaults to `process.cwd()`. + */ + projectRoot?: string; +} + +const CROSS_PLUGIN_RE = /^(?:\.\.\/)+(docs|analyses)(\/.*)?$/; +const SITE_ABSOLUTE_MD_RE = /^\/(docs|analyses)\/.+\.mdx?$/i; +const DEFAULT_ASSET_EXTENSIONS: readonly string[] = ['.csv']; + +/** Split an href into its path and its query/fragment suffix. */ +function splitHref(href: string): { path: string; suffix: string } { + const i = href.search(/[?#]/); + return i < 0 + ? { path: href, suffix: '' } + : { path: href.slice(0, i), suffix: href.slice(i) }; +} + +/** True for scheme (`http:`, `mailto:`, ...) or protocol-relative URLs. */ +function isAbsoluteUrl(href: string): boolean { + if (href.startsWith('//')) return true; + try { + new URL(href); + return true; + } catch { + return false; + } +} + +/** + * Rewrite a single link destination. Returns the input unchanged when no + * rewrite applies (absolute URLs, fragments, same-plugin `.md`, images, ...). + * + * Exported for unit testing; also reusable from non-remark contexts. + */ +export function rewriteHref( + href: string, + sourceFile: string, + options: Options = {}, +): string { + if (!href || href.startsWith('#') || isAbsoluteUrl(href)) return href; + + const { path: original, suffix } = splitHref(href); + if (!original) return href; + + const ext = path.posix.extname(original).toLowerCase(); + const cross = original.match(CROSS_PLUGIN_RE); + const assetExts = options.assetExtensions ?? DEFAULT_ASSET_EXTENSIONS; + const isAsset = !!options.assetBaseUrl && assetExts.includes(ext); + + // Cross-plugin page links: rewrite only `.md` and extensionless paths. + // Asset paths (`.png`, `.csv`, ...) under `docs/`/`analyses/` are left for + // Docusaurus's native asset resolver, which crosses plugin boundaries. + const isCrossPage = !!cross && (!ext || ext === '.md' || ext === '.mdx'); + if (isCrossPage) { + let p = `/${cross![1]}${cross![2] ?? ''}`; + if (p.toLowerCase().endsWith('.mdx')) { + p = `${p.slice(0, -'.mdx'.length)}/`; + } else if (p.toLowerCase().endsWith('.md')) { + p = `${p.slice(0, -'.md'.length)}/`; + } else if (!p.endsWith('/')) p += '/'; + return `${p}${suffix}`; + } + + // Site-absolute `.md` page links — Docusaurus's native resolver only fires + // for unrooted same-plugin paths, so strip `.md` ourselves. + if (SITE_ABSOLUTE_MD_RE.test(original)) { + const stripped = original.toLowerCase().endsWith('.mdx') + ? original.slice(0, -'.mdx'.length) + : original.slice(0, -'.md'.length); + return `${stripped}/${suffix}`; + } + + if (isAsset) { + const root = (options.projectRoot ?? process.cwd()).replace(/\\/g, '/'); + const raw = sourceFile.replace(/\\/g, '/'); + const source = path.posix.isAbsolute(raw) + ? path.posix.relative(root, raw) + : raw; + const repoPath = path.posix.normalize( + path.posix.join(path.posix.dirname(source), original), + ); + const base = options.assetBaseUrl!.replace(/\/+$/, ''); + return `${base}/${repoPath}${suffix}`; + } + + return href; +} + +/** + * The remark plugin. Visits `link`, `image`, and `definition` nodes and + * applies {@link rewriteHref} to their `url`. `linkReference` nodes are + * resolved through their corresponding `definition`, so they're covered too. + */ +const remarkRewriteLinks: Plugin<[Options?], Root> = (options = {}) => { + return (tree, file: VFile) => { + const sourceFile = file.path ?? ''; + visit(tree, ['link', 'image', 'definition'], (node) => { + const n = node as Link | Image | Definition; + const next = rewriteHref(n.url, sourceFile, options); + if (next !== n.url) n.url = next; + }); + }; +}; + +export default remarkRewriteLinks; diff --git a/package-lock.json b/package-lock.json index d88037fa..99a3e254 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4873,13 +4873,13 @@ } }, "node_modules/@jsonjoy.com/fs-core": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.1.tgz", - "integrity": "sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==", + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.2.tgz", + "integrity": "sha512-SVjwklkpIV5wrynpYtuYnfYH1QF4/nDuLBX7VXdb+3miglcAgBVZb/5y0cOsehRV/9Vb+3UqhkMq3/NR3ztdkQ==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.1", - "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", "thingies": "^2.5.0" }, "engines": { @@ -4894,14 +4894,14 @@ } }, "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.1.tgz", - "integrity": "sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==", + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.2.tgz", + "integrity": "sha512-fhO8+iR2I+OCw668ISDJdn1aArc9zx033sWejIyzQ8RBeXa9bDSaUeA3ix0poYOfrj1KdOzytmYNv2/uLDfV6g==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.1", - "@jsonjoy.com/fs-node-builtins": "4.57.1", - "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", "thingies": "^2.5.0" }, "engines": { @@ -4916,16 +4916,16 @@ } }, "node_modules/@jsonjoy.com/fs-node": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.1.tgz", - "integrity": "sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==", + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.2.tgz", + "integrity": "sha512-nX2AdL6cOFwLdju9G4/nbRnYevmCJbh7N7hvR3gGm97Cs60uEjyd0rpR+YBS7cTg175zzl22pGKXR5USaQMvKg==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.1", - "@jsonjoy.com/fs-node-builtins": "4.57.1", - "@jsonjoy.com/fs-node-utils": "4.57.1", - "@jsonjoy.com/fs-print": "4.57.1", - "@jsonjoy.com/fs-snapshot": "4.57.1", + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "@jsonjoy.com/fs-print": "4.57.2", + "@jsonjoy.com/fs-snapshot": "4.57.2", "glob-to-regex.js": "^1.0.0", "thingies": "^2.5.0" }, @@ -4941,9 +4941,9 @@ } }, "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.1.tgz", - "integrity": "sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==", + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.2.tgz", + "integrity": "sha512-xhiegylRmhw43Ki2HO1ZBL7DQ5ja/qpRsL29VtQ2xuUHiuDGbgf2uD4p9Qd8hJI5P6RCtGYD50IXHXVq/Ocjcg==", "license": "Apache-2.0", "engines": { "node": ">=10.0" @@ -4957,14 +4957,14 @@ } }, "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.1.tgz", - "integrity": "sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==", + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.2.tgz", + "integrity": "sha512-18LmWTSONhoAPW+IWRuf8w/+zRolPFGPeGwMxlAhhfY11EKzX+5XHDBPAw67dBF5dxDErHJbl40U+3IXSDRXSQ==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-fsa": "4.57.1", - "@jsonjoy.com/fs-node-builtins": "4.57.1", - "@jsonjoy.com/fs-node-utils": "4.57.1" + "@jsonjoy.com/fs-fsa": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2" }, "engines": { "node": ">=10.0" @@ -4978,12 +4978,12 @@ } }, "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.1.tgz", - "integrity": "sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==", + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.2.tgz", + "integrity": "sha512-rsPSJgekz43IlNbLyAM/Ab+ouYLWGp5DDBfYBNNEqDaSpsbXfthBn29Q4muFA9L0F+Z3mKo+CWlgSCXrf+mOyQ==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.1" + "@jsonjoy.com/fs-node-builtins": "4.57.2" }, "engines": { "node": ">=10.0" @@ -4997,12 +4997,12 @@ } }, "node_modules/@jsonjoy.com/fs-print": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.1.tgz", - "integrity": "sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==", + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.2.tgz", + "integrity": "sha512-wK9NSow48i4DbDl9F1CQE5TqnyZOJ04elU3WFG5aJ76p+YxO/ulyBBQvKsessPxdo381Bc2pcEoyPujMOhcRqQ==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.2", "tree-dump": "^1.1.0" }, "engines": { @@ -5017,13 +5017,13 @@ } }, "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.1.tgz", - "integrity": "sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==", + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.2.tgz", + "integrity": "sha512-GdduDZuoP5V/QCgJkx9+BZ6SC0EZ/smXAdTS7PfMqgMTGXLlt/bH/FqMYaqB9JmLf05sJPtO0XRbAwwkEEPbVw==", "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.2", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, @@ -12562,19 +12562,19 @@ } }, "node_modules/memfs": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.1.tgz", - "integrity": "sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==", + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.2.tgz", + "integrity": "sha512-2nWzSsJzrukurSDna4Z0WywuScK4Id3tSKejgu74u8KCdW4uNrseKRSIDg75C6Yw5ZRqBe0F0EtMNlTbUq8bAQ==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.1", - "@jsonjoy.com/fs-fsa": "4.57.1", - "@jsonjoy.com/fs-node": "4.57.1", - "@jsonjoy.com/fs-node-builtins": "4.57.1", - "@jsonjoy.com/fs-node-to-fsa": "4.57.1", - "@jsonjoy.com/fs-node-utils": "4.57.1", - "@jsonjoy.com/fs-print": "4.57.1", - "@jsonjoy.com/fs-snapshot": "4.57.1", + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-fsa": "4.57.2", + "@jsonjoy.com/fs-node": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-to-fsa": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "@jsonjoy.com/fs-print": "4.57.2", + "@jsonjoy.com/fs-snapshot": "4.57.2", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -19351,9 +19351,9 @@ } }, "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "devOptional": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index 4e824f08..d36847c4 100644 --- a/package.json +++ b/package.json @@ -10,12 +10,8 @@ "_check:links-md": "bash -c 'for f in *.md `find analyses -name \"*.md\"`; do npx markdown-link-check --config .markdown-link-check.json -p -v $f || exit 1; done'", "_check:links:internal": "npm run _check:links -- HTMLTEST_ARGS='--skip-external'", "_check:links": "make --keep-going check-links", - "_check:markdown:1": "npx -p markdownlint-cli markdownlint -c .markdownlint.yaml", - "_check:markdown:all": "npm run -s _list:check:md | xargs -I {} -P 4 npx -p markdownlint-cli markdownlint -c .markdownlint.yaml {}", - "_check:markdown:delta": "npm run -s _list:git:delta | xargs -I {} npx -p markdownlint-cli markdownlint -c .markdownlint.yaml {}", + "_check:markdown": "npx -p markdownlint-cli markdownlint -c .markdownlint.yaml -p .markdownlintignore", "_list:check:*": "npm run --loglevel=warn | grep -Ee '^\\s*check:[^:]+$'", - "_list:check:md:no-analysis": "find . -name '*.md' -not -path '*/node_modules/*' -a -not -path '*/.?*' -a -not -path './analyses/*'", - "_list:check:md": "find . -name '*.md' -not -path '*/node_modules/*' -a -not -path '*/.?*' -a -not -path './analyses/*'", "_list:fix:*": "npm run --loglevel=warn | grep -Ee '^\\s*fix:[^:]+$' | grep -v 'fix:all'", "_list:git:delta": "git diff --name-only --diff-filter=ACMR | grep -E '\\.(js|md|scss|yml|yaml)$'", "build:preview": "npm run _build", @@ -23,7 +19,7 @@ "build": "BUILD_ENV=dev npm run _build", "check:format": "npm run _check:format || (echo '[help] Run: npm run fix:format'; exit 1)", "check:links": "npm run _check:links", - "check:markdown": "npm run _check:markdown:all", + "check:markdown": "npm run _check:markdown -- .", "check:spelling": "npx cspell --no-progress -c .cspell.yml analyses docs *.md", "check": "npm run seq -- $(npm run -s _list:check:*)", "docus:build": "docusaurus build", @@ -41,7 +37,8 @@ "precheck:links": "npm run build", "seq": "bash -c 'for cmd in \"$@\"; do npm run $cmd || exit 1; done' - ", "serve": "npm run docus:serve", - "test": "npm run check", + "test:unit": "node --experimental-strip-types --test 'lib/**/*.test.mts'", + "test": "npm run check && npm run test:unit", "typecheck": "tsc", "update:packages": "npx npm-check-updates -u" }, diff --git a/sidebarsAnalyses.ts b/sidebarsAnalyses.ts new file mode 100644 index 00000000..004b6053 --- /dev/null +++ b/sidebarsAnalyses.ts @@ -0,0 +1,7 @@ +import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'; + +const sidebars: SidebarsConfig = { + analysesSidebar: [{ type: 'autogenerated', dirName: '.' }], +}; + +export default sidebars; diff --git a/static/refcache.json b/static/refcache.json index fc34510f..6263bffb 100644 --- a/static/refcache.json +++ b/static/refcache.json @@ -3,10 +3,74 @@ "StatusCode": 200, "LastSeen": "2026-03-30T15:42:08.467987-04:00" }, + "https://app.harness.io/auth/#/signin": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.171631-04:00" + }, + "https://backstage.io": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:11.844222-04:00" + }, + "https://backstage.io/community": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.260016-04:00" + }, + "https://backstage.io/docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.286274-04:00" + }, + "https://backstage.io/docs/contribute/getting-involved#write-documentation-or-improve-the-website": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.322167-04:00" + }, + "https://backstage.io/docs/deployment/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.753897-04:00" + }, + "https://backstage.io/docs/features/software-catalog/system-model": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:11.913967-04:00" + }, + "https://backstage.io/docs/getting-started/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.198795-04:00" + }, + "https://backstage.io/docs/overview/what-is-backstage": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.757369-04:00" + }, + "https://backstage.io/docs/overview/what-is-backstage#benefits": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.926426-04:00" + }, + "https://backstage.io/docs/references/glossary/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.31966-04:00" + }, + "https://backstage.io/docs/releases/v1.17.0": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.468809-04:00" + }, + "https://backstage.spotify.com/": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:12.68921-04:00" + }, "https://blog.rook.io/": { "StatusCode": 200, "LastSeen": "2026-03-30T15:50:24.152457-04:00" }, + "https://bulma.io/": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:12.600469-04:00" + }, + "https://clomonitor.io": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:17.859175-04:00" + }, + "https://clotributor.dev/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.804513-04:00" + }, "https://cloud-native.slack.com": { "StatusCode": 200, "LastSeen": "2026-03-30T15:42:18.773037-04:00" @@ -15,6 +79,10 @@ "StatusCode": 200, "LastSeen": "2026-03-30T15:42:19.40547-04:00" }, + "https://cluster-api.sigs.k8s.io/contributing#versioning": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.435765-04:00" + }, "https://cncf-techdocs.netlify.app/": { "StatusCode": 206, "LastSeen": "2025-03-19T11:52:38.431682-04:00" @@ -119,6 +187,14 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:05.214193-04:00" }, + "https://deislabs.io/posts/a-fistful-of-states/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.533216-04:00" + }, + "https://deislabs.io/posts/introducing-krator/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.788736-04:00" + }, "https://developer.mozilla.org/en-US/docs/Web/Accessibility": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:07.126948-04:00" @@ -147,10 +223,18 @@ "StatusCode": 200, "LastSeen": "2026-03-30T15:42:03.327195-04:00" }, + "https://developers.google.com/style/procedures": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:25.531428-04:00" + }, "https://developers.google.com/tech-writing": { "StatusCode": 200, "LastSeen": "2026-03-30T15:42:09.240702-04:00" }, + "https://discord.gg/backstage-687207715902193673": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:21.643717-04:00" + }, "https://discourse.gohugo.io/t/audit-your-published-site-for-problems/35184": { "StatusCode": 200, "LastSeen": "2026-03-30T15:42:03.321157-04:00" @@ -171,6 +255,30 @@ "StatusCode": 200, "LastSeen": "2026-03-30T15:42:09.171241-04:00" }, + "https://docs.litmuschaos.io/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.025159-04:00" + }, + "https://docs.litmuschaos.io/docs/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.370926-04:00" + }, + "https://docs.litmuschaos.io/docs/getting-started/installation": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.416578-04:00" + }, + "https://docs.litmuschaos.io/docs/introduction/community": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.320867-04:00" + }, + "https://docs.litmuschaos.io/docs/introduction/what-is-litmus": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.943354-04:00" + }, + "https://docs.litmuschaos.io/docs/user-guides/chaoscenter-advanced-installation": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.998307-04:00" + }, "https://docs.netlify.com/domains-https/custom-domains/multiple-domains/": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:07.340443-04:00" @@ -179,6 +287,10 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:06.919207-04:00" }, + "https://docs.rs/krator/0.4.0/krator/": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:15.314302-04:00" + }, "https://docsearch.algolia.com/": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:04.078587-04:00" @@ -191,14 +303,170 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:10.06588-04:00" }, + "https://en.wikipedia.org/wiki/Principle_of_least_astonishment": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:18.328805-04:00" + }, + "https://etcd.io": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.351583-04:00" + }, + "https://etcd.io/community/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.930505-04:00" + }, + "https://etcd.io/docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.034675-04:00" + }, + "https://etcd.io/docs/v3.5/install/#installation-as-part-of-kubernetes-installation": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.272227-04:00" + }, + "https://etcd.io/docs/v3.5/install/#installation-check": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.184245-04:00" + }, + "https://etcd.io/docs/v3.5/install/#linux": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.73629-04:00" + }, + "https://etcd.io/docs/v3.5/learning/api/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.593776-04:00" + }, + "https://etcd.io/docs/v3.5/op-guide/authentication/authentication/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.104081-04:00" + }, + "https://etcd.io/docs/v3.5/op-guide/authentication/rbac/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.497695-04:00" + }, + "https://etcd.io/docs/v3.5/op-guide/supported-platform/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.064672-04:00" + }, + "https://etcd.io/docs/v3.5/reporting_bugs/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.666149-04:00" + }, + "https://etcd.io/docs/v3.5/triage/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.123722-04:00" + }, "https://expertsupport.com/library/quick-and-easy-document-specifications/": { "StatusCode": 200, "LastSeen": "2026-03-30T15:42:05.188444-04:00" }, + "https://expertsupport.com/library/the-ideal-documentation-suite-for-software-developers/": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:21.105191-04:00" + }, "https://falco.org/docs/getting-started/": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:04.808268-04:00" }, + "https://fluxcd.io/docs/cmd/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.187872-04:00" + }, + "https://fluxcd.io/docs/components/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.097304-04:00" + }, + "https://fluxcd.io/docs/components/helm/helmreleases/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.370632-04:00" + }, + "https://fluxcd.io/docs/concepts/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.29252-04:00" + }, + "https://fluxcd.io/docs/contributing/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.603835-04:00" + }, + "https://fluxcd.io/docs/contributing/docs/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.647997-04:00" + }, + "https://fluxcd.io/docs/contributing/flux/#communications": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.58071-04:00" + }, + "https://fluxcd.io/docs/get-started/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.618439-04:00" + }, + "https://fluxcd.io/docs/gitops-toolkit/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.782479-04:00" + }, + "https://fluxcd.io/docs/guides/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:11.979764-04:00" + }, + "https://fluxcd.io/docs/installation/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.947376-04:00" + }, + "https://fluxcd.io/docs/migration/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.531093-04:00" + }, + "https://fluxcd.io/docs/use-cases/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.797516-04:00" + }, + "https://fluxcd.io/governance/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.924909-04:00" + }, + "https://gateway-api.sigs.k8s.io/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.87937-04:00" + }, + "https://gateway-api.sigs.k8s.io/#gateway-api-concepts": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.795126-04:00" + }, + "https://gateway-api.sigs.k8s.io/concepts/guidelines/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.314115-04:00" + }, + "https://gateway-api.sigs.k8s.io/contributing/community/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.310522-04:00" + }, + "https://gateway-api.sigs.k8s.io/contributing/community/#communications": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.021269-04:00" + }, + "https://gateway-api.sigs.k8s.io/contributing/devguide/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.864137-04:00" + }, + "https://gateway-api.sigs.k8s.io/implementations/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.103568-04:00" + }, + "https://getporter.org": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.803638-04:00" + }, + "https://getporter.org/operator": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.077667-04:00" + }, + "https://getporter.org/operator/quickstart/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.847129-04:00" + }, + "https://getporter.org/quickstart/desired-state/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.454248-04:00" + }, "https://git-scm.com/book/en/v2/Git-Tools-Submodules": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:05.031791-04:00" @@ -211,6 +479,50 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:05.113695-04:00" }, + "https://github.com/backstage": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.282208-04:00" + }, + "https://github.com/backstage/backstage": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.187671-04:00" + }, + "https://github.com/backstage/backstage/blob/master/CONTRIBUTING.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.892052-04:00" + }, + "https://github.com/backstage/backstage/blob/master/README.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.091266-04:00" + }, + "https://github.com/backstage/backstage/blob/master/docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.562656-04:00" + }, + "https://github.com/backstage/backstage/blob/master/microsite": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.69772-04:00" + }, + "https://github.com/backstage/backstage/issues": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.439938-04:00" + }, + "https://github.com/backstage/backstage/issues/21893": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.275481-04:00" + }, + "https://github.com/backstage/backstage/tree/master/microsite": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.049022-04:00" + }, + "https://github.com/backstage/community": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.219173-04:00" + }, + "https://github.com/backstage/community/blob/main/GOVERNANCE.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.836939-04:00" + }, "https://github.com/brianpursley": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:11.984654-04:00" @@ -231,6 +543,18 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:05.637961-04:00" }, + "https://github.com/cncf/artwork/tree/master/projects/notary": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:24.729438-04:00" + }, + "https://github.com/cncf/clotributor": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.704434-04:00" + }, + "https://github.com/cncf/foundation/blob/main/charter.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.956165-04:00" + }, "https://github.com/cncf/foundation/blob/main/policies-guidance/website-guidelines.md": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:04.292849-04:00" @@ -283,10 +607,22 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:05.21562-04:00" }, + "https://github.com/cncf/techdocs/blob/main/LICENSE": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:18:02.163486-04:00" + }, + "https://github.com/cncf/techdocs/blob/main/LICENSE-CODE": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:18:02.593671-04:00" + }, "https://github.com/cncf/techdocs/blob/main/README.md": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:10.050679-04:00" }, + "https://github.com/cncf/techdocs/blob/main/analyses/2023/backstage/backstage-doc-survey.csv": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:18:02.313147-04:00" + }, "https://github.com/cncf/techdocs/issues": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:04.989619-04:00" @@ -295,6 +631,10 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:06.957591-04:00" }, + "https://github.com/cncf/techdocs/pull/215": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.362208-04:00" + }, "https://github.com/cncf/techdocs/tree/main/analyses": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:04.345559-04:00" @@ -387,6 +727,14 @@ "StatusCode": 206, "LastSeen": "2025-03-19T11:52:41.016034-04:00" }, + "https://github.com/cncf/toc/blob/main/DEFINITION.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.141604-04:00" + }, + "https://github.com/cncf/toc/tree/main/process#cncf-project-lifecycle--process": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.927872-04:00" + }, "https://github.com/cncf/toc/tree/main/process#ii-stages---definitions--expectations": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:05.651454-04:00" @@ -395,150 +743,1586 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:11.372267-04:00" }, - "https://github.com/etcd-io/website/pull/403": { + "https://github.com/etcd-io/etcd": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:07.944503-04:00" + "LastSeen": "2026-04-16T21:15:14.798963-04:00" }, - "https://github.com/helm/community": { + "https://github.com/etcd-io/etcd/blob/main/CONTRIBUTING.md": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:08.988248-04:00" + "LastSeen": "2026-04-16T21:15:21.157294-04:00" }, - "https://github.com/hhiroshell": { + "https://github.com/etcd-io/etcd/blob/main/Documentation/contributor-guide/features.md": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:08.051467-04:00" + "LastSeen": "2026-04-16T21:15:14.564594-04:00" }, - "https://github.com/jonasrosland": { + "https://github.com/etcd-io/etcd/blob/main/GOVERNANCE.md": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:10.181949-04:00" + "LastSeen": "2026-04-16T21:15:21.540155-04:00" }, - "https://github.com/kaitoii11": { + "https://github.com/etcd-io/etcd/blob/main/README.md": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:06.157469-04:00" + "LastSeen": "2026-04-16T21:15:17.838064-04:00" }, - "https://github.com/kenta-iijima": { + "https://github.com/etcd-io/etcd/discussions": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:18.391798-04:00" + "LastSeen": "2026-04-16T21:15:20.54328-04:00" }, - "https://github.com/krook": { + "https://github.com/etcd-io/website": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:54:06.299038-04:00" + "LastSeen": "2026-04-16T21:15:13.924872-04:00" }, - "https://github.com/kubernetes/website/blob/072d4b41b45f5311538c24d375432a755f9e3f4c/layouts/partials/navbar-version-selector.html": { + "https://github.com/etcd-io/website/blob/main/OWNERS": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:13.428114-04:00" + "LastSeen": "2026-04-16T21:15:18.966957-04:00" }, - "https://github.com/kubernetes/website/blob/7462297ee388332a7b0d27625929fbf44d0c1ea9/config.toml": { + "https://github.com/etcd-io/website/blob/main/README.md": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:14.486692-04:00" + "LastSeen": "2026-04-16T21:15:18.321327-04:00" }, - "https://github.com/kubernetes/website/blob/main/hugo.toml": { + "https://github.com/etcd-io/website/issues/766": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:05.75394-04:00" + "LastSeen": "2026-04-16T21:15:12.537278-04:00" }, - "https://github.com/kubernetes/website/blob/main/layouts/partials/navbar-version-selector.html": { + "https://github.com/etcd-io/website/issues/790": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:04.868363-04:00" + "LastSeen": "2026-04-16T21:15:12.5184-04:00" }, - "https://github.com/longhorn/website": { + "https://github.com/etcd-io/website/pull/403": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:06.890572-04:00" + "LastSeen": "2026-03-30T15:42:07.944503-04:00" }, - "https://github.com/naonishijima": { + "https://github.com/etcd-io/website/tree/main": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:05.474373-04:00" + "LastSeen": "2026-04-16T21:15:22.154617-04:00" }, - "https://github.com/nate-double-u": { + "https://github.com/flatcar/flatcar-website": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:04.498525-04:00" + "LastSeen": "2026-04-16T21:15:14.378227-04:00" }, - "https://github.com/nate-double-u/technical-documentation-versioning": { + "https://github.com/fluxcd/community": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:07.210219-04:00" + "LastSeen": "2026-04-16T21:15:18.204956-04:00" }, - "https://github.com/nats-io/nats-site/blob/master/MAINTAINERS.md": { + "https://github.com/fluxcd/community/blob/main/GOVERNANCE.md": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:06.212203-04:00" + "LastSeen": "2026-04-16T21:15:22.378168-04:00" }, - "https://github.com/nrb": { + "https://github.com/fluxcd/community/blob/main/community-roles.md": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:08.823263-04:00" + "LastSeen": "2026-04-16T21:15:22.915367-04:00" }, - "https://github.com/opentracing/opentracing.io/issues": { + "https://github.com/fluxcd/flux2/issues": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:08.233122-04:00" + "LastSeen": "2026-04-16T21:15:21.321373-04:00" }, - "https://github.com/sftim": { + "https://github.com/fluxcd/website/blob/main/MAINTAINERS": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:13.756388-04:00" + "LastSeen": "2026-04-16T21:15:19.212238-04:00" }, - "https://github.com/tbatard": { + "https://github.com/fluxcd/website/blob/main/hack/import-flux2-assets.sh": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:07.630335-04:00" + "LastSeen": "2026-04-16T21:15:19.788835-04:00" }, - "https://github.com/thisisobate": { + "https://github.com/fluxcd/website/tree/main/external-sources": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:05.996396-04:00" + "LastSeen": "2026-04-16T21:15:17.036438-04:00" }, - "https://github.com/vitessio/website/pull/1119": { + "https://github.com/getporter/operator": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:06.694925-04:00" + "LastSeen": "2026-04-16T21:15:16.029977-04:00" }, - "https://github.com/vmware-tanzu/velero/blob/1fd49f4fd66ecf6cd959ce258efbd9a549d8902b/site/config.yaml": { + "https://github.com/getporter/porter": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:11.324475-04:00" + "LastSeen": "2026-04-16T21:15:14.758986-04:00" }, - "https://github.com/vmware-tanzu/velero/blob/db403c6c54b0048fada2b5db628c44be4ac0fd79/site/layouts/docs/versions.html": { + "https://github.com/helm/community": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:08.409221-04:00" + "LastSeen": "2026-03-30T15:42:08.988248-04:00" }, - "https://goharbor.io/": { + "https://github.com/helm/helm": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:13.037058-04:00" + "LastSeen": "2026-04-16T21:15:14.056312-04:00" }, - "https://helm.sh/": { + "https://github.com/helm/helm-www": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:12.576727-04:00" + "LastSeen": "2026-04-16T21:15:13.269488-04:00" }, - "https://inclusivenaming.org": { + "https://github.com/helm/helm-www/blob/main/OWNERS": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:04.342304-04:00" + "LastSeen": "2026-04-16T21:15:28.213231-04:00" }, - "https://kubernetes.io": { + "https://github.com/helm/helm-www/blob/main/README.md#versioning": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:13.503668-04:00" + "LastSeen": "2026-04-16T21:15:27.792502-04:00" }, - "https://kubernetes.io/docs/": { + "https://github.com/helm/helm-www/issues": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:05.343069-04:00" + "LastSeen": "2026-04-16T21:15:15.019817-04:00" }, - "https://kubernetes.io/ja/docs/contribute/localization/#style-guide": { + "https://github.com/helm/helm-www/pull/1629": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:03.476847-04:00" + "LastSeen": "2026-04-16T21:15:18.636091-04:00" }, - "https://lunrjs.com/": { + "https://github.com/helm/helm/pull/13154": { "StatusCode": 206, - "LastSeen": "2026-03-30T15:42:04.679563-04:00" + "LastSeen": "2026-04-16T21:15:24.220093-04:00" }, - "https://prometheus.io/community/": { - "StatusCode": 200, - "LastSeen": "2026-03-30T15:42:07.210126-04:00" - }, - "https://prometheus.io/docs": { - "StatusCode": 200, - "LastSeen": "2026-03-30T15:42:04.092013-04:00" + "https://github.com/helm/helm/pull/13604": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.549796-04:00" }, - "https://servicedesk.cncf.io": { - "StatusCode": 200, - "LastSeen": "2026-03-30T15:42:06.388194-04:00" + "https://github.com/helm/helm/pull/13655": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.66461-04:00" }, - "https://servicedesk.cncf.io/": { - "StatusCode": 200, - "LastSeen": "2026-03-30T15:42:04.134716-04:00" + "https://github.com/helm/helm/pull/30718": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.908322-04:00" + }, + "https://github.com/hhiroshell": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:08.051467-04:00" + }, + "https://github.com/in-toto": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.301203-04:00" + }, + "https://github.com/in-toto/ITE/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.241852-04:00" + }, + "https://github.com/in-toto/ITE/blob/master/ITE/1/README.adoc": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.663409-04:00" + }, + "https://github.com/in-toto/ITE/blob/master/ITE/1/README.adoc#abstract": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.413874-04:00" + }, + "https://github.com/in-toto/ITE/blob/master/README.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.302249-04:00" + }, + "https://github.com/in-toto/attestation": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.398208-04:00" + }, + "https://github.com/in-toto/community/blob/main/CODE-OF-CONDUCT.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.408941-04:00" + }, + "https://github.com/in-toto/community/blob/main/CONTRIBUTING.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.680529-04:00" + }, + "https://github.com/in-toto/community/blob/main/GOVERNANCE.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.326623-04:00" + }, + "https://github.com/in-toto/community/blob/main/README.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.936592-04:00" + }, + "https://github.com/in-toto/community/issues/9": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.792814-04:00" + }, + "https://github.com/in-toto/demo": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.38875-04:00" + }, + "https://github.com/in-toto/docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.211333-04:00" + }, + "https://github.com/in-toto/docs/blob/master/in-toto-spec.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.636339-04:00" + }, + "https://github.com/in-toto/docs/blob/master/in-toto-spec.md#17-terminology": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.97615-04:00" + }, + "https://github.com/in-toto/docs/blob/master/in-toto-spec.md#2-system-overview": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.347521-04:00" + }, + "https://github.com/in-toto/docs/blob/v1.0/in-toto-spec.md#51-workflow-description": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.199922-04:00" + }, + "https://github.com/in-toto/docs/tree/master/in-toto-spec.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.331788-04:00" + }, + "https://github.com/in-toto/friends": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.040143-04:00" + }, + "https://github.com/in-toto/in-toto": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.150198-04:00" + }, + "https://github.com/in-toto/in-toto-golang": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.720203-04:00" + }, + "https://github.com/in-toto/in-toto-java": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.36451-04:00" + }, + "https://github.com/in-toto/in-toto-rs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.045346-04:00" + }, + "https://github.com/in-toto/in-toto.io": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.115131-04:00" + }, + "https://github.com/in-toto/in-toto/blob/develop/doc/source/index.rst": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.017921-04:00" + }, + "https://github.com/jonasrosland": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:10.181949-04:00" + }, + "https://github.com/kaitoii11": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:06.157469-04:00" + }, + "https://github.com/kedacore/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.636185-04:00" + }, + "https://github.com/kedacore/governance": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.937812-04:00" + }, + "https://github.com/kedacore/keda": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.854043-04:00" + }, + "https://github.com/kedacore/keda-docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.324575-04:00" + }, + "https://github.com/kedacore/keda-docs/blob/main/README.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.825739-04:00" + }, + "https://github.com/kedacore/keda-docs/issues/1361": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.875875-04:00" + }, + "https://github.com/kedacore/sample-azure-functions-on-ocp4": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.799328-04:00" + }, + "https://github.com/kedacore/sample-go-rabbitmq": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.892284-04:00" + }, + "https://github.com/kedacore/sample-hello-world-azure-functions": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.047455-04:00" + }, + "https://github.com/kedacore/samples": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.718527-04:00" + }, + "https://github.com/kenta-iijima": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:18.391798-04:00" + }, + "https://github.com/knative/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.167424-04:00" + }, + "https://github.com/knative/client": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.441899-04:00" + }, + "https://github.com/knative/client/releases": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:28.171686-04:00" + }, + "https://github.com/knative/community": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.602361-04:00" + }, + "https://github.com/knative/community/blob/main/GOVERNANCE.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.806022-04:00" + }, + "https://github.com/knative/community/blob/main/working-groups/security/threat-model.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.162198-04:00" + }, + "https://github.com/knative/docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.719469-04:00" + }, + "https://github.com/knative/docs/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.91018-04:00" + }, + "https://github.com/knative/docs/blob/main/contribute-to-docs/style-guide/voice-and-language.md#avoid-statements-that-will-soon-be-out-of-date": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.389714-04:00" + }, + "https://github.com/knative/docs/blob/main/mkdocs.yml": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:28.723936-04:00" + }, + "https://github.com/knative/docs/issues/5331": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.374086-04:00" + }, + "https://github.com/knative/docs/issues/6216": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.562871-04:00" + }, + "https://github.com/knative/docs/tree/main/contribute-to-docs/style-guide": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.892835-04:00" + }, + "https://github.com/knative/eventing": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.586198-04:00" + }, + "https://github.com/knative/func": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.17485-04:00" + }, + "https://github.com/knative/serving": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.892016-04:00" + }, + "https://github.com/krator-rs/krator": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.453262-04:00" + }, + "https://github.com/krator-rs/krator/blob/main/CODEOWNERS": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.957144-04:00" + }, + "https://github.com/krator-rs/krator/blob/main/CONTRIBUTING.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.230322-04:00" + }, + "https://github.com/krator-rs/krator/blob/main/docs/community/developers.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.771294-04:00" + }, + "https://github.com/krator-rs/krator/blob/main/docs/community/release-checklist.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.560197-04:00" + }, + "https://github.com/krator-rs/krator/tree/main/docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.988366-04:00" + }, + "https://github.com/krook": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:54:06.299038-04:00" + }, + "https://github.com/kubernetes-sigs/gateway-api": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.191889-04:00" + }, + "https://github.com/kubernetes-sigs/gateway-api#readme": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.171353-04:00" + }, + "https://github.com/kubernetes-sigs/gateway-api/blob/master/CONTRIBUTING.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.691754-04:00" + }, + "https://github.com/kubernetes-sigs/gateway-api/blob/master/OWNERS_ALIASES": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.134575-04:00" + }, + "https://github.com/kubernetes-sigs/gateway-api/blob/master/hack/make-docs.sh": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.976302-04:00" + }, + "https://github.com/kubernetes-sigs/gateway-api/issues": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.962786-04:00" + }, + "https://github.com/kubernetes/community/blob/master/contributors/guide/help-wanted.md#good-first-issue": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.213473-04:00" + }, + "https://github.com/kubernetes/community/blob/master/governance.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.391385-04:00" + }, + "https://github.com/kubernetes/website/blob/072d4b41b45f5311538c24d375432a755f9e3f4c/layouts/partials/navbar-version-selector.html": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:13.428114-04:00" + }, + "https://github.com/kubernetes/website/blob/7462297ee388332a7b0d27625929fbf44d0c1ea9/config.toml": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:14.486692-04:00" + }, + "https://github.com/kubernetes/website/blob/main/hugo.toml": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:05.75394-04:00" + }, + "https://github.com/kubernetes/website/blob/main/layouts/partials/navbar-version-selector.html": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:04.868363-04:00" + }, + "https://github.com/kubernetes/website/issues/13864": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.06314-04:00" + }, + "https://github.com/kubernetes/website/issues/28621": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:31.582512-04:00" + }, + "https://github.com/layer5io/layer5": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.532337-04:00" + }, + "https://github.com/litmuschaos/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.783258-04:00" + }, + "https://github.com/litmuschaos/litmus": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.780778-04:00" + }, + "https://github.com/litmuschaos/litmus-docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.432153-04:00" + }, + "https://github.com/litmuschaos/litmus-docs/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.392069-04:00" + }, + "https://github.com/litmuschaos/litmus-docs/issues": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.513993-04:00" + }, + "https://github.com/litmuschaos/litmus-docs/issues/271": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.659577-04:00" + }, + "https://github.com/litmuschaos/litmus-docs/issues/296": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.652514-04:00" + }, + "https://github.com/litmuschaos/litmus-website-2": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.301134-04:00" + }, + "https://github.com/litmuschaos/litmus/issues": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.614924-04:00" + }, + "https://github.com/litmuschaos/litmus/tree/master/mkdocs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.497985-04:00" + }, + "https://github.com/litmuschaos/spectaql": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.525703-04:00" + }, + "https://github.com/litmuschaos/tutorials": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.322779-04:00" + }, + "https://github.com/litmuschaos/v1-litmus-docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.694362-04:00" + }, + "https://github.com/litmuschaos/website-litmuschaos": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.564631-04:00" + }, + "https://github.com/longhorn/website": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:06.890572-04:00" + }, + "https://github.com/mehabhalodiya": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.08246-04:00" + }, + "https://github.com/naonishijima": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:05.474373-04:00" + }, + "https://github.com/nate-double-u": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:04.498525-04:00" + }, + "https://github.com/nate-double-u/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.989244-04:00" + }, + "https://github.com/nate-double-u/technical-documentation-versioning": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:07.210219-04:00" + }, + "https://github.com/nats-io/nats-site/blob/master/MAINTAINERS.md": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:06.212203-04:00" + }, + "https://github.com/notaryproject": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:25.437344-04:00" + }, + "https://github.com/notaryproject/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.383959-04:00" + }, + "https://github.com/notaryproject/notaryproject": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.989505-04:00" + }, + "https://github.com/notaryproject/notaryproject#notary-v2-overview": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.181955-04:00" + }, + "https://github.com/notaryproject/notaryproject.dev": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.210183-04:00" + }, + "https://github.com/notaryproject/notaryproject.dev/blob/main/.github/settings.yml": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.819182-04:00" + }, + "https://github.com/notaryproject/notaryproject/pull/78": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.182172-04:00" + }, + "https://github.com/notaryproject/nv2": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.912985-04:00" + }, + "https://github.com/notaryproject/specifications/issues/55": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.039582-04:00" + }, + "https://github.com/notaryproject/specifications/issues/77": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.939274-04:00" + }, + "https://github.com/nrb": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:08.823263-04:00" + }, + "https://github.com/opentracing/opentracing.io/issues": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:08.233122-04:00" + }, + "https://github.com/paigecalvert/helm-www/blob/main/CONTRIBUTING.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:28.941618-04:00" + }, + "https://github.com/projectcontour/contour/blob/main/CONTRIBUTING.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.77682-04:00" + }, + "https://github.com/projectcontour/contour/blob/main/SITE_CONTRIBUTION.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.305264-04:00" + }, + "https://github.com/projectcontour/contour/issues/2053": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.150586-04:00" + }, + "https://github.com/projectcontour/contour/issues/2183": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.006132-04:00" + }, + "https://github.com/sftim": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:13.756388-04:00" + }, + "https://github.com/tbatard": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:07.630335-04:00" + }, + "https://github.com/thanos-io/thanos": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.634724-04:00" + }, + "https://github.com/theupdateframework": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.923327-04:00" + }, + "https://github.com/theupdateframework/artwork": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.9861-04:00" + }, + "https://github.com/theupdateframework/community": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.231609-04:00" + }, + "https://github.com/theupdateframework/notary#getting-started-with-the-notary-cli": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.538672-04:00" + }, + "https://github.com/theupdateframework/notary#overview": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.922427-04:00" + }, + "https://github.com/theupdateframework/notary/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:24.895-04:00" + }, + "https://github.com/theupdateframework/notary/tree/master/docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.557684-04:00" + }, + "https://github.com/theupdateframework/python-tuf": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.776227-04:00" + }, + "https://github.com/theupdateframework/specification": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.091267-04:00" + }, + "https://github.com/theupdateframework/taps": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.726706-04:00" + }, + "https://github.com/theupdateframework/theupdateframework.io": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.660311-04:00" + }, + "https://github.com/theupdateframework/tuf-on-ci": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.486389-04:00" + }, + "https://github.com/thisisobate": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:05.996396-04:00" + }, + "https://github.com/thisisobate/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.101649-04:00" + }, + "https://github.com/tremor-rs/tremor-rfcs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:35.047408-04:00" + }, + "https://github.com/tremor-rs/tremor-www-docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.341727-04:00" + }, + "https://github.com/tremor-rs/tremor-www-docs/blob/main/RELEASE_PROCESS.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:24.20203-04:00" + }, + "https://github.com/tremor-rs/tremor-www-docs/issues": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:30.20175-04:00" + }, + "https://github.com/tremor-rs/tremor-www-docs/issues/101": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:30.884319-04:00" + }, + "https://github.com/tremor-rs/tremor-www-docs/tree/main/python_scripts": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.751946-04:00" + }, + "https://github.com/tremor-rs/tremor-www-main": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:34.46766-04:00" + }, + "https://github.com/vitessio": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.826164-04:00" + }, + "https://github.com/vitessio/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.503145-04:00" + }, + "https://github.com/vitessio/vitess/blob/main/CONTRIBUTING.md": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.614838-04:00" + }, + "https://github.com/vitessio/website": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.022327-04:00" + }, + "https://github.com/vitessio/website/pull/1119": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:06.694925-04:00" + }, + "https://github.com/vmware-tanzu/velero/blob/1fd49f4fd66ecf6cd959ce258efbd9a549d8902b/site/config.yaml": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:11.324475-04:00" + }, + "https://github.com/vmware-tanzu/velero/blob/db403c6c54b0048fada2b5db628c44be4ac0fd79/site/layouts/docs/versions.html": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:08.409221-04:00" + }, + "https://goharbor.io/": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:13.037058-04:00" + }, + "https://gohugo.io": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.294301-04:00" + }, + "https://gohugo.io/hugo-modules/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.286722-04:00" + }, + "https://helm.sh/": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:12.576727-04:00" + }, + "https://helm.sh/community": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:29.099856-04:00" + }, + "https://helm.sh/community/#your-first-contribution": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:29.608839-04:00" + }, + "https://helm.sh/community/communication/#mailing-lists": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:29.370955-04:00" + }, + "https://helm.sh/community/developers": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:29.519893-04:00" + }, + "https://helm.sh/community/developers/#troubleshooting": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:26.332766-04:00" + }, + "https://helm.sh/community/governance/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:29.722506-04:00" + }, + "https://helm.sh/community/localization": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:27.269331-04:00" + }, + "https://helm.sh/docs/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.291215-04:00" + }, + "https://helm.sh/docs/changelog": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.425333-04:00" + }, + "https://helm.sh/docs/chart_best_practices/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.664074-04:00" + }, + "https://helm.sh/docs/chart_best_practices/rbac": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.676026-04:00" + }, + "https://helm.sh/docs/chart_template_guide/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.699721-04:00" + }, + "https://helm.sh/docs/chart_template_guide/accessing_files": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:25.945671-04:00" + }, + "https://helm.sh/docs/chart_template_guide/helm_ignore_file": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.047479-04:00" + }, + "https://helm.sh/docs/chart_template_guide/notes_files": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.420225-04:00" + }, + "https://helm.sh/docs/chart_template_guide/wrapping_up": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:26.987693-04:00" + }, + "https://helm.sh/docs/glossary/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.423754-04:00" + }, + "https://helm.sh/docs/helm/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.999255-04:00" + }, + "https://helm.sh/docs/howto/chart_releaser_action": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.326399-04:00" + }, + "https://helm.sh/docs/howto/chart_repository_sync_example": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.750377-04:00" + }, + "https://helm.sh/docs/howto/charts_tips_and_tricks": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.212443-04:00" + }, + "https://helm.sh/docs/howto/charts_tips_and_tricks/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:25.317179-04:00" + }, + "https://helm.sh/docs/intro/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.685683-04:00" + }, + "https://helm.sh/docs/intro/CheatSheet": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.865562-04:00" + }, + "https://helm.sh/docs/intro/install": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.051467-04:00" + }, + "https://helm.sh/docs/intro/quickstart": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.433911-04:00" + }, + "https://helm.sh/docs/intro/using_helm": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.389309-04:00" + }, + "https://helm.sh/docs/intro/using_helm#three-big-concepts": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.946169-04:00" + }, + "https://helm.sh/docs/overview": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.858111-04:00" + }, + "https://helm.sh/docs/plugins/developer/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.459373-04:00" + }, + "https://helm.sh/docs/plugins/developer/tutorial-cli-plugin": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:25.593133-04:00" + }, + "https://helm.sh/docs/plugins/overview": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.871322-04:00" + }, + "https://helm.sh/docs/plugins/user/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.199791-04:00" + }, + "https://helm.sh/docs/sdk/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.225307-04:00" + }, + "https://helm.sh/docs/topics/advanced#post-rendering": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.393506-04:00" + }, + "https://helm.sh/docs/topics/advanced#storage-backends": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.501562-04:00" + }, + "https://helm.sh/docs/topics/architecture": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.098308-04:00" + }, + "https://helm.sh/docs/topics/chart_repository": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.769442-04:00" + }, + "https://helm.sh/docs/topics/chart_tests": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.16043-04:00" + }, + "https://helm.sh/docs/topics/charts": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.555624-04:00" + }, + "https://helm.sh/docs/topics/charts_hooks": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.800441-04:00" + }, + "https://helm.sh/docs/topics/charts_hooks#writing-a-hook": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:26.102411-04:00" + }, + "https://helm.sh/docs/topics/kubernetes_distros": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.542047-04:00" + }, + "https://helm.sh/docs/topics/library_charts": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.40521-04:00" + }, + "https://helm.sh/docs/topics/permissions_sql_storage_backend": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.772863-04:00" + }, + "https://helm.sh/docs/topics/provenance": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.866272-04:00" + }, + "https://helm.sh/docs/topics/rbac": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.219986-04:00" + }, + "https://helm.sh/docs/topics/registries": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.934576-04:00" + }, + "https://helm.sh/docs/topics/registries/#migrating-from-chart-repos": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:28.317824-04:00" + }, + "https://helm.sh/docs/topics/version_skew": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.947673-04:00" + }, + "https://in-toto.io": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:11.902204-04:00" + }, + "https://in-toto.io/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.241065-04:00" + }, + "https://in-toto.io/in-toto": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.995829-04:00" + }, + "https://in-toto.io/in-toto/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.454705-04:00" + }, + "https://in-toto.readthedocs.io/": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:12.695186-04:00" + }, + "https://in-toto.readthedocs.io/en/latest/": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:12.453284-04:00" + }, + "https://in-toto.readthedocs.io/en/latest/api.html": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:19.890227-04:00" + }, + "https://in-toto.readthedocs.io/en/latest/command-line-tools/index.html": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:19.653039-04:00" + }, + "https://in-toto.readthedocs.io/en/latest/configuration.html": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:20.484951-04:00" + }, + "https://in-toto.readthedocs.io/en/latest/installing.html": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:19.455026-04:00" + }, + "https://in-toto.readthedocs.io/en/latest/layout-creation-example.html": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:20.689266-04:00" + }, + "https://in-toto.readthedocs.io/en/latest/model.html": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:20.130292-04:00" + }, + "https://inclusivenaming.org": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:04.342304-04:00" + }, + "https://inclusivenaming.org/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.029923-04:00" + }, + "https://inclusivenaming.org/word-lists/tier-1/abort": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.187853-04:00" + }, + "https://keda.sh": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.184747-04:00" + }, + "https://keda.sh/docs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.034676-04:00" + }, + "https://keda.sh/docs/2.13/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.058881-04:00" + }, + "https://keda.sh/docs/2.13/authentication-providers/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.202323-04:00" + }, + "https://keda.sh/docs/2.13/authentication-providers/aws/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.439459-04:00" + }, + "https://keda.sh/docs/2.13/authentication-providers/secret/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.600027-04:00" + }, + "https://keda.sh/docs/2.13/concepts/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.216315-04:00" + }, + "https://keda.sh/docs/2.13/concepts/admission-webhooks/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.460554-04:00" + }, + "https://keda.sh/docs/2.13/concepts/admission-webhooks/#prevention-rules": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.43557-04:00" + }, + "https://keda.sh/docs/2.13/concepts/authentication/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.252269-04:00" + }, + "https://keda.sh/docs/2.13/concepts/external-scalers/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.051467-04:00" + }, + "https://keda.sh/docs/2.13/concepts/scaling-deployments/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.966422-04:00" + }, + "https://keda.sh/docs/2.13/concepts/scaling-deployments/#caching-metrics": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.35194-04:00" + }, + "https://keda.sh/docs/2.13/concepts/scaling-deployments/#pause-autoscaling": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.421103-04:00" + }, + "https://keda.sh/docs/2.13/concepts/scaling-deployments/#scaledobject-spec": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.65206-04:00" + }, + "https://keda.sh/docs/2.13/concepts/scaling-deployments/#triggers": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.456835-04:00" + }, + "https://keda.sh/docs/2.13/concepts/scaling-jobs/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.546279-04:00" + }, + "https://keda.sh/docs/2.13/concepts/scaling-jobs/#pause-autoscaling": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.463419-04:00" + }, + "https://keda.sh/docs/2.13/concepts/scaling-jobs/#scaledjob-spec": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.690045-04:00" + }, + "https://keda.sh/docs/2.13/concepts/troubleshooting/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.822116-04:00" + }, + "https://keda.sh/docs/2.13/deploy/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.915384-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#helm": { + "StatusCode": 206, + "LastSeen": "2026-04-16T22:00:04.102684-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#install": { + "StatusCode": 206, + "LastSeen": "2026-04-16T22:00:04.151751-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#install-1": { + "StatusCode": 206, + "LastSeen": "2026-04-16T22:00:04.295424-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#install-2": { + "StatusCode": 206, + "LastSeen": "2026-04-16T22:00:04.427294-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#install-3": { + "StatusCode": 206, + "LastSeen": "2026-04-16T22:00:04.578361-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#microk8s": { + "StatusCode": 206, + "LastSeen": "2026-04-16T22:00:04.53162-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#operatorhub": { + "StatusCode": 206, + "LastSeen": "2026-04-16T22:00:04.250964-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#uninstall": { + "StatusCode": 206, + "LastSeen": "2026-04-16T22:00:04.199998-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#uninstall-1": { + "StatusCode": 206, + "LastSeen": "2026-04-16T22:00:04.339678-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#uninstall-2": { + "StatusCode": 206, + "LastSeen": "2026-04-16T22:00:04.477321-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#uninstall-3": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.112648-04:00" + }, + "https://keda.sh/docs/2.13/deploy/#yaml": { + "StatusCode": 206, + "LastSeen": "2026-04-16T22:00:04.379284-04:00" + }, + "https://keda.sh/docs/2.13/integrations/opentelemetry/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.735599-04:00" + }, + "https://keda.sh/docs/2.13/integrations/prometheus/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.329004-04:00" + }, + "https://keda.sh/docs/2.13/migration/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.35194-04:00" + }, + "https://keda.sh/docs/2.13/operate/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.542485-04:00" + }, + "https://keda.sh/docs/2.13/operate/admission-webhooks/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.322131-04:00" + }, + "https://keda.sh/docs/2.13/operate/cluster/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.349279-04:00" + }, + "https://keda.sh/docs/2.13/operate/cluster/#cluster-capacity": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.838089-04:00" + }, + "https://keda.sh/docs/2.13/operate/cluster/#firewall": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.942783-04:00" + }, + "https://keda.sh/docs/2.13/operate/cluster/#http-connection-disable-keep-alive": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.709179-04:00" + }, + "https://keda.sh/docs/2.13/operate/cluster/#http-proxies": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.945286-04:00" + }, + "https://keda.sh/docs/2.13/operate/cluster/#http-timeouts": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.52744-04:00" + }, + "https://keda.sh/docs/2.13/operate/cluster/#kubernetes-compatibility": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.626802-04:00" + }, + "https://keda.sh/docs/2.13/operate/cluster/#requirements": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.332827-04:00" + }, + "https://keda.sh/docs/2.13/operate/events/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.971356-04:00" + }, + "https://keda.sh/docs/2.13/operate/metrics-server/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.664275-04:00" + }, + "https://keda.sh/docs/2.13/operate/metrics-server/#how-to-get-metric-names-from-scaledobject": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.734035-04:00" + }, + "https://keda.sh/docs/2.13/operate/metrics-server/#querying-metrics-exposed-by-keda-metrics-server": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.657483-04:00" + }, + "https://keda.sh/docs/2.13/operate/security/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.14093-04:00" + }, + "https://keda.sh/docs/2.13/reference/faq/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.228235-04:00" + }, + "https://keda.sh/docs/2.13/scalers/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.264076-04:00" + }, + "https://keda.sh/docs/2.13/scalers/activemq/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.39999-04:00" + }, + "https://keda.sh/docs/2.13/scalers/redis-sentinel-lists/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.870219-04:00" + }, + "https://keda.sh/docs/2.13/scalers/redis-sentinel-lists/#authentication-parameters": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.487219-04:00" + }, + "https://keda.sh/docs/2.13/scalers/solr/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.659639-04:00" + }, + "https://keda.sh/docs/2.13/troubleshooting/#google-kubernetes-engine-gke": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.970308-04:00" + }, + "https://knative.dev/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.075461-04:00" + }, + "https://knative.dev/docs/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.516162-04:00" + }, + "https://knative.dev/docs/bookstore/disclaimer/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.959778-04:00" + }, + "https://knative.dev/docs/bookstore/page-0.5/environment-setup/#troubleshooting": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.968352-04:00" + }, + "https://knative.dev/docs/bookstore/page-0/welcome-knative-bookstore-tutorial/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.849012-04:00" + }, + "https://knative.dev/docs/bookstore/page-1/send-review-comment-to-broker/#step-2-create-broker": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:24.856493-04:00" + }, + "https://knative.dev/docs/bookstore/page-2/sentiment-analysis-service-for-bookstore-reviews/#prerequisite-1-install-knative-func-cli": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:25.132102-04:00" + }, + "https://knative.dev/docs/client/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.240375-04:00" + }, + "https://knative.dev/docs/client/install-kn/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.033719-04:00" + }, + "https://knative.dev/docs/client/install-kn/#__tabbed_1_2": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:26.821352-04:00" + }, + "https://knative.dev/docs/eventing/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.764778-04:00" + }, + "https://knative.dev/docs/eventing/brokers/broker-types/kafka-broker/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.70699-04:00" + }, + "https://knative.dev/docs/eventing/configuration/broker-configuration/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.215497-04:00" + }, + "https://knative.dev/docs/eventing/event-mesh/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.192416-04:00" + }, + "https://knative.dev/docs/eventing/reference/eventing-api/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:25.323491-04:00" + }, + "https://knative.dev/docs/getting-started/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:25.515779-04:00" + }, + "https://knative.dev/docs/getting-started/next-steps/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.598674-04:00" + }, + "https://knative.dev/docs/getting-started/tutorial/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:14.791403-04:00" + }, + "https://knative.dev/docs/install/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.950364-04:00" + }, + "https://knative.dev/docs/install/installing-backstage-plugins/#troubleshooting": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:24.251157-04:00" + }, + "https://knative.dev/docs/install/operator/knative-with-operator-cli/#__tabbed_1_1": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:27.073432-04:00" + }, + "https://knative.dev/docs/install/operator/knative-with-operator-cli/#__tabbed_1_2": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:27.150691-04:00" + }, + "https://knative.dev/docs/install/quickstart-install/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.686357-04:00" + }, + "https://knative.dev/docs/install/quickstart-install/#__tabbed_1_2": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:26.737381-04:00" + }, + "https://knative.dev/docs/install/troubleshooting/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:23.726326-04:00" + }, + "https://knative.dev/docs/reference/security/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.349726-04:00" + }, + "https://knative.dev/docs/serving/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.214727-04:00" + }, + "https://knative.dev/docs/serving/architecture/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.226196-04:00" + }, + "https://knative.dev/docs/serving/autoscaling/autoscaling-metrics/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.340025-04:00" + }, + "https://knative.dev/docs/serving/encryption/encryption-overview/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.341184-04:00" + }, + "https://knative.dev/docs/serving/request-flow/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:18.562472-04:00" + }, + "https://knative.dev/docs/serving/revisions/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.077178-04:00" + }, + "https://knative.dev/docs/serving/troubleshooting/debugging-application-issues/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:24.577411-04:00" + }, + "https://kubernetes.io": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:13.503668-04:00" + }, + "https://kubernetes.io/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.319809-04:00" + }, + "https://kubernetes.io/docs/": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:05.343069-04:00" + }, + "https://kubernetes.io/docs/home/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.666117-04:00" + }, + "https://kubernetes.io/docs/setup/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:25.677659-04:00" + }, + "https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.110744-04:00" + }, + "https://kubernetes.io/ja/docs/contribute/localization/#style-guide": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:03.476847-04:00" + }, + "https://litmus.com/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.638313-04:00" + }, + "https://litmuschaos.github.io/litmus/graphql/v2.0.0/api.html": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.753792-04:00" + }, + "https://litmuschaos.github.io/tutorials/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.775668-04:00" + }, + "https://litmuschaos.github.io/tutorials/tutorial-getting-started/index.html#0": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.764757-04:00" + }, + "https://litmuschaos.io/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.39621-04:00" + }, + "https://litmuschaos.io/blog/analysing-chaos-workflows-with-litmus-portal-4e67": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:24.065721-04:00" + }, + "https://litmuschaos.io/blog/chaos-engineering-with-litmus-portal-on-okteto-cloud-3g57": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:24.495952-04:00" + }, + "https://litmuschaos.io/blog/declarative-approach-to-chaos-hypothesis-using-litmus-probes-5157": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:25.406382-04:00" + }, + "https://litmuschaos.io/blog/frontend-optimization-at-litmuschaos-1p14": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:21.418819-04:00" + }, + "https://litmuschaos.io/blog/gcp-iam-integration-for-litmuschaos-with-workload-identity-2eai": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:21.024101-04:00" + }, + "https://litmuschaos.io/blog/getting-started-with-litmus-2-0-in-google-kubernetes-engine-4obf": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:22.585469-04:00" + }, + "https://litmuschaos.io/blog/how-to-contribute-blog-posts-for-litmuschaos-3cnp": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:22.267946-04:00" + }, + "https://litmuschaos.io/blog/how-to-use-react-hooks-in-apollo-client-for-graphql-33bh": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:24.99689-04:00" + }, + "https://litmuschaos.io/blog/introduction-to-http-chaos-in-litmuschaos-3hn": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:20.580029-04:00" + }, + "https://litmuschaos.io/blog/introduction-to-k6-load-chaos-in-litmuschaos-4l2k": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:20.305119-04:00" + }, + "https://litmuschaos.io/blog/litmuschaos-gitlab-remote-templates-6l2": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:25.860184-04:00" + }, + "https://litmuschaos.io/blog/litmuschaos-in-2021-the-year-in-review-38cl": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:21.722837-04:00" + }, + "https://litmuschaos.io/blog/litmuschaos-is-joining-kubecon-cloudnativecon-north-america-2024-3blg": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:19.711761-04:00" + }, + "https://litmuschaos.io/blog/litmuschaos-node-memory-hog-experiment-2nj6": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:23.631911-04:00" + }, + "https://litmuschaos.io/blog/part-1-a-beginner-s-practical-guide-to-containerisation-and-chaos-engineering-with-litmuschaos-2-0-3h5c": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:23.286315-04:00" + }, + "https://litmuschaos.io/blog/part-2-a-beginner-s-practical-guide-to-containerisation-and-chaos-engineering-with-litmuschaos-2-0-253i": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:22.890587-04:00" + }, + "https://litmuschaos.io/community": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.992011-04:00" + }, + "https://lunrjs.com/": { + "StatusCode": 206, + "LastSeen": "2026-03-30T15:42:04.679563-04:00" + }, + "https://miro.com/app/board/uXjVO_1cS9k=/": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:16.509278-04:00" + }, + "https://opentelemetry.io/docs/contributing/localization/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.200107-04:00" + }, + "https://pkg.go.dev/github.com/in-toto/in-toto-golang": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:19.489116-04:00" + }, + "https://pkg.go.dev/github.com/theupdateframework/go-tuf": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:17.738928-04:00" + }, + "https://pkg.go.dev/helm.sh/helm/v4": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:26.767923-04:00" + }, + "https://projectcontour.io/docs/v1.13.1/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.790281-04:00" + }, + "https://projectcontour.io/docs/v1.13.1/architecture": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.228114-04:00" + }, + "https://projectcontour.io/docs/v1.13.1/config/annotations/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.199887-04:00" + }, + "https://projectcontour.io/docs/v1.13.1/config/cors/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.683829-04:00" + }, + "https://projectcontour.io/docs/v1.13.1/start-contributing/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.211177-04:00" + }, + "https://projectcontour.io/getting-started/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.920148-04:00" + }, + "https://projectcontour.io/getting-started/#troubleshooting": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.510367-04:00" + }, + "https://projectcontour.io/resources/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.406083-04:00" + }, + "https://projectcontour.io/resources/how-we-work/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:15.780367-04:00" + }, + "https://projectcontour.io/resources/philosophy": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.065719-04:00" + }, + "https://projectcontour.io/resources/philosophy/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:20.970764-04:00" + }, + "https://prometheus.io/community/": { + "StatusCode": 200, + "LastSeen": "2026-03-30T15:42:07.210126-04:00" + }, + "https://prometheus.io/docs": { + "StatusCode": 200, + "LastSeen": "2026-03-30T15:42:04.092013-04:00" + }, + "https://repository-service-tuf.readthedocs.io": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:18.888139-04:00" + }, + "https://rfcs.tremor.rs": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:33.902088-04:00" + }, + "https://rfcs.tremor.rs/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:33.641556-04:00" + }, + "https://servicedesk.cncf.io": { + "StatusCode": 200, + "LastSeen": "2026-03-30T15:42:06.388194-04:00" + }, + "https://servicedesk.cncf.io/": { + "StatusCode": 200, + "LastSeen": "2026-03-30T15:42:04.134716-04:00" }, "https://slack.cncf.io": { "StatusCode": 200, "LastSeen": "2026-03-30T15:42:20.296404-04:00" }, + "https://smi-spec.io/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.919783-04:00" + }, "https://support.google.com/analytics/answer/10089681": { "StatusCode": 200, "LastSeen": "2026-03-30T15:42:04.053319-04:00" @@ -575,6 +2359,38 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:06.907337-04:00" }, + "https://theupdateframework.github.io/python-tuf": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:21.148934-04:00" + }, + "https://theupdateframework.github.io/specification/latest": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.229847-04:00" + }, + "https://theupdateframework.github.io/specification/latest/#detailed-client-workflow": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.509863-04:00" + }, + "https://theupdateframework.github.io/specification/latest/#fix-time": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:19.37832-04:00" + }, + "https://theupdateframework.io": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.120647-04:00" + }, + "https://theupdateframework.io/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:11.793576-04:00" + }, + "https://theupdateframework.io/docs/getting-started/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:26.170405-04:00" + }, + "https://theupdateframework.readthedocs.io": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:17.255427-04:00" + }, "https://tockify.com/cncf.public.events/monthly": { "StatusCode": 200, "LastSeen": "2026-03-30T15:42:03.99942-04:00" @@ -591,9 +2407,29 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:03.711888-04:00" }, + "https://vitess.io/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:11.80468-04:00" + }, + "https://vitess.io/docs/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.138339-04:00" + }, + "https://vitess.io/docs/contributing/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:16.830153-04:00" + }, + "https://wiki.python.org/moin/BeginnersGuide": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:26.649189-04:00" + }, "https://www.apache.org/licenses/LICENSE-2.0": { "StatusCode": 206, - "LastSeen": "2025-03-19T11:52:39.424491-04:00" + "LastSeen": "2026-04-16T21:18:01.719097-04:00" + }, + "https://www.cncf.io/case-studies/": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:30.884332-04:00" }, "https://www.cncf.io/project-metrics": { "StatusCode": 200, @@ -607,10 +2443,22 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:04.342318-04:00" }, + "https://www.docsy.dev/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.222444-04:00" + }, "https://www.docsy.dev/docs/content/feedback/#adding-analytics": { "StatusCode": 206, "LastSeen": "2026-03-30T15:50:23.907648-04:00" }, + "https://www.flatcar.org": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:13.457255-04:00" + }, + "https://www.flatcar.org/docs/latest": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:12.609579-04:00" + }, "https://www.fluentd.org/testimonials": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:12.835994-04:00" @@ -619,6 +2467,10 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:11.842922-04:00" }, + "https://www.linuxfoundation.org/": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:14.534947-04:00" + }, "https://www.linuxfoundation.org/legal/privacy-policy": { "StatusCode": 200, "LastSeen": "2026-03-30T15:42:03.931341-04:00" @@ -639,6 +2491,22 @@ "StatusCode": 206, "LastSeen": "2026-03-30T15:42:03.825892-04:00" }, + "https://www.tremor.rs/community/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:31.843318-04:00" + }, + "https://www.usenix.org/conference/usenixsecurity19/presentation/torres-arias": { + "StatusCode": 200, + "LastSeen": "2026-04-16T21:15:17.884666-04:00" + }, + "https://www.usenix.org/system/files/sec19-torres-arias.pdf": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:17.340116-04:00" + }, + "https://www.w3.org/WAI/WCAG21/Understanding/": { + "StatusCode": 206, + "LastSeen": "2026-04-16T21:15:22.934277-04:00" + }, "https://zoom-lfx.platform.linuxfoundation.org/meeting/95471930872": { "StatusCode": 206, "LastSeen": "2026-03-30T15:42:03.487723-04:00" diff --git a/tsconfig.json b/tsconfig.json index 920d7a65..7117c4fa 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,8 @@ // This file is not used in compilation. It is here just for a nice editor experience. "extends": "@docusaurus/tsconfig", "compilerOptions": { - "baseUrl": "." + "ignoreDeprecations": "6.0", + "allowImportingTsExtensions": true }, "exclude": [".docusaurus", "build"] }