Repository navigation
feat(queue): make #966 open-PR merge trains executable #968
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
Draft
seonghobae
wants to merge
138
commits into
docs/gap-baseline-2026-08-31
Choose a base branch
from
docs/bandscope-product-readiness-baseline
base: docs/gap-baseline-2026-08-31
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.
Draft
Changes from 21 commits
Commits
Show all changes
138 commits
Select commit
Hold shift + click to select a range
552d06f
docs: add BandScope product and technical gap baseline
seonghobae 9ac6d71
docs(adr): record BandScope 1.0 readiness decision
seonghobae bd872d6
docs(doctoring): add product-readiness references
seonghobae 9999464
docs: add machine-readable open PR queue seed
seonghobae f3afdc0
test(readiness): reject invalid open PR queue manifests
seonghobae 5d86aa8
feat(readiness): validate open PR queue manifest
seonghobae 3e6b00b
feat(readiness): enforce PR queue contract in quickcheck
seonghobae d3604ab
test(readiness): isolate duplicate PR regression
seonghobae d9e6dba
test(readiness): reject unsupported queue evidence
seonghobae 21d87ff
fix(readiness): reject unsupported queue evidence
seonghobae 6456d32
test(readiness): wrap queue evidence docstring
seonghobae d5b8793
test(readiness): require fail-closed live PR queue refresh
seonghobae 6d559b6
feat(readiness): add bounded live PR queue refresher
seonghobae d12d51b
docs(readiness): correct protected version evidence
seonghobae ee6783a
test(readiness): require per-PR base identity
seonghobae 71b5c32
fix(readiness): bind every PR to resolved base tip
seonghobae f2373ba
test(readiness): require fixed-host GitHub transport
seonghobae b17c1a4
fix(readiness): pin token transport to GitHub host
seonghobae 9853e24
docs(readiness): align ADR version evidence
seonghobae db52897
fix(security): document verified HTTPSConnection contract
seonghobae 735f3f7
docs(readiness): refresh gap baseline with 2026-08-24 exact-head evid…
seonghobae f1bd911
test(readiness): reject ambiguous queue authority
seonghobae 7bf4e00
fix(readiness): constrain queue routing evidence
seonghobae 02e1fe8
docs(readiness): define triage-only T8 train
seonghobae 0332756
test(readiness): type queue authority fixtures
seonghobae 0386ce7
Merge branch 'develop' into docs/bandscope-product-readiness-baseline
seonghobae 08e1f4d
Merge branch 'develop' into docs/bandscope-product-readiness-baseline
seonghobae 7e4e25e
chore(queue): preserve canonical gap baseline while stacking #968
seonghobae aae43ff
merge: stack executable queue contract after #1116 baseline
seonghobae b1dd8c6
test(queue): reject invalid predecessor graphs
seonghobae e3e1c57
fix(queue): validate predecessor dependency graph
seonghobae 9f996b8
test(queue): preserve dependency routing on refresh
seonghobae 15db16d
fix(queue): preserve reviewed predecessor routing
seonghobae f1cee0a
test(queue): require explicit overlap succession routing
seonghobae 6cefa46
fix(queue): validate overlap ownership and succession
seonghobae 049d875
fix(queue): preserve reviewed overlap succession routing
seonghobae 807c832
test(queue): make overlap failure oracles causal
seonghobae 50f9a0c
test(queue): include stacked PRs in complete inventory
seonghobae d5adebe
fix(queue): validate exact base identity for stacked PRs
seonghobae 8eaeb88
fix(queue): enumerate stacked PR bases without filtering
seonghobae 6b750e2
test(queue): make live branch tip authoritative over PR base snapshot
seonghobae ea0f180
fix(queue): trust independently resolved live base tips
seonghobae 62afa1a
test(queue): stop treating stale PR base snapshots as live authority
seonghobae 337d952
test(queue): resolve target tips from one branch snapshot
seonghobae dbc69bd
fix(queue): resolve stacked bases from one bounded ref snapshot
seonghobae fbc3bd3
test(queue): reproduce truncated branch-tip inventory
seonghobae 6c9a36c
fix(queue): paginate live branch-tip inventory
seonghobae 8200cc3
test(queue): align branch snapshot contract with pagination
seonghobae ec825fa
test(queue): cover bounded branch-ref pagination failures
seonghobae 7168424
test(queue): require generated human merge-train view
seonghobae f9e996f
feat(queue): generate safe human merge-train view
seonghobae 1c95fa6
test(queue): reject symlinked publication parents
seonghobae def81ee
fix(queue): contain manifest publication inside worktree
seonghobae 324d02a
test(queue): reject human-view parent symlink escape
seonghobae d6cb9ae
fix(queue): contain human-view publication path
seonghobae 2c44a37
merge(queue): restack on current gap baseline
seonghobae 9bdd910
merge(queue): restack on refreshed gap baseline
seonghobae c7fa29e
merge(queue): restack on current canonical gap baseline
seonghobae 9c89a82
ci(queue): exercise live merge-train refresh
seonghobae 26514e3
test(queue): require live draft and update receipts
seonghobae 32de815
test(queue): require exact-head refresh on every owner push
seonghobae e63f10d
fix(queue): bind live evidence to every owner-branch head
seonghobae b7d5943
chore(queue): merge current canonical baseline into #968
seonghobae 2f2adfa
chore(queue): restack #968 on corrected canonical baseline
seonghobae 84a008e
fix(queue): validate live draft and update freshness evidence
seonghobae e213182
fix(queue): capture live PR draft and update evidence
seonghobae d54219d
chore(queue): restack #968 on current canonical baseline
seonghobae 7ed8207
chore(queue): restack #968 on current #1116 head
seonghobae 9f61c9d
chore(queue): restack #968 on latest #1116 head
seonghobae 1f58d52
chore(queue): restack on current canonical baseline
seonghobae a61118b
feat(queue): collect exact-head readiness receipts
seonghobae 8c73259
test(queue): reproduce non-durable reviewed dispositions
seonghobae bdb458e
feat(queue): validate reviewed merge dispositions
seonghobae 80afbcf
fix(queue): preserve reviewed dispositions across live refresh
seonghobae 77fe1a7
fix(queue): bind readiness to reviewed current disposition
seonghobae b5d0a39
merge(queue): restack on current canonical baseline
seonghobae fb6e6ed
docs(queue): sync canonical baseline doctoring
seonghobae 0565898
docs(queue): sync canonical product gap baseline
seonghobae efb31d6
merge(queue): restack on refreshed canonical baseline
seonghobae 0456c1b
docs(queue): sync central queue-owner truth
seonghobae 7d65fa5
docs(queue): sync central control-plane evidence
seonghobae 6e7b663
merge(queue): restack on current central-control baseline
seonghobae bfdc388
merge(queue): restack on current canonical baseline
seonghobae efe7848
test(queue): keep live overlap fixtures contract-valid
seonghobae ab89d16
chore(queue): restack executable queue on canonical baseline
seonghobae a1ccf93
chore(queue): restack on current canonical baseline
seonghobae 57b7a3d
chore(queue): restack on refreshed canonical baseline
seonghobae 45ef3da
chore(queue): restack on current canonical baseline
seonghobae 0b615e1
chore(queue): restack on refreshed canonical baseline
seonghobae b44a843
chore(queue): reconcile latest canonical baseline
seonghobae aaafee0
chore(queue): reconcile recovery contract
seonghobae 9f25cf6
chore(queue): reconcile recovery-origin contract
seonghobae 0e11827
chore(queue): reconcile current canonical baseline
seonghobae db9a492
chore(queue): reconcile structured baseline verification
seonghobae b0fbf1a
chore(queue): reconcile current baseline owner
seonghobae 624b9b5
test(queue): invalidate reviews after base movement
seonghobae 774e751
test(queue): bind reviewed decisions to base identity
seonghobae 70138d6
fix(queue): invalidate routing after base movement
seonghobae cbce060
test(queue): invalidate succession after successor movement
seonghobae 3591195
fix(queue): invalidate routing after related PR movement
seonghobae 7bec1c0
test(queue): cover related identity freshness branches
seonghobae ca82dcd
chore(queue): restack on current baseline head
seonghobae fcdc049
chore(queue): adopt baseline Mermaid note regression
seonghobae eb0d73d
chore(queue): adopt baseline Mermaid parser repair
seonghobae f8a4393
chore(queue): restack on current baseline head
seonghobae 7d158d7
docs(queue): align ADR with canonical Figma authority
seonghobae 8782d35
chore(stack): merge current baseline owner into queue control
seonghobae d14ffaf
chore(stack): adopt refreshed baseline owner
seonghobae 6e6e4c0
Merge refreshed gap baseline into queue control
seonghobae 25e1610
chore(queue): adopt refreshed product-gap baseline
seonghobae 12aa9e0
chore(queue): adopt canonical baseline source repair
seonghobae 68b6571
chore(queue): adopt v2 persistence baseline repair
seonghobae 2ef28c9
chore(queue): adopt current v2 persistence baseline
seonghobae e54830d
chore(queue): adopt current source-admission baseline
seonghobae f8a8cd8
chore(queue): follow current admission traceability
seonghobae 0af39d3
chore(queue): adopt current admission baseline
seonghobae 8a50c7c
chore(queue): reconcile current canonical baseline
seonghobae 7c773cd
chore(queue): adopt current canonical baseline
seonghobae 5aa7ea9
chore(queue): adopt current canonical baseline
seonghobae 7c4bf89
chore(queue): adopt non-self-invalidating baseline
seonghobae aed2af9
chore(queue): adopt draft-head-stable baseline
seonghobae b02cab2
chore(queue): adopt current gap baseline
seonghobae 26d0c78
chore(queue): adopt recovery-state baseline
seonghobae aadecc5
chore(queue): adopt formatter prerequisite baseline
seonghobae f952389
chore(queue): adopt current canonical baseline
seonghobae 870b028
chore(queue): adopt repaired score-storage baseline
seonghobae 734d2b2
test(queue): require PR synchronize admission
seonghobae 0b02b0d
fix(queue): admit PR head synchronization
seonghobae 71813aa
test(queue): bind PR evidence to exact head
seonghobae 4a4be8f
fix(queue): bind PR workflow to exact head
seonghobae 2d93d52
merge(baseline): adopt revision-bound recovery contract
seonghobae 0429202
test(queue): reproduce CheckRun app GraphQL schema failure
seonghobae 48f64f9
fix(queue): read check app identity through CheckSuite
seonghobae 8ead94a
test(queue): align readiness fixture with CheckSuite app path
seonghobae 5ff4467
docs(queue): cite live GitHub readiness authority
seonghobae 767cf41
chore(queue): adopt current baseline source
seonghobae dde02db
chore(queue): restack on current baseline
seonghobae af1061b
merge(queue): adopt current product gap baseline
seonghobae 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
165 changes: 165 additions & 0 deletions
165
docs/architecture/decisions/0001-bandscope-1-0-product-readiness.md
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,165 @@ | ||
| # ADR-0001: BandScope 1.0 Product-Readiness Program and Merge Trains | ||
|
|
||
| - **Status:** Proposed | ||
| - **Date:** 2026-08-20 | ||
| - **Decision owners:** BandScope maintainers | ||
| - **Program issue:** [#958](https://github.com/ContextualWisdomLab/bandscope/issues/958) | ||
| - **Figma file ID:** `BP30foevuRtufwRpTknZUw` | ||
|
|
||
| ## Context | ||
|
|
||
| BandScope has grown through many narrow, independently reviewable pull requests. The 2026-08-20 snapshot contains 83 open PRs above protected `develop@acdbea6344fe1231c39535b575f4de35e4c607c9`. | ||
|
|
||
| The repository already contains valuable local-first architecture, scientific-analysis, security, accessibility, and rehearsal-workspace work. The queue nevertheless lacks a single commercial completion sequence. Several boundaries have many small writers while other buyer-critical boundaries—trusted distribution, active playback, durable projects, support evidence, and licensed activation—have no complete protected vertical. | ||
|
|
||
| A large number of individually plausible PRs can make delivery less reliable when: | ||
|
|
||
| - several heads carry unrelated dependency/toolchain changes; | ||
| - adjacent UI slices create independent state or action stores; | ||
| - reviews and required checks are bound to predecessor heads; | ||
| - protected-base failures are copied into leaf PRs; | ||
| - a closed or squash-merged predecessor changes the successor's ancestry; | ||
| - design states are represented before runtime behavior exists; | ||
| - a validation package is described as a release without signing, notarization, updater, or rollback evidence. | ||
|
|
||
| The saved Figma file is useful but also demonstrates the need for source parity. Its cover describes a 28-page design-system plan while the current file exposes two top-level pages. Its footer and the reviewed repository/Tauri package metadata all cite version `0.1.3`; the remaining parity risk is planned or unimplemented design state rather than a current version-label mismatch. | ||
|
|
||
| ## Decision | ||
|
|
||
| ### 1. Preserve the product boundary | ||
|
|
||
| BandScope remains a **local-first rehearsal decision tool**. | ||
|
|
||
| It will: | ||
|
|
||
| - analyze user-authorized local audio; | ||
| - explain evidence, confidence, and limitations; | ||
| - turn analysis into concrete rehearsal actions; | ||
| - provide an active, accessible passage-rehearsal player; | ||
| - preserve durable local projects and bounded handoffs; | ||
| - distribute trusted desktop artifacts and support evidence. | ||
|
|
||
| It will not become a DAW, notation editor, plugin host, mandatory cloud account, or unbounded general-purpose media/file processor. | ||
|
|
||
| ### 2. Use one completion program | ||
|
|
||
| Issue #958 is the parent product-completion program. The following child issues own independent buyer boundaries: | ||
|
|
||
| - #960 — trusted release, updater, and rollback; | ||
| - #961 — active rehearsal player; | ||
| - #962 — project format, autosave, migration, and recovery; | ||
| - #963 — diagnostics and offline support bundle; | ||
| - #964 — licensed demo and first-run activation; | ||
| - #965 — Figma, Storybook, shipped UI, and WCAG parity; | ||
| - #966 — dependency-aware PR convergence. | ||
|
|
||
| Existing canonical accuracy, resource, handoff, supply-chain, and platform issues remain authoritative where their responsibility already exists. | ||
|
|
||
| ### 3. Process work as dependency-aware merge trains | ||
|
|
||
| Each open PR must belong to exactly one initial train: | ||
|
|
||
| - `T0` dependency, toolchain, workflow, and quality base; | ||
| - `T1` local input, filesystem authority, resource admission, and cancellation; | ||
| - `T2` scientific accuracy, MIR evaluation, and numerical parity; | ||
| - `T3` rehearsal actions and active-player vertical; | ||
| - `T4` project portability, handoff, and interoperability; | ||
| - `T5` activation, UI system, Storybook, and accessibility; | ||
| - `T6` diagnostics, redaction, security evidence, and supportability; | ||
| - `T7` signed commercial release and updater. | ||
|
|
||
| The initial routing is an investigation aid. Issue #966 must refresh the live exact head, checks, reviews, unresolved threads, dependencies, and succession before any action. | ||
|
|
||
| ### 4. Enforce one canonical writer per boundary | ||
|
|
||
| A product/file boundary may have multiple active PRs only when their stack order is declared. Otherwise maintainers must select one canonical PR, transfer unique requirements/tests, and close duplicates or superseded heads with succession evidence. | ||
|
|
||
| No feature PR may carry an unrelated dependency, lockfile, workflow, or toolchain baseline. Those changes belong to `T0` and are inherited only after protected integration. | ||
|
|
||
| ### 5. Treat exact-head evidence as non-transferable | ||
|
|
||
| A PR may merge only when its unchanged exact current head has: | ||
|
|
||
| - every required repository and central check in terminal success; | ||
| - qualifying independent non-author approval that covers the last push; | ||
| - zero unresolved actionable review threads; | ||
| - branch-protection acceptance without bypass; | ||
| - required repository-owned production statement and branch coverage; | ||
| - required public API documentation evidence. | ||
|
|
||
| Queued, skipped-required, failed inherited-base, predecessor-head, protected-base, model-only, self/author, or administrative-bypass evidence is not success. | ||
|
|
||
| ### 6. Define design authority explicitly | ||
|
|
||
| - Runtime behavior, semantics, localization keys, and version identity originate in the repository. | ||
| - Design tokens are versioned in code and synchronized to Figma variables. | ||
| - Storybook is the executable component/state inventory. | ||
| - Figma file `BP30foevuRtufwRpTknZUw` is the reviewed visual/interaction specification. | ||
| - The shipped Tauri application is the final acceptance target. | ||
| - A Figma or Storybook state that is not implemented must be marked proposed rather than complete. | ||
|
|
||
| ### 7. Release only after measurable product verticals | ||
|
|
||
| A release candidate is not created merely because packaging succeeds. The protected release commit must carry: | ||
|
|
||
| - real decoded-audio MIR acceptance and claim boundaries; | ||
| - bounded resource and cancellation evidence; | ||
| - active-player acceptance; | ||
| - project migration and recovery evidence; | ||
| - end-to-end accessibility evidence; | ||
| - support-bundle/privacy evidence; | ||
| - signed Windows artifacts; | ||
| - signed and notarized macOS artifacts; | ||
| - signature-verified updater and rollback evidence; | ||
| - checksums, SBOM, and build provenance. | ||
|
|
||
| ## Consequences | ||
|
|
||
| ### Positive | ||
|
|
||
| - Buyers can evaluate a coherent rehearsal workflow rather than isolated features. | ||
| - Maintainers can make explicit succession decisions and reduce review drift. | ||
| - Scientific, accessibility, security, release, and design evidence are bound to the same product version. | ||
| - Dependency and workflow changes stop contaminating unrelated feature heads. | ||
| - Waiting for one external review lane does not stop independent productive work. | ||
|
|
||
| ### Costs | ||
|
|
||
| - Some existing PRs will be restacked, reconstructed, superseded, or closed. | ||
| - Exact-head verification must be repeated after ancestry changes. | ||
| - The initial queue manifest requires continuing maintenance. | ||
| - Design work may be revised when it does not match implemented contracts. | ||
| - A 1.0 release is later than an unsigned or evidence-light package, but materially more trustworthy. | ||
|
|
||
| ## Rejected alternatives | ||
|
|
||
| ### Merge every open PR in numerical order | ||
|
|
||
| Rejected because PR number is not dependency order, and merging all work can preserve duplicate stores, stale architecture, and conflicting dependency baselines. | ||
|
|
||
| ### Close most PRs solely to reduce the count | ||
|
|
||
| Rejected because unique tests, security findings, and product requirements could be lost. Closure requires explicit succession evidence. | ||
|
|
||
| ### Treat the Figma file as the product source of truth | ||
|
|
||
| Rejected because the current file contains planned or unimplemented pages. Behavior, semantics, and version identity must remain executable and testable in code. | ||
|
|
||
| ### Release unsigned artifacts and add trust later | ||
|
|
||
| Rejected because signing, notarization, updater verification, project compatibility, and rollback are part of the commercial distribution contract. | ||
|
|
||
| ### Expand into a DAW | ||
|
|
||
| Rejected because recording, plugin hosting, free-form mixing, and composition would dilute the buyer problem and multiply real-time/audio-platform risk. | ||
|
|
||
| ## Review triggers | ||
|
|
||
| This ADR must be revisited when: | ||
|
|
||
| - the product boundary changes beyond rehearsal decision/support; | ||
| - BandScope adds a mandatory cloud account or remote project storage; | ||
| - the Figma source-of-truth model changes; | ||
| - the PR queue no longer needs train-based governance; | ||
| - the application adopts a different desktop/runtime distribution architecture; | ||
| - a project format or updater change makes rollback guarantees materially different. | ||
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,48 @@ | ||
| # Product Readiness References | ||
|
|
||
| This bibliography supports the BandScope 1.0 product-readiness baseline and related issues. Citations use APA 7th style where the source provides sufficient publication metadata. Product documentation pages are cited as organizational web resources and must be rechecked when their upstream version changes. | ||
|
|
||
| ## Desktop distribution and update | ||
|
|
||
| Apple Inc. (n.d.). *Notarizing macOS software before distribution*. Apple Developer Documentation. https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution | ||
|
|
||
| Microsoft. (n.d.). *Sign an app package using SignTool*. Microsoft Learn. https://learn.microsoft.com/windows/msix/package/sign-app-package-using-signtool | ||
|
|
||
| Tauri Contributors. (n.d.). *Application signing*. Tauri. https://v2.tauri.app/distribute/sign/ | ||
|
|
||
| Tauri Contributors. (n.d.). *Updater plugin*. Tauri. https://v2.tauri.app/plugin/updater/ | ||
|
|
||
| ## Accessibility and executable design evidence | ||
|
|
||
| Storybook Contributors. (n.d.). *Accessibility testing*. Storybook. https://storybook.js.org/docs/writing-tests/accessibility-testing | ||
|
|
||
| World Wide Web Consortium. (2023). *Web Content Accessibility Guidelines (WCAG) 2.2*. https://www.w3.org/TR/WCAG22/ | ||
|
|
||
| World Wide Web Consortium. (2023). *Accessible Rich Internet Applications (WAI-ARIA) 1.2*. https://www.w3.org/TR/wai-aria-1.2/ | ||
|
|
||
| ## Music-information-retrieval evaluation | ||
|
|
||
| Bittner, R. M., Salamon, J., Tierney, M., Mauch, M., Cannam, C., & Bello, J. P. (2014). MedleyDB: A multitrack dataset for annotation-intensive MIR research. In *Proceedings of the 15th International Society for Music Information Retrieval Conference* (pp. 155–160). https://medleydb.weebly.com/ | ||
|
|
||
| MIREX. (n.d.). *Audio chord estimation*. Music Information Retrieval Evaluation eXchange. https://www.music-ir.org/mirex/wiki/2024:Audio_Chord_Estimation | ||
|
|
||
| Raffel, C., McFee, B., Humphrey, E. J., Salamon, J., Nieto, O., Liang, D., & Ellis, D. P. W. (2014). mir_eval: A transparent implementation of common MIR metrics. In *Proceedings of the 15th International Society for Music Information Retrieval Conference* (pp. 367–372). https://craffel.github.io/mir_eval/ | ||
|
|
||
| Rafii, Z., Liutkus, A., Stöter, F.-R., Mimilakis, S. I., & Bittner, R. (2019). MUSDB18-HQ—An uncompressed version of MUSDB18. *Zenodo*. https://doi.org/10.5281/zenodo.3338373 | ||
|
|
||
| Stöter, F.-R., Liutkus, A., & Ito, N. (2018). The 2018 Signal Separation Evaluation Campaign. In E. Vincent, A. Yeredor, Z. Koldovský, & P. Tichavský (Eds.), *Latent Variable Analysis and Signal Separation* (pp. 293–305). Springer. https://doi.org/10.1007/978-3-319-93764-9_28 | ||
|
|
||
| ## Use in BandScope | ||
|
|
||
| These sources do not by themselves prove BandScope conformance or accuracy. Each cited requirement must map to: | ||
|
|
||
| ```text | ||
| source requirement or evaluation method | ||
| → BandScope product decision | ||
| → owning issue and implementation | ||
| → exact fixture and rights evidence | ||
| → current-head test/build/release evidence | ||
| → known limitation and supported claim | ||
| ``` | ||
|
|
||
| Official certification, notarization, code-signing, conformance, or benchmark claims may be made only after the corresponding external process and exact release artifact have been verified. |
Oops, something went wrong.
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.