Skip to content

feat(area-codes): add getMunicipalitiesByAreaCode and getAreaCodeByMunicipalityCode - #597

Merged
hyanmandian merged 12 commits into
claude/lookup-fixesfrom
claude/area-code-municipalities
Sep 29, 2026
Merged

hyanmandian merged 12 commits into
claude/lookup-fixesfrom
claude/area-code-municipalities

Conversation

@hyanmandian

Copy link
Copy Markdown
Member

What does this PR do?

This PR adds two lookups between DDDs and municipalities. Until now getAreaCodeInfo only returned the state of a DDD, so there was no way to list the municipalities that dial it, or to find a municipality's DDD. It stacks on #596.

Function Returns
getAreaCodeByMunicipalityCode(code) The DDD of a municipality from its 7-digit IBGE code, or null when the code is not a municipality. It builds on getMunicipalityByCode and reads the code the same way.
getMunicipalitiesByAreaCode(areaCode) The { code, name, stateCode } of every municipality that dials the DDD, or [] for a DDD not in use. It builds on getAreaCodeInfo and reads the DDD the same way, parentheses included. The seat state's municipalities come first, then those of the state the DDD crosses into, each state sorted by name.
getAreaCodeByMunicipalityCode('3550308'); // 11
getAreaCodeByMunicipalityCode('4122305'); // 47 (Rio Negro/PR)
getMunicipalitiesByAreaCode('(61)').length; // 13 (Brasília and 12 municipalities of Goiás)
getMunicipalitiesByAreaCode(68).length; // 22 (every municipality of Acre)

Data

  • The source is the official Codigos_Nacionais.csv that Anatel publishes in pgcn.zip (21/09/2026). Only the rows in force are kept (VIGENTE = Sim).
  • It has 5,571 rows, one per municipality, and they match the IBGE table exactly.
  • They also match the existing AREA_CODE_STATES / AREA_CODE_SECONDARY_STATES: the same 67 DDDs, each with the same states. The four cross-border cases are the same too: 61 covers 12 municipalities of Goiás; Porto União (SC) dials 42, Rio Negro (PR) 47 and Barracão (PR) 49.
  • scripts/area-codes.ts generates src/_internals/constants/municipality-area-codes.ts and runs with the other datasets in scripts/data.ts.
    • Format: for each state, one string with the two digits of each municipality's DDD, in ascending order of municipality code.
    • To read the zip, scripts/read-xlsx-sheet.ts now exports readZipFile, which reuses its existing unzip code.
    • Running the generator on the Anatel zip reproduces the committed file byte for byte.
  • A test checks that the table covers exactly the IBGE municipalities and agrees with AREA_CODE_STATES.

The docs (docs/utilities.md, docs/pt-br/utilities.md, and the dataset table in both getting-started.md), jsr.json, context7.json and the data summary are updated.

Checklist

  • My commit/PR title follows Conventional Commits.
  • I added or updated tests covering this change: unit tests, fast-check properties (the two functions agree with each other, and every municipality is listed under exactly one DDD), and the table invariants.
  • I updated the documentation in both docs/utilities.md and docs/pt-br/utilities.md.
  • npm run check passes locally. Coverage (100%, 7777 tests), Deno, Bun, check:unused, check:duplication, check:api and Stryker on the new files (100%) also pass.
  • I ran npm run build:llms.
  • This change does not introduce a breaking change. It only adds exports; check:api reports no breaking change against 2.4.0.
  • This change does not add any runtime dependency.

Additional context

  • Tree-shaking shows no regression. The new functions are 165.0 KB (getAreaCodeByMunicipalityCode) and 167.8 KB (getMunicipalitiesByAreaCode) minified, or 52.1 and 52.8 KB gzipped.
  • Nearly all of that is the municipality table they need anyway (153.7 KB, 49.5 KB gzipped, the same as getMunicipalityByCode). The DDD data adds 11.5 KB minified (2.6 KB gzipped).
  • Sources:

🤖 Generated with Claude Code

https://claude.ai/code/session_01RLkm9YrtAifc6XCLFVEsdH


Generated by Claude Code

…nicipalityCode

There was no way to go from a DDD to the municipalities that dial it, or from a
municipality to its DDD; getAreaCodeInfo only knew the state. Both now come from the
Código Nacional in force for every municipality, in the Codigos_Nacionais.csv Anatel
publishes in pgcn.zip (21/09/2026): 5,571 rows in force, the same municipalities as the
IBGE table, and the same 67 DDDs and four cross-border ones as AREA_CODE_STATES.

getAreaCodeByMunicipalityCode builds on getMunicipalityByCode and returns the DDD, or null
for a code that is not a municipality. getMunicipalitiesByAreaCode builds on
getAreaCodeInfo and lists the municipalities of the seat state first, then those of the
state the DDD crosses into (61 covers 12 municipalities of Goiás; 42, 47 and 49 one each).

scripts/area-codes.ts generates the table and runs with the other datasets. It stores the
two digits of each municipality's DDD in ascending order of the municipality code, one
string per state, so it adds 11.5 KB minified (2.6 KB gzipped) on top of the municipality
table the two functions already need. A test checks the table covers exactly the
municipalities of the IBGE table and agrees with AREA_CODE_STATES.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RLkm9YrtAifc6XCLFVEsdH
@vercel

vercel Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
brazilian-utils Ready Ready Preview Sep 29, 2026 3:16am UTC

@coderabbitai

coderabbitai Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 13855eee-b60f-4492-8b2f-18fe10e219b8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Member Author

"Publish a preview to pkg.pr.new" failed in the service's publish call, not in this PR. The build, attw and publint steps passed. Then pkg-pr-new publish got a 500 from the pkg.pr.new server, and its retry got a 404 ("There is no workflow defined for …"). This PR doesn't touch that workflow and there's no fix to port, so I've re-run the failed job once.


Generated by Claude Code

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Tree-shaking report

✅ No size regression. 2 grew, 1 shrank, 2 new out of 187 exports.

Base Head Δ
Pre-existing exports, all imported 1883.6 KB 1883.6 KB (gzip 346.9 KB) +12 B (+0.0%)
Full import 1883.6 KB 1895.1 KB (gzip 349.9 KB) +11.5 KB (+0.6%)
Exports 185 187 +2

What changed (5)

Export Base Head Δ gzip
🆕 getMunicipalitiesByAreaCode — 167.8 KB new 52.8 KB
🆕 getAreaCodeByMunicipalityCode — 165.0 KB new 52.2 KB
🟡 getAreaCodeInfo 3.1 KB 3.1 KB +4 B (+0.1%) 989 B
🟡 getCities 153.4 KB 153.4 KB +4 B (+0.0%) 49.2 KB
🟢 getMunicipalityByCode 153.8 KB 153.8 KB -4 B (-0.0%) 49.5 KB
All exports (187)
Export Base Head Δ gzip
⚪ GetAddressInfoByCepError 112 B 112 B 0 B 124 B
⚪ GetAddressInfoByCepNotFoundError 205 B 205 B 0 B 145 B
⚪ GetAddressInfoByCepServiceError 204 B 204 B 0 B 143 B
⚪ GetAddressInfoByCepValidationError 203 B 203 B 0 B 144 B
⚪ GetCepInfoByAddressError 112 B 112 B 0 B 124 B
⚪ GetCepInfoByAddressNotFoundError 205 B 205 B 0 B 145 B
⚪ GetCepInfoByAddressValidationError 203 B 203 B 0 B 144 B
⚪ addBusinessDays 8.5 KB 8.5 KB 0 B 3.0 KB
⚪ capitalize 2.4 KB 2.4 KB 0 B 1.2 KB
⚪ convertCurrencyToWords 2.0 KB 2.0 KB 0 B 1.0 KB
⚪ convertDateToWords 2.4 KB 2.4 KB 0 B 1.2 KB
⚪ convertLicensePlateToMercosul 527 B 527 B 0 B 363 B
⚪ convertNumberToWords 1.6 KB 1.6 KB 0 B 819 B
⚪ differenceInBusinessDays 8.4 KB 8.4 KB 0 B 3.0 KB
⚪ formatBoleto 649 B 649 B 0 B 402 B
⚪ formatCEP 470 B 470 B 0 B 334 B
⚪ formatCNPJ 620 B 620 B 0 B 420 B
⚪ formatCPF 521 B 521 B 0 B 365 B
⚪ formatCaepf 487 B 487 B 0 B 344 B
⚪ formatCei 484 B 484 B 0 B 343 B
⚪ formatCep 470 B 470 B 0 B 334 B
⚪ formatCertidao 513 B 513 B 0 B 350 B
⚪ formatCest 474 B 474 B 0 B 337 B
⚪ formatCid10 459 B 459 B 0 B 330 B
⚪ formatCnae 474 B 474 B 0 B 340 B
⚪ formatCnh 517 B 517 B 0 B 361 B
⚪ formatCno 488 B 488 B 0 B 344 B
⚪ formatCnpj 620 B 620 B 0 B 420 B
⚪ formatCns 483 B 483 B 0 B 340 B
⚪ formatCpf 521 B 521 B 0 B 365 B
⚪ formatCurrency 985 B 985 B 0 B 592 B
⚪ formatIban 267 B 267 B 0 B 228 B
⚪ formatLegalNature 470 B 470 B 0 B 337 B
⚪ formatLicensePlate 361 B 361 B 0 B 270 B
⚪ formatNbs 462 B 462 B 0 B 334 B
⚪ formatNcm 475 B 475 B 0 B 338 B
⚪ formatNfeKey 601 B 601 B 0 B 383 B
⚪ formatPassport 187 B 187 B 0 B 174 B
⚪ formatPhone 2.6 KB 2.6 KB 0 B 1.2 KB
⚪ formatPis 521 B 521 B 0 B 365 B
⚪ formatProcessoJuridico 490 B 490 B 0 B 344 B
⚪ formatSuframa 476 B 476 B 0 B 338 B
⚪ formatVoterId 523 B 523 B 0 B 365 B
⚪ generateBoleto 1.4 KB 1.4 KB 0 B 779 B
⚪ generateCNPJ 843 B 843 B 0 B 523 B
⚪ generateCPF 628 B 628 B 0 B 423 B
⚪ generateCep 130 B 130 B 0 B 136 B
⚪ generateCnh 565 B 565 B 0 B 343 B
⚪ generateCnpj 843 B 843 B 0 B 523 B
⚪ generateCpf 628 B 628 B 0 B 423 B
⚪ generateLegalNature 5.0 KB 5.0 KB 0 B 1.6 KB
⚪ generateLicensePlate 266 B 266 B 0 B 227 B
⚪ generatePassport 226 B 226 B 0 B 191 B
⚪ generatePhone 670 B 670 B 0 B 419 B
⚪ generatePis 357 B 357 B 0 B 272 B
⚪ generatePixPayload 4.5 KB 4.5 KB 0 B 2.0 KB
⚪ generateProcessoJuridico 821 B 821 B 0 B 523 B
⚪ generateRenavam 378 B 378 B 0 B 284 B
⚪ generateSuframa 451 B 451 B 0 B 335 B
⚪ generateVoterId 852 B 852 B 0 B 551 B
⚪ getAddressInfoByCep 3.9 KB 3.9 KB 0 B 1.7 KB
🆕 getAreaCodeByMunicipalityCode — 165.0 KB new 52.2 KB
🟡 getAreaCodeInfo 3.1 KB 3.1 KB +4 B (+0.1%) 989 B
⚪ getAreaCodesByState 809 B 809 B 0 B 459 B
⚪ getBankByCode 37.8 KB 37.8 KB 0 B 9.2 KB
⚪ getBankByIspb 37.8 KB 37.8 KB 0 B 9.2 KB
⚪ getBanks 37.6 KB 37.6 KB 0 B 9.0 KB
⚪ getBoletoInfo 2.4 KB 2.4 KB 0 B 1.2 KB
⚪ getCbo 115.7 KB 115.7 KB 0 B 29.5 KB
⚪ getCepInfoByAddress 2.0 KB 2.0 KB 0 B 1.0 KB
⚪ getCertidaoInfo 1.0 KB 1.0 KB 0 B 594 B
⚪ getCest 115.5 KB 115.5 KB 0 B 26.1 KB
⚪ getCfop 67.6 KB 67.6 KB 0 B 6.3 KB
⚪ getCid10 988.3 KB 988.3 KB 0 B 123.6 KB
🟡 getCities 153.4 KB 153.4 KB +4 B (+0.0%) 49.2 KB
⚪ getClassTrib 50.0 KB 50.0 KB 0 B 9.0 KB
⚪ getCnae 91.6 KB 91.6 KB 0 B 20.0 KB
⚪ getCnpjInfo 964 B 964 B 0 B 542 B
⚪ getCpfInfo 994 B 994 B 0 B 614 B
⚪ getCstIbsCbs 967 B 967 B 0 B 534 B
⚪ getFormatLicensePlate 315 B 315 B 0 B 245 B
⚪ getGtinInfo 817 B 817 B 0 B 555 B
⚪ getHolidays 7.4 KB 7.4 KB 0 B 2.6 KB
⚪ getIbanInfo 752 B 752 B 0 B 494 B
⚪ getLegalNature 5.6 KB 5.6 KB 0 B 1.8 KB
⚪ getLegalNatures 5.1 KB 5.1 KB 0 B 1.6 KB
⚪ getLegalNaturesByCategory 5.6 KB 5.6 KB 0 B 1.9 KB
⚪ getMunicipalities 153.6 KB 153.6 KB 0 B 49.4 KB
🆕 getMunicipalitiesByAreaCode — 167.8 KB new 52.8 KB
⚪ getMunicipality 154.1 KB 154.1 KB 0 B 49.7 KB
🟢 getMunicipalityByCode 153.8 KB 153.8 KB -4 B (-0.0%) 49.5 KB
⚪ getNbs 80.6 KB 80.6 KB 0 B 13.1 KB
⚪ getNfeKeyInfo 2.2 KB 2.2 KB 0 B 1.2 KB
⚪ getNfseKeyInfo 2.4 KB 2.4 KB 0 B 1.2 KB
⚪ getPixKeyInfo 2.5 KB 2.5 KB 0 B 1.2 KB
⚪ getPixPayloadInfo 4.6 KB 4.6 KB 0 B 2.1 KB
⚪ getServiceItem 26.1 KB 26.1 KB 0 B 8.4 KB
⚪ getStateByCep 3.6 KB 3.6 KB 0 B 1.0 KB
⚪ getStateByIbgeCode 2.4 KB 2.4 KB 0 B 700 B
⚪ getStateCodeByName 2.3 KB 2.3 KB 0 B 649 B
⚪ getStateNameByCode 2.2 KB 2.2 KB 0 B 591 B
⚪ getStates 2.2 KB 2.2 KB 0 B 539 B
⚪ getTimezoneByState 737 B 737 B 0 B 327 B
⚪ isBusinessDay 7.8 KB 7.8 KB 0 B 2.8 KB
⚪ isHoliday 7.7 KB 7.7 KB 0 B 2.7 KB
⚪ isValidBankAccount 5.2 KB 5.2 KB 0 B 2.3 KB
⚪ isValidBoleto 1.6 KB 1.6 KB 0 B 892 B
⚪ isValidCEP 163 B 163 B 0 B 163 B
⚪ isValidCNPJ 796 B 796 B 0 B 447 B
⚪ isValidCPF 500 B 500 B 0 B 334 B
⚪ isValidCaepf 782 B 782 B 0 B 479 B
⚪ isValidCbo 16.2 KB 16.2 KB 0 B 5.5 KB
⚪ isValidCei 714 B 714 B 0 B 472 B
⚪ isValidCep 163 B 163 B 0 B 163 B
⚪ isValidCertidao 758 B 758 B 0 B 462 B
⚪ isValidCest 7.6 KB 7.6 KB 0 B 2.3 KB
⚪ isValidCfop 2.8 KB 2.8 KB 0 B 1.4 KB
⚪ isValidCid10 26.2 KB 26.2 KB 0 B 6.8 KB
⚪ isValidClassTrib 1.8 KB 1.8 KB 0 B 639 B
⚪ isValidCnae 9.6 KB 9.6 KB 0 B 3.4 KB
⚪ isValidCnh 610 B 610 B 0 B 370 B
⚪ isValidCno 718 B 718 B 0 B 474 B
⚪ isValidCnpj 796 B 796 B 0 B 447 B
⚪ isValidCns 746 B 746 B 0 B 475 B
⚪ isValidCpf 500 B 500 B 0 B 334 B
⚪ isValidCreditCard 555 B 555 B 0 B 389 B
⚪ isValidCsosn 330 B 330 B 0 B 262 B
⚪ isValidCst 995 B 995 B 0 B 569 B
⚪ isValidCstIbsCbs 894 B 894 B 0 B 505 B
⚪ isValidEmail 171 B 171 B 0 B 157 B
⚪ isValidGtin 428 B 428 B 0 B 313 B
⚪ isValidIE 5.1 KB 5.1 KB 0 B 1.8 KB
⚪ isValidIban 531 B 531 B 0 B 376 B
⚪ isValidIe 5.1 KB 5.1 KB 0 B 1.8 KB
⚪ isValidLandlinePhone 717 B 717 B 0 B 463 B
⚪ isValidLegalNature 649 B 649 B 0 B 427 B
⚪ isValidLicensePlate 267 B 267 B 0 B 216 B
⚪ isValidMobilePhone 758 B 758 B 0 B 496 B
⚪ isValidNbs 8.5 KB 8.5 KB 0 B 2.3 KB
⚪ isValidNcm 82.6 KB 82.6 KB 0 B 22.8 KB
⚪ isValidNfeKey 1.6 KB 1.6 KB 0 B 954 B
⚪ isValidNfseKey 2.1 KB 2.1 KB 0 B 1.1 KB
⚪ isValidPIS 418 B 418 B 0 B 316 B
⚪ isValidPassport 197 B 197 B 0 B 186 B
⚪ isValidPhone 1.8 KB 1.8 KB 0 B 909 B
⚪ isValidPis 418 B 418 B 0 B 316 B
⚪ isValidPixKey 2.3 KB 2.3 KB 0 B 1.1 KB
⚪ isValidPixPayload 4.2 KB 4.2 KB 0 B 1.9 KB
⚪ isValidProcessoJuridico 699 B 699 B 0 B 429 B
⚪ isValidRegistroProfissional 1.2 KB 1.2 KB 0 B 724 B
⚪ isValidRenavam 516 B 516 B 0 B 356 B
⚪ isValidServiceItem 1.2 KB 1.2 KB 0 B 694 B
⚪ isValidServicePhone 706 B 706 B 0 B 372 B
⚪ isValidSuframa 590 B 590 B 0 B 411 B
⚪ isValidVin 848 B 848 B 0 B 573 B
⚪ isValidVoterId 706 B 706 B 0 B 427 B
⚪ parseBoleto 247 B 247 B 0 B 215 B
⚪ parseCaepf 199 B 199 B 0 B 183 B
⚪ parseCbo 198 B 198 B 0 B 182 B
⚪ parseCei 199 B 199 B 0 B 183 B
⚪ parseCep 198 B 198 B 0 B 182 B
⚪ parseCertidao 199 B 199 B 0 B 183 B
⚪ parseCest 198 B 198 B 0 B 182 B
⚪ parseCfop 198 B 198 B 0 B 182 B
⚪ parseCid10 177 B 177 B 0 B 170 B
⚪ parseCnae 198 B 198 B 0 B 182 B
⚪ parseCnh 199 B 199 B 0 B 183 B
⚪ parseCno 199 B 199 B 0 B 183 B
⚪ parseCnpj 298 B 298 B 0 B 240 B
⚪ parseCns 199 B 199 B 0 B 184 B
⚪ parseCpf 199 B 199 B 0 B 183 B
⚪ parseCurrency 610 B 610 B 0 B 409 B
⚪ parseIban 227 B 227 B 0 B 202 B
⚪ parseLegalNature 198 B 198 B 0 B 182 B
⚪ parseLicensePlate 177 B 177 B 0 B 170 B
⚪ parseNcm 198 B 198 B 0 B 182 B
⚪ parseNfeKey 412 B 412 B 0 B 312 B
⚪ parseNfseKey 253 B 253 B 0 B 219 B
⚪ parsePassport 177 B 177 B 0 B 169 B
⚪ parsePhone 370 B 370 B 0 B 281 B
⚪ parsePis 199 B 199 B 0 B 183 B
⚪ parseProcessoJuridico 199 B 199 B 0 B 182 B
⚪ parseSuframa 198 B 198 B 0 B 181 B
⚪ parseVoterId 199 B 199 B 0 B 183 B
⚪ removeAccents 99 B 99 B 0 B 119 B
⚪ subBusinessDays 8.6 KB 8.6 KB 0 B 3.1 KB
⚪ toStandardSchema 284 B 284 B 0 B 233 B
How this is measured

Every export is imported alone into an esbuild consumer bundle (minified, tree-shaken) built from the head and from the base of this pull request; the sizes are the resulting bundles, gzip is their gzipped size. 🔴 marks a regression: a pre-existing export that grew more than 20% and more than 256 B, or the bundle importing every pre-existing export growing more than 5%. 🟡 is growth under the threshold, 🟢 a decrease, ⚪ no change, 🆕 an export that does not exist on the base (never a regression), 🗑️ an export that was removed. An intentional increase is accepted with the tree-shaking: accepted label.

@codecov

codecov Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (f6dba46) to head (8ad95fc).

Additional details and impacted files
@@                  Coverage Diff                  @@
##           claude/lookup-fixes      #597   +/-   ##
=====================================================
  Coverage               100.00%   100.00%           
=====================================================
  Files                      224       227    +3     
  Lines                     2341      2364   +23     
  Branches                   703       706    +3     
=====================================================
+ Hits                      2341      2364   +23     
Flag Coverage Δ
node 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@pkg-pr-new

pkg-pr-new Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@brazilian-utils/brazilian-utils@597

commit: 8ad95fc

…er municipality

getMunicipalitiesByAreaCode found each municipality's position with indexOf over the
state's sorted codes, so listing Minas Gerais compared about 360,000 strings, and the
property test that also looked every listed municipality up again (5,571 linear lookups
through getMunicipalityByCode) timed out at 5 seconds in the Stryker dry run.

readMunicipalityAreaCode now builds each state's code-to-DDD index on its first lookup
and keeps it, and the property test samples municipalities instead of walking all of
them; a separate test still checks every DDD in use lists a municipality.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RLkm9YrtAifc6XCLFVEsdH
…etMunicipalityByCode do

Follows #596 restoring the 2.4.0 contract of the lookups it builds on: a string code has any
non-digit character stripped, so the tests and docs no longer expect "1e1" or "355030a8" to be
rejected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RLkm9YrtAifc6XCLFVEsdH

Copy link
Copy Markdown
Member Author

Test on Browsers (chrome) on 978adb0 timed out (exit 124) in all three attempts, each stalled at a different, already-passing file (cbo.test.ts, pick-random.test.ts, format-cnae.test.ts) with no assertion failing. The same code, merged up into #598–#605, is green on Chrome, so this is the runner hanging, not this diff. I re-ran the failed job once.


Generated by Claude Code

Copy link
Copy Markdown
Member Author

Check failed on 8ad95fc in the audit-ci step with code undefined: Exiting.... That is npm audit failing to get a response from the registry's audit endpoint, before any advisory was evaluated. This PR doesn't touch package.json, the lockfile or the audit step, so it isn't this PR's failure, and there is no fix to port. I've re-run the failed job once.


Generated by Claude Code

@hyanmandian
hyanmandian added this pull request to stack #614 September 29, 2026 04:08
@hyanmandian
hyanmandian merged commit 1f82b56 into main Sep 29, 2026
30 of 31 checks passed

This branch was successfully deployed

1 active deployment
Preview — 8ad95fcd Deployed Sep 29, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants