Kola Sanniya mask

Sanni Yakuma · an exorcism for code

jquery-archive/jquery-mobile

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/jquery-archive/jquery-mobilecommit 1c3a176 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
You struggle through my tangles. In js/widgets/collapsible.js, I spun a web of forty-three complexity levels and four layers of nesting. Even js/widgets/forms/autogrow.js cannot escape my six deep nests. Stop trying to untangle me and just rest.
The evidence (12)

The exorcism

Reduce function complexity and nesting depth.

  1. Identify all functions with complexity scores above 15.
  2. Decompose the 210-line anonymous function in js/widgets/collapsible.js into smaller, single-purpose functions.
  3. Flatten the nesting in js/widgets/forms/autogrow.js by using guard clauses.
  4. Refactor _refresh in js/widgets/listview.js to reduce its complexity of 25.
Butha Sanniya mask

Butha Sanniya

brings madness caused by spirits · in code: dependency hell

clear
Thirty-five dependencies wait in package.json without a lockfile to hold them. They wander freely, unpredictable and wild. You think you are safe without a single lockfile to bind them? Take your masks away.
The evidence (1)

The exorcism

Pin dependencies to ensure reproducible builds.

  1. Run npm install to generate a package-lock.json file.
  2. Commit the lockfile to the repository to lock dependency versions.
Bihiri Sanniya mask

Bihiri Sanniya

brings deafness · in code: swallowed errors

clear
I silenced the cry in js/data.js at line sixty-two. When the error arrived, I simply closed my ears with an empty catch block. Now the truth is lost forever in the silence. Fine, I will go.
The evidence (1)

The exorcism

Replace empty catch blocks with error logging.

  1. Locate the empty catch block in js/data.js at line 62.
  2. Add a logging statement to capture the error for debugging.
--- a/js/data.js+++ b/js/data.js@@ -60,5 +60,5 @@ 							rbrace.test( data ) ? window.JSON.parse( data ) : 								data;-		} catch ( err ) {}+		} catch ( err ) { console.error(err); }  		return data;
Deva Sanniya mask

Deva Sanniya

brings epidemics · in code: copy-paste spreading

clear
I have spread myself across the demos, ten percent of the entire body. From demos/_search/index.php to demos/accordion/index.php, I repeat my patterns over and over. One hundred and six times I have cloned myself. I am everywhere and nowhere.
The evidence (12)
  • E15 demos/_search/index.php:42 same 6+ lines also at demos/accordion/index.php:323, demos/body-bar-classes/index.php:101, demos/button/index.php:154 and 97 more
  • E16 demos/_search/index.php:18 same 6+ lines also at demos/accordion/index.php:18, demos/backbone-requirejs/index.php:19, demos/body-bar-classes/index.php:33 and 96 more
  • E17 demos/collapsible-dynamic/index.php:9 same 6+ lines also at demos/controlgroup-dynamic/index.php:9, demos/external-widgets/page-d.php:10, demos/icons-grunticon/index.php:19 and 14 more
  • E18 demos/old-faq-pages/controls-in-header-footer.php:1 same 6+ lines also at demos/old-faq-pages/disabling-a-button-does-not-work.php:1, demos/old-faq-pages/how-can-i-stop-auto-enhancement-of-a-block-of-elements.php:1, demos/old-faq-pages/how-can-i-stop-auto-enhancement-of-elements.php:1 and 12 more
  • E19 demos/grids-buttons/index.php:87 same 6+ lines also at demos/old-faq-pages/how-can-i-stop-auto-enhancement-of-elements.php:42, demos/selectmenu-custom/index.php:38, demos/selectmenu-custom/index.php:108 and 7 more
  • E20 demos/forms-disabled/index.php:82 same 6+ lines also at demos/forms-disabled/index.php:119, demos/forms-disabled/index.php:145, demos/forms-disabled/index.php:216 and 6 more
  • E21 demos/forms-gallery/index.php:49 same 6+ lines also at demos/forms-gallery/index.php:59, demos/forms-gallery/index.php:252, demos/forms-gallery/index.php:262 and 4 more
  • E22 demos/icons/index.php:252 same 6+ lines also at demos/intro/index.php:73, demos/listview/index.php:69, demos/listview/index.php:81 and 4 more
  • E23 demos/accordion/index.php:41 same 6+ lines also at demos/accordion/index.php:82, demos/accordion/index.php:123, demos/accordion/index.php:163 and 3 more
  • E24 demos/accordion/index.php:54 same 6+ lines also at demos/accordion/index.php:95, demos/accordion/index.php:136, demos/accordion/index.php:176 and 3 more
  • E25 demos/accordion/index.php:67 same 6+ lines also at demos/accordion/index.php:108, demos/accordion/index.php:149, demos/accordion/index.php:189 and 3 more
  • E26 demos/external-widgets/info.php:87 same 6+ lines also at demos/external-widgets/page-d.php:97, demos/toolbar-fixed-persistent-optimized/index.php:53, demos/toolbar-fixed-persistent-optimized/page-b.php:81 and 3 more

The exorcism

Centralize duplicated HTML and PHP blocks in the demos directory.

  1. Identify the 106 duplicated blocks across the PHP demo files.
  2. Extract repeated header, footer, and layout patterns into separate partial files.
  3. Use PHP include statements to reference these partials in demos/.
Gedi Sanniya mask

Gedi Sanniya

brings boils and skin disease · in code: style sores

mild
I leave no mark, only the subtle itch of unformatted code. Your .editorconfig is a thin shield against my chaos. Without a linter, your style will slowly rot. Go then, but the mess remains.
The evidence (1)
  • E27 .editorconfig sets whitespace only; nothing checks the code itself

The exorcism

Implement a code linter to enforce consistent style.

  1. Add a linting dependency like ESLint or JSHint to package.json.
  2. Create a configuration file to define coding standards.
  3. Integrate the linting step into the existing Grunt build process.
Gulma Sanniya mask

Gulma Sanniya

brings worms and stomach parasites · in code: hidden worms

severe
Seventy-four of my children crawl through your files. I hide in the TODO and XXX markers of js/vmouse.js and js/events/navigate.js. Seventy-two TODOs and two XXXs are my feast. You cannot ignore the itch forever.
The evidence (12)

The exorcism

Resolve technical debt by addressing all TODO and XXX comments.

  1. Run a global search for all // TODO and // XXX comments.
  2. Convert each comment into a tracked issue in the repository.
  3. Prioritize and resolve the critical workarounds in js/widgets/forms/textinput.js.
Kora Sanniya mask

Kora Sanniya

brings lameness and paralysis · in code: paralysed repo

severe
Sixty-one months of stillness have passed since my last breath. I lie archived and frozen, with one hundred and eighty-two issues waiting for a life that will never come. The pulse has stopped. I am already gone.
The evidence (3)
  • E40 Last commit 2021-10-07, 61 months ago
  • E41 The repository is archived on GitHub
  • E42 182 open issues and pull requests are waiting

The exorcism

Perform a clean goodbye by maintaining the archived state.

  1. Ensure the README clearly directs users to the deprecation blog post.
  2. Maintain the repository in its archived state to prevent new issues.
  3. Point users to modern alternatives in the project status documentation.

Kola Sanniya

Kola Sanniya mask

The leader of the demons

The repository has reached its natural end of life.

The accumulation of technical debt, complexity, and unaddressed issues is a symptom of a project that is no longer being actively maintained, leading to its eventual archival.

පැරණි දේ අතහැර අලුත් මග සොයන්න.

Pärani dē atahära alut maga soyanna.

Leave the old behind and seek a new path.