chore(ci): add lint+format PR gate, reusable template, and consolidate Node 24#992
Open
MiguelLZPF wants to merge 2 commits intodevelopmentfrom
Open
chore(ci): add lint+format PR gate, reusable template, and consolidate Node 24#992MiguelLZPF wants to merge 2 commits intodevelopmentfrom
MiguelLZPF wants to merge 2 commits intodevelopmentfrom
Conversation
d52b8b4 to
b04f320
Compare
…ation
- Added ATS (103) and MP (104) lint+format workflow gates to PR pipeline
- Introduced reusable 800-call-lint-format template (Hiero [CALL] pattern)
- Supports delta-mode (changed files only) for dev velocity
- Full-tree mode for CI accuracy on PR/push
- Space-safe with git diff -z / xargs -0
- Centralized Node.js version management via .nvmrc (LTS 24.15.0)
- All workflows now use node-version-file: .nvmrc
- Removed obsolete NODE_OPTIONS heap bumps from package.json scripts:
* Root: ats:contracts:build, ats:web:build, ats:web:test
* contracts: 5 scripts cleaned
* sdk: test cleaned
- Aligned workflow name prefixes with filenames (001-003, 100-102)
- Consolidated CI runners: ubuntu-latest → token-studio-linux-medium (300, 301)
- Added @typescript-eslint/no-dupe-class-members to mass-payout SDK eslint
This enables per-package lint gates while maintaining full-tree integrity.
Signed-off-by: Miguel_LZPF <miguel.carpena@io.builders>
Applied eslint and formatting fixes across: - ATS web: 16 files (components, tests, views, utils) - ATS SDK: 9 files (event service, validation, core types, tests) - MP frontend: 8 files (services, views, hooks, tests) - MP contracts: added .gitignore entry for results/*.js - MP SDK: 4 command handler files with implicit-any fixes All changes pass linting and enable the new PR gate workflows (103-flow-ats-lint, 104-flow-mp-lint) without blockage. Signed-off-by: Miguel_LZPF <miguel.carpena@io.builders>
b04f320 to
2ebccaf
Compare
marcosio
approved these changes
Apr 28, 2026
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.
Description
Adds a PR-time CI gate that runs
npm run <module>:format:check && npm run <module>:lintfor ATS and Mass Payout independently, plus the related CI housekeeping required to make the gate land cleanly.Highlights
103-flow-ats-lint.yamland104-flow-mp-lint.yaml— trigger on PRs touching their respective module paths.800-call-lint-format.yaml(Hiero[CALL]800-prefix) — both 103 and 104 are thin shells that delegate to it.npm run <module>:lintcontract. Delta-mode scripts kept inpackage.jsonfor local dev only..nvmrc(24.15.0— current Active LTS, exact-patch pin) vianode-version-file:in everysetup-nodestep. Drops 11 hard-codednode-version: 22.20.0references.NODE_OPTIONS=--max-old-space-size=...heap bumps removed acrosspackage.jsons and workflowenv:blocks. They pre-date the lib-based architecture migration and are no longer required (verified: contracts/sdk/web build green, web tests pass).name:prefixes aligned with filenames — fixes 6 deviant entries (e.g.001-flow-pull-request-formatting.yamlpreviously declared"000: [FLOW]"). Hiero naming is now consistent across all 11 workflows.300/301switched fromubuntu-latesttotoken-studio-linux-mediumfor parity with the rest of the repo.@typescript-eslint/no-dupe-class-membersenabled in MP SDK eslint config (TS-aware variant; the baseno-dupe-class-membersmisreports overload signatures).Lint debt cleanup (Commit 2)
The new gate would have failed on day-one because of pre-existing latent debt that lint-staged never surfaced (it only checks staged files). Addressed alongside:
catch {}for unused caught errors,let→const, removedtest.onlydebug leftover, fixed twoexpect(...)calls missing matchers, two duplicate test titles).eslint-disablefor removed rule names purged, barecatch, unused vars/imports/createMockremoved, unused expressions converted toif).catch, unused destructure removed,prefer-const, conditionalexpectrefactored to setup-driven unconditional asserts).scripts/results/*.jsremoved from tracking (had.tssiblings — accidental check-ins). Added gitignore safety net.packages/mass-payout/contractsmax-leninlifecyclecashflow.test.ts(longit("…")test descriptions)packages/mass-payout/sdkprettier/prettierinlifeCycleCashFlow/operations/Execute*CommandHandler.ts(long class declarations that prettier flattens past the 120-char limit)These are length-rule conflicts where prettier's
printWidth: 120and ESLint'smax-len: 120disagree on string literals and long class declarations.104-flow-mp-lint.yamlwill fail until they are resolved. Recommended approaches for the follow-up PR:max-lento a higher cap for MP (e.g. 140), ORmax-lenin MP eslint configs and defer entirely to prettier.This PR intentionally does NOT pick a direction — it surfaces the debt cleanly for a separate decision.
Type of change
Testing
npm run ats:format:check→ green.npm run ats:lint→ green (0 errors, 2 pre-existing warnings).npm run ats:contracts:build/ats:sdk:build/ats:web:build→ green (without NODE_OPTIONS heap bumps).npm run ats:web:test→ 183/183 passing, 79 snapshots.npx jest TabContent.test -t "should pass t function to components"→ 1/1 passing (verifies the restored assertion).npx prettier --checkon all new YAMLs → green.npm run mass-payout:format:check→ green.npm run mass-payout:lint→ 24 errors (all length-rule, scoped above).