fix(ci): repo-wide lint gate fixes (eslint, lint-ga, lint-k8s, text) - #28
Merged
Conversation
Чотири CI-перевірки падали на PR #26 незалежно від mt-core фіксу: - eslint/knip: knip.json ігнорував .pi/extensions/n-cursor-adr/** — тека давно перейменована на n-rules-adr, плюс rtk.ts ніколи не був у ignore; @7n/rules-ci-github/-lang-js/-lang-rust помилково вважались unused devDependencies (насправді підключаються плагінами @7n/rules, не імпортом). - lint-ga / lint-js / lint-text: on.pull_request.paths був відсутній або неповний у трьох workflow — push.paths фільтрував тригер, а pull_request ганяв лінт на кожен PR незалежно від зачеплених файлів (і одразу падав на policy-deny drift-перевірці на невідповідність канону). - text: .cspell.json бракувало кількох легітимних українських слів (мейнтейнера, недовірений, стрімоване, доставки, залежнісного) — частина з'явилась у щойно перегенерованих доках; oxfmt/eslint/stylelint дрейф у PullRequestsDialog.vue/TaskGraph.vue (сумісний формат для всіх трьох лінтерів одночасно). - k8s: k8s/teleport/ingress.yaml насправді містив NetworkPolicy (не Ingress) під невірною назвою файлу — мандатор-перевірка не бачила її для StatefulSet teleport. Перейменовано на networkpolicy.yaml + додано intra-replica ingress/egress правила зі stateful-set-канону. Поза скоупом (свідомо відкладено, обговорено з користувачем): - kubescape виявляє ~17 контролів security posture по всьому k8s/ дереву (RBAC, securityContext, naked pods, missing NetworkPolicy для naked Pod у dev-pod/) — не квапливий CI-фікс, потребує функціональних рішень поза скоупом цієї задачі. - doc-files: ще ~19 файлів (app/src/*.js, owner/src/*.js) мають застарілі доки не повʼязані з цим PR — залишено як є. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Four CI checks (
eslint,lint-ga,lint-k8s,text) were failing on #26, independent of the mt-core dependency fix that PR shipped. This PR addresses those four, each root-caused separately:knip.json's ignore list still pointed at.pi/extensions/n-cursor-adr/**— the directory was renamed ton-rules-adra while back — plusrtk.tswas never added to the ignore list at all. Also@7n/rules-ci-github/-lang-js/-lang-rustwere flagged as unused devDependencies; they're actually consumed as plugins by the@7n/rulesCLI, not via JSimport, so knip's static analysis can't see the usage.on.pull_request.pathswas missing or incomplete on three workflow files.push.pathsfiltered the trigger correctly, butpull_requestran unconditionally on every PR — and then failed its own drift-check against canon for not matching the expected glob set..cspell.jsonwas missing a handful of legitimate Ukrainian words (мейнтейнера,недовірений,стрімоване, plusдоставки/залежнісногоthat showed up in freshly-regenerated docs). Also fixed pre-existing oxfmt/eslint/stylelint formatting drift inPullRequestsDialog.vueandTaskGraph.vue— found a wrapping style compatible with all three linters at once (oxfmt's own preferred wrap for aq-badgemustache conflicted with eslint'svue/multiline-html-element-content-newline, and its CSS reflow needed stylelint'srule-empty-line-beforeblank lines added).k8s/teleport/ingress.yamlactually contained aNetworkPolicyresource (not anIngress) under the wrong filename, so the mandatory-NetworkPolicy check couldn't find it for theteleportStatefulSet. Renamed tonetworkpolicy.yamland added the intra-replica ingress/egress rules required by the StatefulSet canon snippet.Also regenerated the two doc files (
docs/PullRequestsDialog.md,docs/TaskGraph.md) per this repo's doc-files convention, since their source files changed.Deliberately out of scope (discussed and agreed)
kubescape scan k8ssurfaces ~17 distinct security-posture controls across the wholek8s/tree (RBAC delete capabilities, non-root containers, immutable filesystem, naked pods, a second missing NetworkPolicy for the nakedPodink8s/dev-pod/template.yaml, etc.). This is a pre-existing hardening backlog, not a quick CI fix — several findings need functional judgment calls (e.g. does teleport's container actually need root, is the RBAC delete capability load-bearing) that are better handled as their own scoped effort.app/src/*.js,owner/src/*.js) have stale docs unrelated to this PR's diff — left alone to keep this change focused.Verification
Ran each fixed check locally with the exact tool version pinned in
bun.lock(1.51.0 — my first pass used a stale 1.45.0 install and chased a couple of false positives/negatives before catching that):npx @7n/rules lint ga --no-fix→ cleannpx @7n/rules lint js --no-fix→ cleannpx @7n/rules lint text --no-fix→ cleannpx @7n/rules lint style --no-fix→ cleanbunx knip --no-config-hints→ cleannpx @7n/rules lint k8s --no-fix→ only the deliberately-deferred kubescape backlog remains (missing-NetworkPolicy violation forteleportis gone)Test plan
eslint,lint-ga,lint-js,lint-textfor this PRlint-k8sstill shows the kubescape security-posture backlog (expected, tracked separately)🤖 Generated with Claude Code