-
Notifications
You must be signed in to change notification settings - Fork 29
Add AI-assisted TechDocs Assessment spec #363
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
nate-double-u
wants to merge
50
commits into
cncf:main
Choose a base branch
from
nate-double-u:ai-assisted-assessment-spec
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+1,083
−0
Open
Changes from 1 commit
Commits
Show all changes
50 commits
Select commit
Hold shift + click to select a range
92e24b8
Add AI-assisted TechDocs Assessment spec
nate-double-u e231356
Address review: approver independence; propose per-file issue backlog
nate-double-u 84d0c8f
Address review: approver independence, per-file backlog proposal; fix CI
nate-double-u a935600
Restructure spec into Part I (requirements) and Part II (operational)
nate-double-u 314d003
Move spec to docs/ top level, keeping the methodology corpus clean
nate-double-u aac77f1
Add section 11: platform binding to Copilot cloud agent
nate-double-u e3714aa
Add section 12: lifecycle bindings to GitHub primitives
nate-double-u 7edd538
Add section 13: components and repository layout
nate-double-u ac0ac1a
Relabel platform owner to administrator/platform owner; drop arbitration
nate-double-u 4b8125b
Add section 14: agent definitions
nate-double-u f981754
Add verifier: an adversarial agent fact-check pass before human review
nate-double-u f05c640
Add section 15: the provenance block
nate-double-u 0abc465
Move spec to specs/, out of the website-synced tree
nate-double-u 96f2fec
Note the website intake page as future work
nate-double-u 86680b0
Add section 16: the build plan
nate-double-u 04a0eaf
Refresh open questions: collect build-time checks, drop answered item
nate-double-u 95c928c
Preserve the methodology's phase B skip path and issue time bound
nate-double-u c2ae7ac
Report cycle time; do not gate acceptance on it
nate-double-u 95729f7
State model policy as capability requirements, not model names
nate-double-u 4feb4f6
Correct platform claims: PR cap, firewall scope, secrets vector
nate-double-u 3a8e7f2
Make the disclosure status-aware; pin one methodology per assessment
nate-double-u fb6a5f4
Pin the verification floor; snapshot agent config from the API
nate-double-u 9a5e7ac
Drop the approval claim from the disclosure's final form
nate-double-u 9ef5603
Narrow HC-4 to agent content; exempt gate-fired bookkeeping
nate-double-u bb51e34
Pin data sources: repo SHAs and site retrieval dates
nate-double-u 1a237cc
Cite the config endpoint; close two deferral loops
nate-double-u ff954ec
Scope HC-4 to repository content
nate-double-u 359de3f
Profiles can pin a model; ours choose not to
nate-double-u 0e691c2
Pin the methodology by commit SHA, not by ref
nate-double-u ffb3166
Run data collection in the session's setup steps
nate-double-u 2f6ab6f
Disclose to the project before drafting, whoever filed
nate-double-u a0e14dd
Extend the verification floor to unrated phases
nate-double-u 60d7307
Let the methodology, not this spec, set the backlog layout
nate-double-u 1bfdcfd
Bind P-2's reproducibility pin to a commit SHA
nate-double-u c14e878
Profiles run only when a writer selects them
nate-double-u 2d7b779
Name the setup-targeting unknown; align backlog wording
nate-double-u 831ed27
spec: bind lifecycle to slash commands, labels, and an umbrella intak…
nate-double-u 1e83675
spec: give /confirm teeth and close command-binding gaps from review
nate-double-u a58556b
spec: bring concurrent assessments into scope
nate-double-u 619189b
spec: authorize /confirm against a stakeholder set frozen at acceptance
nate-double-u 761709b
spec: test deterministically in CI, live on the consenting pilot
nate-double-u 9aa7dd1
spec: close label-trust, terminal-state, and site-pin gaps
nate-double-u 0bdb602
spec: add a participant guide so the system documents itself
nate-double-u e192802
spec: name budget as the constraint and experts as the loop
nate-double-u 9e91a8a
answer the pass-eight review: reassessment, manifests, fallbacks
nate-double-u 2f872d5
name the per-phase and skip labels in section 13
nate-double-u 09a92bf
build components locally with Copilot CLI; move platform observation …
nate-double-u a6bf5fa
Update specs/ai-assisted-techdocs-assessment-spec.md
nate-double-u 43bac1b
Apply suggestion from @nate-double-u
nate-double-u 882be6f
answer the human review round: convergence, off-ramps, per-section dr…
nate-double-u File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,333 @@ | ||
| --- | ||
| title: AI-assisted TechDocs Assessment | ||
| --- | ||
|
|
||
| # AI-assisted TechDocs Assessment | ||
|
|
||
| **What this is.** A working specification for an AI-assisted, human-supervised | ||
| CNCF TechDocs assessment workflow. It is requirements-first: it defines the | ||
| outcomes the system must produce and the boundaries it must never cross, then | ||
| lets tooling follow. | ||
|
|
||
| --- | ||
|
|
||
| ## 1. Background and problem | ||
|
|
||
| A CNCF TechDocs assessment evaluates a project's documentation against the | ||
| TechDocs [criteria] and produces a prioritized improvement plan. It is valuable | ||
| and in demand, but each assessment takes 6–8 weeks of a skilled technical | ||
| writer's time, and that expertise is scarce. Throughput is the constraint: more | ||
| projects want assessments than the expert pool can serve. | ||
|
|
||
| Two things make now the moment to change that: | ||
|
|
||
| - The method is sound; the throughput isn't. The existing methodology | ||
| ([criteria], the [howto], and the analysis, implementation, and issues | ||
| deliverables) is well-established. The problem to solve is speed and scale, not | ||
| what a good assessment is. | ||
| - Maintainers now have agentic AI. GitHub has granted CNCF maintainers | ||
| [Copilot Enterprise][copilot-blog]. That lets us put an AI agent on the | ||
| mechanical and first-draft work, supervised by a human expert, to compress the | ||
| cycle. We treat the roughly 2-week figure as a pilot hypothesis, not a fixed | ||
| target (G-1). | ||
|
|
||
| Thesis: keep the methodology and the human judgment; use an AI agent to | ||
| compress the labor. AI drafts, humans decide, all in the open. | ||
|
|
||
| ## 2. Goals and non-goals | ||
|
|
||
| ### Goals | ||
|
|
||
| - G-1: Compress the cycle. Reduce the 6–8 week assessment toward roughly 2 | ||
| weeks, a pilot hypothesis to validate rather than a commitment (section 10). | ||
| - G-2: Hold quality. Output meets or exceeds the current human baseline | ||
| (Flatcar, Knative, Helm), verified by the method in section 10, not asserted. | ||
| AI drafts fail by being fluent, well-formatted, and generically wrong, a mode | ||
| that survives a readability pass, so catching it is an explicit requirement. | ||
| - G-3: Human in the loop throughout. The agent proposes; a technical writer and | ||
| project stakeholders dispose. Every phase is reviewed before it advances. | ||
| - G-4: Work in the open. The whole process happens on cncf/techdocs via issues | ||
| and PRs, and the deliverables are public. Assessments can be candid about a | ||
| project's documentation gaps; publishing in the open is deliberate and shapes | ||
| how sign-off works (HC-2). | ||
| - G-5: Repeatable and project-agnostic. The same workflow serves any CNCF | ||
| project with minimal per-project setup. | ||
| - G-6: Lower the request barrier. A structured intake lets a project (or the | ||
| TechDocs team) request an assessment with all needed context up front. | ||
| - G-7: Produce the three standard deliverables. Assessment, implementation plan, | ||
| and an issue backlog, matching the existing methodology. | ||
|
|
||
| ### Non-goals (phase one) | ||
|
|
||
| - NG-1: No external GitHub writes. The system does not create or modify any | ||
| file, PR, issue, comment, or setting outside cncf/techdocs. (Hard constraint; | ||
| see HC-1 in section 3.) | ||
| - NG-2: No auto-filing of issues. The backlog is delivered as files in | ||
| cncf/techdocs. Filing them as real issues in project repos is future work (a | ||
| separate, opt-in script), explicitly out of scope now. | ||
| - NG-3: Not a replacement for human judgment. No unattended, end-to-end | ||
| autonomous assessments; no bypassing writer review or stakeholder sign-off. | ||
| - NG-4: Not a change to the criteria or methodology. We automate the existing | ||
| method. Evolving the criteria (for example AI-readiness) is tracked separately | ||
| (see PR #357). The one exception P-2 allows is editorial change to keep the | ||
| methodology docs machine-consumable (formatting, structure); changes to the | ||
| criteria themselves are out of scope. | ||
| - NG-5: Not a public self-serve tool. Scope is CNCF projects assessed through | ||
| the defined process, not arbitrary external users. | ||
|
|
||
| ## 3. Principles and hard constraints | ||
|
|
||
| ### Principles | ||
|
|
||
| - P-1: AI proposes, humans dispose. Every state change that matters is gated by | ||
| a human. | ||
| - P-2: Methodology as the single source of truth. The methodology docs at | ||
| [docs/analysis/][analysis-dir] (`criteria.md`, `howto.md`, and `templates/`) | ||
| are canonical. The agent reads and applies them at run time; it does not | ||
| reinvent them or copy them into a separate prompt corpus. A single source of | ||
| truth means updating the methodology automatically updates the system's | ||
| behavior, and no parallel copy can drift. This addresses the | ||
| criteria-duplication concern raised in PR #357 review. | ||
| - Reproducibility pin. For a given assessment run, the agent binds to a | ||
| specific ref (commit or tag) of the methodology docs so the run is | ||
| reproducible (P-4). "Auto-updates" means each new assessment picks up the | ||
| latest canonical docs, not that an in-flight assessment shifts under review. | ||
| - Consumability is a contract. Because the docs are the interface, an | ||
| operational layer may add how-to-run guidance (output format, file naming, | ||
| orchestration) but must reference the canonical content, never restate it. | ||
| Any methodology edits for machine-consumability are editorial (formatting, | ||
| structure), never changes to the criteria themselves (NG-4). | ||
| - P-3: Requirements before tools. Define the required outcomes and hard | ||
| boundaries first; choose tools (agent surface, credentials, scripts, prompts) | ||
| afterward to satisfy them, so tools can change without changing the spec. When | ||
| a boundary needs a tool to enforce it, require the property (an enforced write | ||
| boundary), not a named product. | ||
| - P-4: Reproducible and auditable. Every claim in a deliverable traces to a | ||
| cited, committed source. Prompts, configuration, and any data-generating steps | ||
| are versioned and re-runnable. | ||
|
|
||
| ### Hard constraints (the "never" list) | ||
|
|
||
| - HC-1: No writes outside cncf/techdocs. Agents may read and do external | ||
| research (web, public repos), but must never write to any GitHub resource | ||
| outside cncf/techdocs: no files, PRs, issues, comments, reviews, labels, | ||
| releases, or workflow runs. This is enforced architecturally, not by | ||
| instruction: the agent runs with a credential scoped to cncf/techdocs only, so | ||
| a write elsewhere is impossible, not merely disallowed. Full design in | ||
| section 8. | ||
| - HC-2: Phase gating. Each phase (assessment, implementation, backlog) is | ||
| reviewed by a technical writer, then goes to stakeholders before the next | ||
| begins. Sign-off separates two things. A factual-accuracy check: stakeholders | ||
| confirm they have read the deliverable and had the chance to correct factual | ||
| errors, which is required to advance. Agreement with the conclusions: not | ||
| required, and a project's disagreement is recorded in the deliverable rather | ||
| than allowed to block or soften it. Merging phase N makes phase N+1 eligible; a | ||
| technical writer still starts it (section 5). A reviewer/stakeholder dispute is | ||
| arbitrated by the platform owner (section 4). | ||
| - HC-3: Deliverables are files in cncf/techdocs. Including the issue backlog | ||
| (one file per proposed issue). Nothing is filed to an external repo. | ||
| - HC-4: No unattended autonomy. Any change to repository state lands through a | ||
| human-reviewed PR. The agent never self-merges. | ||
| - HC-5: Provenance required. Quantitative claims (counts, link status, | ||
| inventories) must be generated by a committed, re-runnable step and cite their | ||
| source; no unverifiable figures in a deliverable. | ||
| - HC-6: Disclose AI involvement. The assessed project is told, up front in the | ||
| intake and in a header on every deliverable, that the analysis was AI-drafted | ||
| and human-reviewed. No project should discover this after the fact. | ||
| - HC-7: Findings are verified, not assumed. Qualitative findings are checked | ||
| against the actual project sources, not accepted because they read plausibly. | ||
| The verification method is in section 10. | ||
|
|
||
| --- | ||
|
|
||
| ## 4. Roles | ||
|
|
||
| Roles are defined by function. Each is filled by an actor (a person, group, or | ||
| tool), and one actor may fill more than one role. | ||
|
|
||
| - Requester. A stakeholder who initiates the assessment by filing the request | ||
| (section 7); for example a maintainer, tech lead, or trusted community member. | ||
| Filing does not start an assessment. | ||
| - Drafter. Produces the first-pass draft of each phase's deliverable as a draft | ||
| PR, then refines it in conversation with the reviewer. | ||
| - Reviewer. Accepts a request to begin work, then reviews and refines each draft | ||
| in conversation, verifies findings against source (HC-7), and marks it ready. | ||
| Owns the draft's quality, but does not give its final sign-off; that is | ||
| independent (see Approver). | ||
| - Stakeholders. The project party with a stake in its documentation and | ||
| direction: maintainers, tech leads, trusted community members, and others. | ||
| They set priorities, provide project-level context, and confirm factual | ||
| accuracy at each phase gate. They do not hold a veto over the conclusions; | ||
| disagreement is recorded, not used to block or soften a deliverable (HC-2). | ||
| - SMEs (subject-matter experts). Supply and verify technical ground truth for the | ||
| areas under assessment: answering detailed questions and checking findings and | ||
| recommendations for accuracy. Often maintainers or experienced contributors, | ||
| but the role is knowledge, not authority; an SME need not have sign-off. | ||
| - Writers. The audience for the issue backlog: community members who take up | ||
| the resulting issues and do the documentation work. | ||
| - Approver. Gives each phase its independent quality sign-off and merges the PR. | ||
| Any qualified technical writer who did not draft that phase, so no one signs | ||
| off on their own work and the role spreads across the team instead of | ||
| bottlenecking. Confirms the verification in section 10 was done. | ||
|
nate-double-u marked this conversation as resolved.
Outdated
|
||
| - Platform owner. Owns the machine itself: the prompts, the operational layer, | ||
| and the scoped credential (HC-1). Sets policy, handles aborts (section 5), and | ||
| arbitrates a reviewer/stakeholder dispute (HC-2). A central role, kept out of | ||
| the per-assessment critical path. | ||
|
|
||
| ## 5. Lifecycle | ||
|
|
||
| Each phase runs the same six steps: | ||
|
|
||
| 1. Request. Phase A is triggered by the intake issue (section 7); phases B and C | ||
| become eligible once the previous phase is merged. | ||
| 2. Accept. A technical writer triages and explicitly accepts the request, for | ||
| every phase, not just A; eligibility alone does not start work (P-1). | ||
| 3. Draft. The agent produces the deliverable as a draft PR. | ||
| 4. Review. The reviewer refines the draft in conversation with the agent, | ||
| verifies findings against source (HC-7), and marks it ready. | ||
| 5. Stakeholder review. Stakeholders confirm factual accuracy (required to | ||
| advance) and record any disagreement with the conclusions (not required; | ||
| HC-2). | ||
| 6. Merge. The approver signs off and merges the PR into cncf/techdocs, which | ||
| makes the next phase eligible. | ||
|
|
||
| Failure path: if a draft is bad enough that fixing it would cost more than | ||
| starting over, the reviewer may discard it and restart or write by hand rather | ||
| than sink time into editing. Repeated failure is escalated to the platform | ||
| owner, who may abort the run. An assessment must never end up slower than doing | ||
| it by hand. | ||
|
|
||
| ## 6. Phases and deliverables | ||
|
|
||
| - Phase A: Assessment (`analysis.md`). Detailed first. | ||
| - Phase B: Implementation plan (`implementation.md`). | ||
| - Phase C: Issue backlog (`issues/*.md`, one file per issue, each scoped to | ||
| roughly 4 hours for someone experienced with the project and comfortable | ||
| writing). Effort estimates are the agent's first pass and are sanity-checked | ||
| by the reviewer; agent estimates are not reliable on their own. | ||
|
|
||
| Every deliverable carries a header noting it was AI-drafted and human-reviewed | ||
| (HC-6). | ||
|
|
||
| Scope note: phase one produces plans (assessment, implementation, backlog), not | ||
| documentation changes, and the backlog lands as files in cncf/techdocs rather | ||
| than as issues where writers work (NG-2, HC-3). Until the optional filing tool | ||
| exists (section 11), the reviewer and stakeholders route the backlog to writers | ||
| by hand. The pilot therefore measures output, not documentation outcomes, a | ||
| distinction we state so we don't mistake one for the other. | ||
|
|
||
| ## 7. Inputs: the assessment request | ||
|
|
||
| The process starts from a GitHub issue in cncf/techdocs, filed with a request | ||
| template (`.github/ISSUE_TEMPLATE/`) that collects the context an assessment | ||
| needs. The specific fields are deferred for now; they will derive from what the | ||
| methodology already requires (the analysis template's "About" and "Scope" | ||
| sections, plus maturity and contacts). | ||
|
|
||
| Filing a request does not start an assessment: it gathers context, and a | ||
| technical writer triages and explicitly accepts it to begin Phase A (NG-5, P-1). | ||
|
|
||
| Open question: how this relates to the existing CNCF service desk and TechDocs | ||
| assistance-program intake, so we don't create a competing front door. | ||
|
|
||
| ## 8. Safety and guardrails | ||
|
|
||
| HC-1 is guaranteed primarily by credential scoping: the agent runs under a | ||
| credential (fine-grained token or GitHub App) that can write only to | ||
| cncf/techdocs, so writes elsewhere are impossible, not merely disallowed. Tool | ||
| allowlisting (reads and web research permitted; GitHub-write tools constrained to | ||
| the one repo) and the human review gates are defense in depth. | ||
|
|
||
| Threat cases: | ||
|
|
||
| 1. Prompt injection (primary threat). The agent's core job is ingesting untrusted | ||
| content from assessed repositories, which may contain instructions aimed at | ||
| the agent. Scoping blocks writes outside cncf/techdocs, but injection can | ||
| still try to (a) plant poisoned or misleading content into a deliverable | ||
| inside cncf/techdocs, or (b) trigger outbound web requests to exfiltrate or | ||
| fetch. Mitigations: treat all repo and web content as data, never | ||
| instructions; human review of every deliverable before merge (HC-4); constrain | ||
| outbound network access; and keep secrets out of the agent's reach. | ||
| 2. Write outside cncf/techdocs. Blocked architecturally by the scoped credential | ||
| (HC-1). | ||
| 3. Unverified content in a deliverable. Qualitative findings must be checked | ||
| against source (HC-7); quantitative claims must be reproducible (HC-5). | ||
| 4. Self-merge or unattended change. Prevented by human-reviewed PRs; the agent | ||
| never merges (HC-4). | ||
|
|
||
| The credential mechanism (fine-grained PAT versus GitHub App, both scoped to | ||
| cncf/techdocs) is an implementation choice; the required property is that the | ||
| write boundary is enforced, not advisory (P-3). | ||
|
|
||
| ## 9. Grounding in methodology | ||
|
|
||
| Every requirement here derives from the existing methodology, so the system | ||
| automates the current method rather than inventing a new one (P-2): | ||
|
|
||
| - The three deliverables (G-7) and the phase order (section 5) follow the | ||
| [howto]: analysis, then implementation plan, then issue backlog. | ||
| - Assessment content, ratings, and criteria come from `criteria.md`. | ||
| - Each deliverable's structure comes from the templates in | ||
| `docs/analysis/templates/` (`analysis.md`, `implementation.md`, | ||
| `issues-list.md`, `issue.md`). | ||
| - Scope and maturity framing (section 7) come from the analysis template's | ||
| "About" and "Scope" sections and the criteria's maturity levels. | ||
| - The 4-hour, independent, time-bounded issue scoping (Phase C) follows the | ||
| howto and assistance-program guidance on backlog creation. | ||
|
|
||
| Prior prototyping has explored parts of this workflow; that experience will | ||
| inform implementation. | ||
|
|
||
| ## 10. Acceptance criteria | ||
|
|
||
| The system is acceptable when, on a pilot assessment: | ||
|
|
||
| - Quality. The deliverable is scored against an assessment-quality rubric (its | ||
| definition is an open item; section 11). Verification is not a token sample: | ||
| the reviewer checks every rating-bearing finding, or at minimum a set number | ||
| per criterion, biased toward the highest-risk claims, and records in the | ||
| deliverable which findings were verified (HC-7). Final sign-off is given by the | ||
|
nate-double-u marked this conversation as resolved.
Outdated
|
||
| approver (section 4), a writer who did not draft that phase, to avoid grading | ||
| one's own work. The bar is parity with the human baselines (Flatcar, Knative, | ||
| Helm). | ||
| - Cycle time. Measured against the time decomposition from G-1 (writer working | ||
| time versus waiting on people). The roughly 2-week target is evaluated as a | ||
| hypothesis; missing it prompts a look at which gates or waits dominate, not a | ||
| quiet redefinition. | ||
| - Safety. Zero writes outside cncf/techdocs, audited from the scoped credential's | ||
| activity, and no unmitigated prompt-injection incident. | ||
| - Completeness and reproducibility. All three deliverables produced; every | ||
| quantitative claim reproducible from a committed step (HC-5); AI involvement | ||
| disclosed (HC-6). | ||
|
|
||
| Pilot caveat: one assessment is n=1 for a quality claim. Choose the pilot | ||
| deliberately, neither a flattering easy project nor an impossibly hard one, state | ||
| the choice, and broaden before drawing general conclusions. | ||
|
|
||
| ## 11. Open questions and future work | ||
|
|
||
| - Filing issues into project repos. A separate, opt-in tool to create the backlog | ||
| issues in a project's own repository (NG-2). Out of scope for phase one, and it | ||
| must preserve HC-1. | ||
|
nate-double-u marked this conversation as resolved.
Outdated
|
||
| - Intake relationship. How the request template fits with the existing CNCF | ||
| service desk and assistance-program intake (section 7), without a competing | ||
| front door. | ||
| - AI-readiness criteria. Whether and how the criteria evolve for AI consumption | ||
| (for example llms.txt), tracked in PR #357. | ||
| - Pilot measurement. How we capture the G-1 time decomposition and cycle-time | ||
| data to test the 2-week hypothesis (section 10). | ||
| - Assessment-quality rubric. Define the meta-rubric that scores an assessment's | ||
| quality, distinct from `criteria.md` (which scores a project's docs), and | ||
| validate it by scoring the Flatcar, Knative, and Helm baselines to set a | ||
| reference band (sections 2, 10). | ||
| - Small-team staffing. Sustaining the approver separation (a phase's approver | ||
| must be a writer who did not draft it; sections 4, 10) when the same few | ||
| writers wear multiple hats. | ||
| - Scaling. Running assessments for several projects concurrently. | ||
|
|
||
| --- | ||
|
|
||
| [criteria]: https://github.com/cncf/techdocs/blob/main/docs/analysis/criteria.md | ||
| [howto]: https://github.com/cncf/techdocs/blob/main/docs/analysis/howto.md | ||
| [analysis-dir]: https://github.com/cncf/techdocs/tree/main/docs/analysis | ||
| [copilot-blog]: https://contribute.cncf.io/blog/2025/12/16/github-copilot-enterprise-for-maintainers/ | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.