Kola Sanniya mask

Sanni Yakuma · an exorcism for code

angular/angular.js

In the healing ritual of southern Sri Lanka, masked dancers call out the eighteen Sanni demons, each the cause of an illness, mock them, and send them away. Tonight the patient is a codebase.

github.com/angular/angular.jscommit d8f7781 29 October 2026 diagnosed by gemma-4-26b-a4b-it

8 blessings · 7 of 18 demons found · 11 never came near

Ata Paliya

First, the blessings

The ritual does not begin with demons. It begins with dances that bring blessings. So here is what this repository already does well.

Daha Ata Sanniya

The demons come out

One by one, each demon steps into the torchlight, boasts of what it has done, is mocked, and agrees to leave. Every claim below rests on evidence found in the code itself.

7 demons remain. Read each cure, then send the demon away.

Abutha Sanniya mask

Abutha Sanniya

brings madness not caused by spirits · in code: self-made complexity

severe
Look at the knots in src/ng/compile.js where nesting hits fifteen. Complexity of sixty-four in src/ngAnimate/animateCss.js makes your logic a maze. You struggle to find the end of these long functions. I retreat into the tangle.
The evidence (12)

The exorcism

Refactor complex and deeply nested functions.

  1. Identify functions with complexity above 20 in src/ng/compile.js and src/ng/parse.js.
  2. Extract deeply nested logic into smaller, named helper functions.
  3. Flatten the nesting in applyDirectivesToNode and recurse.
Deva Sanniya mask

Deva Sanniya

brings epidemics · in code: copy-paste spreading

severe
Five hundred cloned blocks spread like a plague through src/ngLocale. Nineteen thousand duplicated lines make your changes a nightmare. Every time you fix one, you must fix a hundred more. I vanish into the copies.
The evidence (12)
  • E13 src/ngLocale/angular-locale_agq-cm.js:1 same 6+ lines also at src/ngLocale/angular-locale_agq.js:1, src/ngLocale/angular-locale_ak-gh.js:1, src/ngLocale/angular-locale_ak.js:1 and 474 more
  • E14 src/ngLocale/angular-locale_agq-cm.js:14 same 6+ lines also at src/ngLocale/angular-locale_agq.js:14, src/ngLocale/angular-locale_ak-gh.js:14, src/ngLocale/angular-locale_ak.js:14 and 469 more
  • E15 src/ngLocale/angular-locale_af-na.js:1 same 6+ lines also at src/ngLocale/angular-locale_af-za.js:1, src/ngLocale/angular-locale_af.js:1, src/ngLocale/angular-locale_am-et.js:1 and 256 more
  • E16 src/ngLocale/angular-locale_asa-tz.js:103 same 6+ lines also at src/ngLocale/angular-locale_asa.js:103, src/ngLocale/angular-locale_bez-tz.js:103, src/ngLocale/angular-locale_bez.js:103 and 147 more
  • E17 i18n/closure/datetimeSymbols.js:150 same 6+ lines also at i18n/closure/datetimeSymbols.js:728, i18n/closure/datetimeSymbols.js:758, i18n/closure/datetimeSymbols.js:788 and 95 more
  • E18 src/ngLocale/angular-locale_bem-zm.js:97 same 6+ lines also at src/ngLocale/angular-locale_bem.js:97, src/ngLocale/angular-locale_el-cy.js:79, src/ngLocale/angular-locale_el-gr.js:79 and 65 more
  • E19 src/ngLocale/angular-locale_ar-001.js:29 same 6+ lines also at src/ngLocale/angular-locale_ar-001.js:52, src/ngLocale/angular-locale_ar-001.js:66, src/ngLocale/angular-locale_ar-ae.js:29 and 57 more
  • E20 src/ngLocale/angular-locale_as-in.js:103 same 6+ lines also at src/ngLocale/angular-locale_as.js:103, src/ngLocale/angular-locale_br-fr.js:85, src/ngLocale/angular-locale_br.js:85 and 40 more
  • E21 i18n/closure/datetimeSymbolsExt.js:2645 same 6+ lines also at i18n/closure/datetimeSymbolsExt.js:2705, i18n/closure/datetimeSymbolsExt.js:2801, i18n/closure/datetimeSymbolsExt.js:2891 and 38 more
  • E22 i18n/closure/datetimeSymbols.js:1251 same 6+ lines also at i18n/closure/datetimeSymbols.js:1281, i18n/closure/datetimeSymbolsExt.js:6371, i18n/closure/datetimeSymbolsExt.js:6401 and 36 more
  • E23 i18n/closure/datetimeSymbolsExt.js:2675 same 6+ lines also at i18n/closure/datetimeSymbolsExt.js:2735, i18n/closure/datetimeSymbolsExt.js:2771, i18n/closure/datetimeSymbolsExt.js:3011 and 30 more
  • E24 src/ngLocale/angular-locale_ar-001.js:14 same 6+ lines also at src/ngLocale/angular-locale_ar-ae.js:14, src/ngLocale/angular-locale_ar-bh.js:14, src/ngLocale/angular-locale_ar-dj.js:14 and 25 more

The exorcism

Centralize duplicated locale definitions.

  1. Identify common patterns in src/ngLocale/ and i18n/closure/.
  2. Create a shared base locale object for common symbols.
  3. Use inheritance or spreading to reduce duplication across locale files.
Gulma Sanniya mask

Gulma Sanniya

brings worms and stomach parasites · in code: hidden worms

clear
Thirty-seven TODOs and a FIXME in src/ng/directive/ngOptions.js wait to bite you. These hidden worms burrow deep into your source. You ignore them, and they grow. I depart into the unfinished tasks.
The evidence (12)

The exorcism

Resolve all TODO and FIXME markers.

  1. Audit all TODOs in src/ng/ and src/jqLite.js.
  2. Implement the logic for the FIXME in src/ng/directive/ngOptions.js.
  3. Remove completed or obsolete TODO comments.
Kana Sanniya mask

Kana Sanniya

brings blindness · in code: can't see if it works

mild
Sixteen percent test coverage is a dim light in a dark room. Your source files outnumber your tests nearly six to one. You stumble through the code, blind to what breaks. I slip away into the shadows.
The evidence (3)

The exorcism

Increase test coverage to improve visibility.

  1. Analyze coverage gaps in src/ng/.
  2. Write new unit tests in docs/app/test/ for uncovered source files.
  3. Ensure all new logic is covered by the test suite.
Kora Sanniya mask

Kora Sanniya

brings lameness and paralysis · in code: paralysed repo

severe
The heartbeat stopped thirty-one months ago. Four hundred and sixty-one issues sit frozen in this archived tomb. You have closed the gates, and I have nothing left to break. I exit this silent place.
The evidence (3)
  • E40 Last commit 2024-04-12, 31 months ago
  • E41 The repository is archived on GitHub
  • E42 461 open issues and pull requests are waiting

The exorcism

Acknowledge the end of life with a clean goodbye.

  1. Maintain the archived status of the repository.
  2. Update the README with a clear deprecation notice.
  3. Provide links to modern alternatives for users.
Maru Sanniya mask

Maru Sanniya

brings delirium and death · in code: dead code

mild
Twenty lines of dead code linger in src/ng/filter/limitTo.js. These comments are ghosts of functions that no longer exist. They haunt your files without purpose. I dissolve into the comments.
The evidence (2)

The exorcism

Remove commented-out code blocks.

  1. Locate commented-out code in src/ng/filter/limitTo.js and src/ng/http.js.
  2. Delete the dead lines to clean the files.
  3. Verify that no necessary logic was removed.
Slesma Sanniya mask

Slesma Sanniya

brings phlegm and epilepsy · in code: clogged repo

mild
Heavy jars like compiler.jar weigh down your repository. Large files and binaries clog your paths like silt in a river. You struggle to move under this weight. I sink into the sludge.
The evidence (4)

The exorcism

Remove heavy binary files and archives from the repository.

  1. Delete the .jar files in the vendor/ directory.
  2. Move large XML or image files to external storage.
  3. Use Git LFS if large binaries are strictly required.

Kola Sanniya

Kola Sanniya mask

The leader of the demons

The repository is a legacy project that has reached its natural end-of-life, leading to an accumulation of technical debt and unaddressed complexity.

As the project was archived, maintenance ceased, leaving TODOs, dead code, and complexity to settle like dust in an abandoned temple.

අතීතය නිමවී ඇත, නව මගක් සොයා යන්න. සැනසීම ලැබේවා.

Atīthaya nimavī ætha, Nava magak soyā yanna. Sænasīma labēvā.

The past has ended, Find a new path. May peace be found.