From 9b04c1b6d5d887600af5d2c3723fb73bcf84ce88 Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Fri, 16 Oct 2026 09:44:29 +0200 Subject: [PATCH 1/8] Add Czech translations for external braille displays --- .../res/values-cs/strings_external_displays.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 braille/brailledisplay/src/phone/res/values-cs/strings_external_displays.xml diff --git a/braille/brailledisplay/src/phone/res/values-cs/strings_external_displays.xml b/braille/brailledisplay/src/phone/res/values-cs/strings_external_displays.xml new file mode 100644 index 000000000..cf33c14fd --- /dev/null +++ b/braille/brailledisplay/src/phone/res/values-cs/strings_external_displays.xml @@ -0,0 +1,14 @@ + + + Braillské řádky z jiných aplikací + Povolit aplikaci %1$s jako braillský řádek pro Backtalk? + Backtalk ji nebude používat, dokud ji nepovolíte. + %1$s bude moct číst vše, co Backtalk zobrazuje v Braillově písmu, což může být cokoli na obrazovce, včetně zpráv a toho, co píšete. Bude také moct ovládat vaše zařízení stejně jako pomocí braillského řádku: psát, otevírat aplikace a spouštět libovolné příkazy Backtalku. Povolte jen aplikace, kterým důvěřujete. + Povolit + Nepovolit + %1$s je váš braillský řádek + Když Backtalk používá %1$s, aplikace může číst obrazovku a ovládat zařízení. + Řádky z jiných aplikací + Povolené aplikace mohou fungovat jako braillské řádky pro Backtalk. Aplikace fungující jako braillský řádek může číst obrazovku a ovládat zařízení. + Žádná aplikace nemůže fungovat jako braillský řádek. + From 677874711a328573291a9482537f9ac0be44765d Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Fri, 16 Oct 2026 09:44:57 +0200 Subject: [PATCH 2/8] Temporarily validate Czech lint baseline --- .../workflows/czech-baseline-validation.yml | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 .github/workflows/czech-baseline-validation.yml diff --git a/.github/workflows/czech-baseline-validation.yml b/.github/workflows/czech-baseline-validation.yml new file mode 100644 index 000000000..398f5a5a9 --- /dev/null +++ b/.github/workflows/czech-baseline-validation.yml @@ -0,0 +1,129 @@ +name: Czech baseline validation + +on: + push: + branches: [czech-external-displays] + +permissions: + contents: write + +concurrency: + group: czech-baseline-validation + cancel-in-progress: true + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - uses: actions/setup-java@v6 + with: + distribution: temurin + java-version: 25 + + - uses: gradle/actions/setup-gradle@v6 + + - name: Regenerate lint baseline from actual lint output + run: ./gradlew updateLintBaselinePhoneDebug --console=plain + + - name: Validate baseline delta + shell: python + run: | + import re + import subprocess + import xml.etree.ElementTree as ET + + expected = { + "external_display_channel", + "external_display_ask_title", + "external_display_ask_text", + "external_display_warning", + "external_display_allow", + "external_display_deny", + "external_display_in_use_title", + "external_display_in_use_text", + "external_displays_title", + "external_displays_summary", + "external_displays_none", + } + source = "braille/brailledisplay/src/phone/res/values/strings.xml" + + before = subprocess.check_output( + ["git", "show", "HEAD:lint-baseline.xml"], text=True + ) + after = open("lint-baseline.xml", encoding="utf-8").read() + + def issues(text): + root = ET.fromstring(text) + out = {} + for issue in root.findall("issue"): + if issue.get("id") != "MissingTranslation": + continue + msg = issue.get("message", "") + match = re.match(r'"([^"]+)" is not translated in ', msg) + if not match: + continue + loc = issue.find("location") + if loc is None: + continue + key = (match.group(1), loc.get("file")) + out[key] = ( + msg, + issue.get("errorLine1", ""), + issue.get("errorLine2", ""), + loc.get("line", ""), + loc.get("column", ""), + ) + return out + + old = issues(before) + new = issues(after) + changed = { + key for key in old.keys() | new.keys() + if old.get(key) != new.get(key) + } + expected_changed = {(key, source) for key in expected} + + if changed != expected_changed: + print("Unexpected baseline delta.") + print("Expected:", sorted(expected_changed)) + print("Actual:", sorted(changed)) + raise SystemExit(1) + + for key in expected: + item = new.get((key, source)) + if item is None: + raise SystemExit(f"Missing regenerated baseline issue for {key}") + if '"cs" (Czech)' in item[0]: + raise SystemExit(f"Czech still present in baseline issue for {key}") + + print("Validated exactly 11 expected Czech MissingTranslation baseline updates.") + + - name: Commit regenerated baseline locally + id: baseline + run: | + if git diff --quiet -- lint-baseline.xml; then + echo "changed=false" >> "$GITHUB_OUTPUT" + else + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add lint-baseline.xml + git commit -m "Refresh lint baseline for Czech external display strings" + echo "changed=true" >> "$GITHUB_OUTPUT" + fi + + - name: Build debug APKs + run: ./gradlew assembleDebug --console=plain + + - name: Run unit tests + run: ./gradlew testPhoneDebugUnitTest --console=plain + + - name: Run lint + run: ./gradlew :lintPhoneDebug --console=plain + + - name: Push validated baseline + if: steps.baseline.outputs.changed == 'true' + run: git push origin HEAD:czech-external-displays From a031b62f0b8de3e53e4344b78cc425ae70c7c0b1 Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Fri, 16 Oct 2026 09:52:30 +0200 Subject: [PATCH 3/8] Fix lint tool permissions in validation workflow --- .github/workflows/czech-baseline-validation.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/czech-baseline-validation.yml b/.github/workflows/czech-baseline-validation.yml index 398f5a5a9..9d0bb00fb 100644 --- a/.github/workflows/czech-baseline-validation.yml +++ b/.github/workflows/czech-baseline-validation.yml @@ -26,6 +26,9 @@ jobs: - uses: gradle/actions/setup-gradle@v6 + - name: Restore lint tool executable permission + run: chmod +x tools/lint/ktfmt + - name: Regenerate lint baseline from actual lint output run: ./gradlew updateLintBaselinePhoneDebug --console=plain From 5dd2815ce198c3e5a27e90027827abaed8ae983a Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Fri, 16 Oct 2026 09:55:03 +0200 Subject: [PATCH 4/8] Use lint report for targeted Czech baseline refresh --- .../workflows/czech-baseline-validation.yml | 250 +++++++++++++----- 1 file changed, 183 insertions(+), 67 deletions(-) diff --git a/.github/workflows/czech-baseline-validation.yml b/.github/workflows/czech-baseline-validation.yml index 9d0bb00fb..55a95a98e 100644 --- a/.github/workflows/czech-baseline-validation.yml +++ b/.github/workflows/czech-baseline-validation.yml @@ -26,15 +26,25 @@ jobs: - uses: gradle/actions/setup-gradle@v6 - - name: Restore lint tool executable permission - run: chmod +x tools/lint/ktfmt - - - name: Regenerate lint baseline from actual lint output - run: ./gradlew updateLintBaselinePhoneDebug --console=plain - - - name: Validate baseline delta + # This first lint is intentionally allowed to fail. The existing baseline still contains + # Czech in these MissingTranslation messages, so lint reports the exact current messages + # after Czech has been translated. Those messages are our source of truth. + - name: Produce actual lint report + run: | + set +e + ./gradlew :lintPhoneDebug --console=plain + status=$? + echo "Initial lint exit code: $status" + find . -type f -name 'lint-results-phoneDebug.xml' -print + exit 0 + + - name: Refresh only the exact Czech baseline issues + id: baseline shell: python run: | + import copy + import html + import os import re import subprocess import xml.etree.ElementTree as ET @@ -53,70 +63,176 @@ jobs: "external_displays_none", } source = "braille/brailledisplay/src/phone/res/values/strings.xml" - - before = subprocess.check_output( - ["git", "show", "HEAD:lint-baseline.xml"], text=True - ) - after = open("lint-baseline.xml", encoding="utf-8").read() - - def issues(text): - root = ET.fromstring(text) - out = {} - for issue in root.findall("issue"): - if issue.get("id") != "MissingTranslation": - continue - msg = issue.get("message", "") - match = re.match(r'"([^"]+)" is not translated in ', msg) - if not match: - continue - loc = issue.find("location") - if loc is None: - continue - key = (match.group(1), loc.get("file")) - out[key] = ( - msg, - issue.get("errorLine1", ""), - issue.get("errorLine2", ""), - loc.get("line", ""), - loc.get("column", ""), + czech = '"cs" (Czech)' + + reports = [] + for root, dirs, files in os.walk("."): + if "lint-results-phoneDebug.xml" in files: + reports.append(os.path.join(root, "lint-results-phoneDebug.xml")) + if not reports: + raise SystemExit("lint-results-phoneDebug.xml was not produced") + if len(reports) != 1: + raise SystemExit(f"Expected one phone lint XML report, found: {reports}") + + report_root = ET.parse(reports[0]).getroot() + baseline_text = open("lint-baseline.xml", encoding="utf-8").read() + baseline_root = ET.fromstring(baseline_text) + + def key_from(issue): + if issue.get("id") != "MissingTranslation": + return None + m = re.match(r'"([^"]+)" is not translated in ', issue.get("message", "")) + return m.group(1) if m else None + + def source_matches(issue): + loc = issue.find("location") + if loc is None: + return False + path = (loc.get("file") or "").replace("\\", "/") + return path == source or path.endswith("/" + source) + + baseline_matches = {} + report_matches = {} + for key in expected: + baseline_matches[key] = [ + i for i in baseline_root.findall("issue") + if key_from(i) == key and source_matches(i) + ] + report_matches[key] = [ + i for i in report_root.findall("issue") + if key_from(i) == key and source_matches(i) + ] + if len(baseline_matches[key]) != 1: + raise SystemExit( + f"Expected exactly one baseline issue for {key} + {source}; " + f"found {len(baseline_matches[key])}" ) - return out - old = issues(before) - new = issues(after) - changed = { - key for key in old.keys() | new.keys() - if old.get(key) != new.get(key) + needs_refresh = { + key for key, issues in baseline_matches.items() + if czech in issues[0].get("message", "") } - expected_changed = {(key, source) for key in expected} - - if changed != expected_changed: - print("Unexpected baseline delta.") - print("Expected:", sorted(expected_changed)) - print("Actual:", sorted(changed)) - raise SystemExit(1) - for key in expected: - item = new.get((key, source)) - if item is None: - raise SystemExit(f"Missing regenerated baseline issue for {key}") - if '"cs" (Czech)' in item[0]: - raise SystemExit(f"Czech still present in baseline issue for {key}") - - print("Validated exactly 11 expected Czech MissingTranslation baseline updates.") - - - name: Commit regenerated baseline locally - id: baseline + if not needs_refresh: + print("All 11 targeted baseline issues are already refreshed for Czech.") + with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as f: + f.write("changed=false\n") + raise SystemExit(0) + + if needs_refresh != expected: + raise SystemExit( + "Partial/unexpected baseline state. Expected either all 11 or none to need " + f"refresh; found {sorted(needs_refresh)}" + ) + + for key in sorted(expected): + if len(report_matches[key]) != 1: + raise SystemExit( + f"Expected exactly one current lint incident for {key} + {source}; " + f"found {len(report_matches[key])}" + ) + current = report_matches[key][0] + if czech in current.get("message", ""): + raise SystemExit(f"Czech is still missing according to lint for {key}") + + # Locate raw issue blocks, match by key + exact source file, and replace only those 11. + # This preserves every unrelated baseline byte-for-byte. + issue_re = re.compile(r' ', re.S) + raw_blocks = issue_re.findall(baseline_text) + replacements = {} + + for block in raw_blocks: + try: + issue = ET.fromstring(block.strip()) + except ET.ParseError: + continue + key = key_from(issue) + if key not in expected or not source_matches(issue): + continue + if key in replacements: + raise SystemExit(f"Duplicate raw baseline block for {key} + {source}") + + old = baseline_matches[key][0] + cur = report_matches[key][0] + old_loc = old.find("location") + cur_loc = cur.find("location") + + def esc(value): + return html.escape(value or "", quote=True) + + new_block = ( + " \n' + " \n' + " " + ) + replacements[key] = (block, new_block) + + if set(replacements) != expected: + raise SystemExit( + f"Raw baseline match mismatch. Expected {sorted(expected)}, " + f"found {sorted(replacements)}" + ) + + updated = baseline_text + for key in sorted(expected): + old_block, new_block = replacements[key] + if updated.count(old_block) != 1: + raise SystemExit(f"Raw block for {key} is not unique") + updated = updated.replace(old_block, new_block, 1) + + open("lint-baseline.xml", "w", encoding="utf-8").write(updated) + + # Semantic safety check: only the 11 exact issues may differ. + before_root = ET.fromstring(baseline_text) + after_root = ET.fromstring(updated) + + def signature(issue): + loc = issue.find("location") + return ( + issue.get("id", ""), key_from(issue) or "", + (loc.get("file", "") if loc is not None else ""), + issue.get("message", ""), issue.get("errorLine1", ""), + issue.get("errorLine2", ""), + (loc.get("line", "") if loc is not None else ""), + (loc.get("column", "") if loc is not None else ""), + ) + + before = [signature(i) for i in before_root.findall("issue")] + after = [signature(i) for i in after_root.findall("issue")] + if len(before) != len(after): + raise SystemExit("Baseline issue count changed") + + changed = [] + for a, b in zip(before, after): + if a != b: + changed.append((a, b)) + if len(changed) != 11: + raise SystemExit(f"Expected exactly 11 changed baseline issues, got {len(changed)}") + for old_sig, new_sig in changed: + key = new_sig[1] + if key not in expected or new_sig[2] != source: + raise SystemExit(f"Unexpected baseline issue changed: {new_sig}") + if czech in new_sig[3]: + raise SystemExit(f"Czech still present after refresh for {key}") + + print("Validated exactly 11 targeted Czech MissingTranslation baseline updates.") + with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as f: + f.write("changed=true\n") + + - name: Commit refreshed baseline locally + if: steps.baseline.outputs.changed == 'true' run: | - if git diff --quiet -- lint-baseline.xml; then - echo "changed=false" >> "$GITHUB_OUTPUT" - else - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add lint-baseline.xml - git commit -m "Refresh lint baseline for Czech external display strings" - echo "changed=true" >> "$GITHUB_OUTPUT" - fi + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add lint-baseline.xml + git commit -m "Refresh lint baseline for Czech external display strings" - name: Build debug APKs run: ./gradlew assembleDebug --console=plain @@ -124,7 +240,7 @@ jobs: - name: Run unit tests run: ./gradlew testPhoneDebugUnitTest --console=plain - - name: Run lint + - name: Run final lint run: ./gradlew :lintPhoneDebug --console=plain - name: Push validated baseline From 4910fdd4bacb370b8a6186db24748ed347354820 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 16 Oct 2026 08:00:36 +0000 Subject: [PATCH 5/8] Refresh lint baseline for Czech external display strings --- lint-baseline.xml | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/lint-baseline.xml b/lint-baseline.xml index ad44fd5aa..87fda1307 100644 --- a/lint-baseline.xml +++ b/lint-baseline.xml @@ -19663,8 +19663,8 @@ Date: Fri, 16 Oct 2026 10:07:08 +0200 Subject: [PATCH 6/8] Remove temporary Czech validation workflow --- .../workflows/czech-baseline-validation.yml | 248 ------------------ 1 file changed, 248 deletions(-) delete mode 100644 .github/workflows/czech-baseline-validation.yml diff --git a/.github/workflows/czech-baseline-validation.yml b/.github/workflows/czech-baseline-validation.yml deleted file mode 100644 index 55a95a98e..000000000 --- a/.github/workflows/czech-baseline-validation.yml +++ /dev/null @@ -1,248 +0,0 @@ -name: Czech baseline validation - -on: - push: - branches: [czech-external-displays] - -permissions: - contents: write - -concurrency: - group: czech-baseline-validation - cancel-in-progress: true - -jobs: - validate: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v7 - with: - fetch-depth: 0 - - - uses: actions/setup-java@v6 - with: - distribution: temurin - java-version: 25 - - - uses: gradle/actions/setup-gradle@v6 - - # This first lint is intentionally allowed to fail. The existing baseline still contains - # Czech in these MissingTranslation messages, so lint reports the exact current messages - # after Czech has been translated. Those messages are our source of truth. - - name: Produce actual lint report - run: | - set +e - ./gradlew :lintPhoneDebug --console=plain - status=$? - echo "Initial lint exit code: $status" - find . -type f -name 'lint-results-phoneDebug.xml' -print - exit 0 - - - name: Refresh only the exact Czech baseline issues - id: baseline - shell: python - run: | - import copy - import html - import os - import re - import subprocess - import xml.etree.ElementTree as ET - - expected = { - "external_display_channel", - "external_display_ask_title", - "external_display_ask_text", - "external_display_warning", - "external_display_allow", - "external_display_deny", - "external_display_in_use_title", - "external_display_in_use_text", - "external_displays_title", - "external_displays_summary", - "external_displays_none", - } - source = "braille/brailledisplay/src/phone/res/values/strings.xml" - czech = '"cs" (Czech)' - - reports = [] - for root, dirs, files in os.walk("."): - if "lint-results-phoneDebug.xml" in files: - reports.append(os.path.join(root, "lint-results-phoneDebug.xml")) - if not reports: - raise SystemExit("lint-results-phoneDebug.xml was not produced") - if len(reports) != 1: - raise SystemExit(f"Expected one phone lint XML report, found: {reports}") - - report_root = ET.parse(reports[0]).getroot() - baseline_text = open("lint-baseline.xml", encoding="utf-8").read() - baseline_root = ET.fromstring(baseline_text) - - def key_from(issue): - if issue.get("id") != "MissingTranslation": - return None - m = re.match(r'"([^"]+)" is not translated in ', issue.get("message", "")) - return m.group(1) if m else None - - def source_matches(issue): - loc = issue.find("location") - if loc is None: - return False - path = (loc.get("file") or "").replace("\\", "/") - return path == source or path.endswith("/" + source) - - baseline_matches = {} - report_matches = {} - for key in expected: - baseline_matches[key] = [ - i for i in baseline_root.findall("issue") - if key_from(i) == key and source_matches(i) - ] - report_matches[key] = [ - i for i in report_root.findall("issue") - if key_from(i) == key and source_matches(i) - ] - if len(baseline_matches[key]) != 1: - raise SystemExit( - f"Expected exactly one baseline issue for {key} + {source}; " - f"found {len(baseline_matches[key])}" - ) - - needs_refresh = { - key for key, issues in baseline_matches.items() - if czech in issues[0].get("message", "") - } - - if not needs_refresh: - print("All 11 targeted baseline issues are already refreshed for Czech.") - with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as f: - f.write("changed=false\n") - raise SystemExit(0) - - if needs_refresh != expected: - raise SystemExit( - "Partial/unexpected baseline state. Expected either all 11 or none to need " - f"refresh; found {sorted(needs_refresh)}" - ) - - for key in sorted(expected): - if len(report_matches[key]) != 1: - raise SystemExit( - f"Expected exactly one current lint incident for {key} + {source}; " - f"found {len(report_matches[key])}" - ) - current = report_matches[key][0] - if czech in current.get("message", ""): - raise SystemExit(f"Czech is still missing according to lint for {key}") - - # Locate raw issue blocks, match by key + exact source file, and replace only those 11. - # This preserves every unrelated baseline byte-for-byte. - issue_re = re.compile(r' ', re.S) - raw_blocks = issue_re.findall(baseline_text) - replacements = {} - - for block in raw_blocks: - try: - issue = ET.fromstring(block.strip()) - except ET.ParseError: - continue - key = key_from(issue) - if key not in expected or not source_matches(issue): - continue - if key in replacements: - raise SystemExit(f"Duplicate raw baseline block for {key} + {source}") - - old = baseline_matches[key][0] - cur = report_matches[key][0] - old_loc = old.find("location") - cur_loc = cur.find("location") - - def esc(value): - return html.escape(value or "", quote=True) - - new_block = ( - " \n' - " \n' - " " - ) - replacements[key] = (block, new_block) - - if set(replacements) != expected: - raise SystemExit( - f"Raw baseline match mismatch. Expected {sorted(expected)}, " - f"found {sorted(replacements)}" - ) - - updated = baseline_text - for key in sorted(expected): - old_block, new_block = replacements[key] - if updated.count(old_block) != 1: - raise SystemExit(f"Raw block for {key} is not unique") - updated = updated.replace(old_block, new_block, 1) - - open("lint-baseline.xml", "w", encoding="utf-8").write(updated) - - # Semantic safety check: only the 11 exact issues may differ. - before_root = ET.fromstring(baseline_text) - after_root = ET.fromstring(updated) - - def signature(issue): - loc = issue.find("location") - return ( - issue.get("id", ""), key_from(issue) or "", - (loc.get("file", "") if loc is not None else ""), - issue.get("message", ""), issue.get("errorLine1", ""), - issue.get("errorLine2", ""), - (loc.get("line", "") if loc is not None else ""), - (loc.get("column", "") if loc is not None else ""), - ) - - before = [signature(i) for i in before_root.findall("issue")] - after = [signature(i) for i in after_root.findall("issue")] - if len(before) != len(after): - raise SystemExit("Baseline issue count changed") - - changed = [] - for a, b in zip(before, after): - if a != b: - changed.append((a, b)) - if len(changed) != 11: - raise SystemExit(f"Expected exactly 11 changed baseline issues, got {len(changed)}") - for old_sig, new_sig in changed: - key = new_sig[1] - if key not in expected or new_sig[2] != source: - raise SystemExit(f"Unexpected baseline issue changed: {new_sig}") - if czech in new_sig[3]: - raise SystemExit(f"Czech still present after refresh for {key}") - - print("Validated exactly 11 targeted Czech MissingTranslation baseline updates.") - with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as f: - f.write("changed=true\n") - - - name: Commit refreshed baseline locally - if: steps.baseline.outputs.changed == 'true' - run: | - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add lint-baseline.xml - git commit -m "Refresh lint baseline for Czech external display strings" - - - name: Build debug APKs - run: ./gradlew assembleDebug --console=plain - - - name: Run unit tests - run: ./gradlew testPhoneDebugUnitTest --console=plain - - - name: Run final lint - run: ./gradlew :lintPhoneDebug --console=plain - - - name: Push validated baseline - if: steps.baseline.outputs.changed == 'true' - run: git push origin HEAD:czech-external-displays From e3a85e282de1b1e07495cbca5da1d1f4eedb3b81 Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Fri, 16 Oct 2026 10:07:21 +0200 Subject: [PATCH 7/8] noop --- noop | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 noop diff --git a/noop b/noop new file mode 100644 index 000000000..e69de29bb From 951b0a65487cdcbc2b47c8906b68b8e6510679f8 Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Fri, 16 Oct 2026 10:07:34 +0200 Subject: [PATCH 8/8] Remove accidental empty file --- noop | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 noop diff --git a/noop b/noop deleted file mode 100644 index e69de29bb..000000000