From 8a2e7adeda68aacee53326859b9ebe306254e0b2 Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 4 Oct 2026 15:23:32 -0300 Subject: [PATCH 01/16] update TOC file --- .claude/settings.json | 15 ++++++ .gitattributes | 2 + .luacheckrc | 70 ++++++++++++++++++++++++++ CLAUDE.md | 73 +++++++++++++++++++++++++++ Filger.toc | 18 +++++-- Filger_Classic.toc | 16 ------ Filger_Mists.toc | 16 ------ Makefile | 56 +++++++++++++-------- docs/compatibility.md | 58 +++++++++++++++++++++ docs/{ => dispels}/GAMETOOLTIP.md | 20 ++++---- docs/reference-repositories.md | 48 ++++++++++++++++++ docs/wowhead.lua | 84 ------------------------------- exclude.lst | 4 ++ libs/LibDispel | 2 +- mise.toml | 2 + 15 files changed, 331 insertions(+), 153 deletions(-) create mode 100644 .claude/settings.json create mode 100644 .gitattributes create mode 100644 .luacheckrc create mode 100644 CLAUDE.md delete mode 100644 Filger_Classic.toc delete mode 100644 Filger_Mists.toc create mode 100644 docs/compatibility.md rename docs/{ => dispels}/GAMETOOLTIP.md (96%) create mode 100644 docs/reference-repositories.md delete mode 100644 docs/wowhead.lua create mode 100644 mise.toml diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..d1180b8 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,15 @@ +{ + "permissions": { + "deny": [ + "Bash(git push:*)", + "Bash(git commit:*)", + "Bash(git add:*)", + "Bash(git submodule update:*)", + "Bash(gh:*)", + "Edit(~/.github/addons/refs/**)" + ], + "additionalDirectories": [ + "../refs" + ] + } +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..5a0d5e4 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto eol=lf diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..3378db0 --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,70 @@ +std = 'lua51' + +quiet = 1 -- suppress report output for files without warnings + +unused_secondaries = false -- e.g. local name, _, itemLevel = GetItemInfo(...) + +-- see https://luacheck.readthedocs.io/en/stable/warnings.html#list-of-warnings +-- and https://luacheck.readthedocs.io/en/stable/cli.html#patterns +exclude_files = { + '.claude/**', + 'docs/**', + 'libs/**', -- submodules +} + +ignore = { + '212', -- unused argument (callback signatures) + '213', -- unused loop variable + '431', -- shadowing an upvalue + '432/self', -- shadowing upvalue argument self (nested methods) + '611', -- line contains only whitespace + '612', -- line contains trailing whitespace + '614', -- trailing whitespace in comment + '631', -- line is too long +} + +-- globals Filger is allowed to set or mutate +globals = { + -- slash commands + 'SLASH_FILGER1', + 'SlashCmdList', +} + +read_globals = { + string = {fields = {'split'}}, + table = {fields = {'wipe'}}, + + -- namespaces + 'C_AddOns', + 'C_Spell', + 'C_UnitAuras', + + -- constants + 'WOW_PROJECT_BURNING_CRUSADE_CLASSIC', + 'WOW_PROJECT_CATACLYSM_CLASSIC', + 'WOW_PROJECT_CLASSIC', + 'WOW_PROJECT_ID', + 'WOW_PROJECT_MAINLINE', + 'WOW_PROJECT_MISTS_CLASSIC', + 'WOW_PROJECT_WRATH_CLASSIC', + + -- API and FrameXML + 'CreateColor', + 'CreateFrame', + 'Display_DisplayModeDropDown', + 'EnumerateFrames', + 'GameTooltip', + 'GetBuildInfo', + 'GetCVar', + 'GetItemCooldown', + 'GetPhysicalScreenSize', + 'GetTime', + 'LibStub', + 'Mixin', + 'UIParent', + 'UnitCanAssist', + 'UnitCanAttack', + 'UnitClass', + 'UnitGUID', + 'UnitName', +} diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..741e2a5 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,73 @@ +# CLAUDE.md + +`Filger` is a World of Warcraft addon: a minimal buff/debuff tracker. +It is minimal both in-game and in source. The same addon directory is copied unchanged into +every client's `Interface` folder and must look and behave the same everywhere. + +**Status:** being revived after a long break. Expect code broken by changed/removed Blizzard +APIs and by secret values. Don't assume existing code is correct. + +## Philosophy + +**No configuration.** No options UI, slash-command configuration (`/filger` is help/dev only), +profiles, per-character or per-client settings, and no SavedVariables added just to make +something configurable. Decisions are made in code and constants (`core/config.lua`, +`core/spells.lua`, `core/cooldowns.lua`, `core/blacklist.lua`). The declared SavedVariable +(`FilgerData`) is currently unused. If a feature genuinely needs new persistent state, explain +why before adding it. + +**Minimalism.** No frameworks, abstractions, compatibility layers, helper systems or +dependencies unless they solve a real problem. 30 understandable lines beat a 300-line +generic system. + +**Efficiency.** Prefer "detect change → update only what changed" over "event → reapply +everything". Avoid repeated updates, repeated calls to the same API, unnecessary loops, +tables/closures in hot paths, redundant event registrations and reapplying the same style. +Don't micro-optimize ordinary code, but treat repeated work as a design problem. + +**Style.** Lua 5.1 / WoW runtime. Small focused functions, locals, minimal shared mutable +state, no new globals, calculation separated from side effects where practical. Use the +prototype style where it is already used. This is a preference: WoW's API and the existing +architecture win when they conflict. + +## Changing code + +- Preserve existing behavior and visual design unless it is broken or the API makes it impossible. +- Smallest correct change. No unrelated refactors, reformatting or modernization. +- For API compatibility problems: identify the failing API/event/frame behavior → find every + Filger usage → verify current behavior on each affected client → fix → check other + usages of the same changed API. + +## Compatibility + +- One `Filger.toc` serves every client; never add `Filger_*.toc`. Client-specific files are + tagged per line with `[AllowLoadGameType ...]`. +- Never assume an API exists on every client, or that Retail and Classic behave the same. +- Never guess about secret/restricted values: check the target client's generated Blizzard + API docs before using a result in logic. If unsure, say so. +- Never invent an API. Mark anything you can't verify as "unverified". +- Supported clients, TOC rules, libraries, runtime client checks, secret values: [docs/compatibility.md](docs/compatibility.md). + +## References + +- Blizzard `wow-ui-source` (local clone in `../refs`, read-only) is the API authority. Use + targeted searches, not broad exploration. Map: [docs/reference-repositories.md](docs/reference-repositories.md). + +## Git & GitHub + +I review and test changes in-game, then group them into commits myself. + +- Read freely: git status/diff/log/show/blame, branches, worktrees, submodule status; + `gh` issues, PRs and repo info. +- Edit files in the working tree and leave changes uncommitted. +- Never mutate the repository or its history unless I explicitly ask: no commit, add, push, + pull, fetch, merge, rebase, checkout/switch, reset, restore, stash, cherry-pick, tag, + or submodule pointer changes. A finished task is not permission to commit. +- Don't create, edit or comment on GitHub issues/PRs unless I explicitly ask. +- Issue workflow: read the issue → inspect code → propose a plan → implement → leave uncommitted. + +## Verifying + +- After Lua changes, run `mise exec -- make check` (luacheck) and report the result. +- Claude can't run the game. Tell me what to verify in-game (`/reload`) and on which clients; + I'll paste Lua errors back. diff --git a/Filger.toc b/Filger.toc index 7e06a45..573bf1d 100644 --- a/Filger.toc +++ b/Filger.toc @@ -1,13 +1,21 @@ -## Interface: 20504, 30403, 40400, 110205 +## Interface: 11509, 16001, 20506, 38002, 40402, 50504, 120100 +## Version: 5.2.2 ## Author: Luaerror ## Credits: Nils Ruesch, Shestak, Affli, Garagar, hidekki, FourOne, Tukz -## Version: 5.2.1 -## Title: |cffff8000Filger|r -## Notes: Minimal buff/debuff tracker -## IconTexture: Interface\ICONS\Spell_Shadow_Shadowwordpain + ## OptionalDeps: Tainted, Tukui ## SavedVariables: FilgerData +## Notes: Minimal buff/debuff tracker +## Title: |cffff8000Filger|r [AllowLoadGameType mainline] +## Title: |cffff8000Filger|r - Classic [AllowLoadGameType vanilla] +## Title: |cffff8000Filger|r - TBC [AllowLoadGameType tbc] +## Title: |cffff8000Filger|r - Wrath [AllowLoadGameType wrath] +## Title: |cffff8000Filger|r - Cataclysm [AllowLoadGameType cata] +## Title: |cffff8000Filger|r - Mists of Pandaria [AllowLoadGameType mists] + +## IconTexture: Interface\ICONS\Spell_Shadow_Shadowwordpain + ## X-Website: https://github.com/wow-lua/Filger ## X-Maintainer: pedrozc90 diff --git a/Filger_Classic.toc b/Filger_Classic.toc deleted file mode 100644 index b0781cb..0000000 --- a/Filger_Classic.toc +++ /dev/null @@ -1,16 +0,0 @@ -## Interface: 11507 -## Author: Luaerror -## Credits: Nils Ruesch, Shestak, Affli, Garagar, hidekki, FourOne, Tukz -## Version: 5.2.2 -## Title: |cffff8000Filger|r - Classic -## Notes: Minimal buff/debuff tracker -## IconTexture: Interface\ICONS\Spell_Shadow_Shadowwordpain -## OptionalDeps: Tainted, Tukui -## SavedVariables: FilgerData - -## X-Website: https://github.com/wow-lua/Filger -## X-Maintainer: pedrozc90 - -libs\init.xml -core\init.xml -Filger.lua diff --git a/Filger_Mists.toc b/Filger_Mists.toc deleted file mode 100644 index 33ca693..0000000 --- a/Filger_Mists.toc +++ /dev/null @@ -1,16 +0,0 @@ -## Interface: 50500 -## Author: Luaerror -## Credits: Nils Ruesch, Shestak, Affli, Garagar, hidekki, FourOne, Tukz -## Version: 5.2.2 -## Title: |cffff8000Filger|r - Mists of Pandaria -## Notes: Minimal buff/debuff tracker -## IconTexture: Interface\ICONS\Spell_Shadow_Shadowwordpain -## OptionalDeps: Tainted, Tukui -## SavedVariables: FilgerData - -## X-Website: https://github.com/wow-lua/Filger -## X-Maintainer: pedrozc90 - -libs\init.xml -core\init.xml -Filger.lua diff --git a/Makefile b/Makefile index 51f1fc2..ed6678b 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,35 @@ -# Makefile to create a .zip archive of the repository - -# Name of the zip file -FILENAME := repository.zip - -# Default target -zip: $(FILENAME) - -# Create the .zip archive -$(FILENAME): - @echo "Creating $(FILENAME)..." - @zip -r $(FILENAME) . -x@exclude.lst - @echo "$(FILENAME) created." - -# Clean target to remove the .zip file -clean: - @echo "Cleaning up..." - @rm -f $(FILENAME) - @echo "Cleaned." - -.PHONY: zip +.DEFAULT_GOAL := help + +SHELL := bash +.SHELLFLAGS := -eu -o pipefail -c + +FILENAME := repository.zip +LUACHECK ?= luacheck + +# -- help --------------------- + +.PHONY: help +help: ## Show available commands + @grep -E '^[a-zA-Z_-]+:.*## .*$$' $(MAKEFILE_LIST) \ + | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' + +# -- luacheck ----------------- + +.PHONY: check +check: ## Run static analysis (see .luacheckrc) + @$(LUACHECK) . + +# -- publish ------------------ + +.PHONY: zip +zip: ## Create the .zip archive + @echo "Creating $(FILENAME)..." + @rm -f $(FILENAME) + @zip -r $(FILENAME) . -x@exclude.lst + @echo "$(FILENAME) created." + +.PHONY: clean +clean: ## Remove the .zip archive + @echo "Cleaning up..." + @rm -f $(FILENAME) + @echo "Cleaned." diff --git a/docs/compatibility.md b/docs/compatibility.md new file mode 100644 index 0000000..e7e3083 --- /dev/null +++ b/docs/compatibility.md @@ -0,0 +1,58 @@ +# Compatibility + +Authoritative for supported clients, TOC loading, libraries, runtime client checks and secret +values. Other docs link here instead of repeating these facts. + +## Supported clients + +A single `Filger.toc` serves every supported client (`## Interface: 11509, 16001, 20506, 38002, 40402, 50504, 120100`): + +| Client | Interface | Game type | Family | +|:----------------|:----------|:-----------|:-----------| +| Retail/Midnight | `120100` | `standard` | `mainline` | +| Classic Forever | `16001` | `camelot` | `mainline` | +| Classic Era | `11509` | `vanilla` | `classic` | +| Classic TBC | `20506` | `tbc` | `classic` | +| Classic WotLK | `38002` | `wrath` | `classic` | +| Classic Cata | `40402` | `cata` | `classic` | +| Classic MoP | `50504` | `mists` | `classic` | + +- WotLK is Titan 3.80.x (loads the `Wrath` flavor with `WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC`), + not the retired 3.4.x Wrath Classic. Don't assume 3.4.x behavior. +- Cata `40402` (4.4.2) is **unverified**: no `wow-ui-source` worktree or addon reference in + `../refs` covers Cata. The `cata` game type token does appear in Blizzard TOCs. + +## TOC rules + +- Do not add client-specific TOCs (`Filger_*.toc`); a suffixed TOC overrides `Filger.toc` on its client. +- Every file currently loads on every client. If a client-specific file is needed, tag its line + with `[AllowLoadGameType ...]`, using the family (`mainline`, `classic`) or game types + (`vanilla`, `tbc`, `wrath`, `cata`, `mists`). Keep one ordered list. +- A condition whose tokens the client doesn't recognize is treated as satisfied. A `camelot`-only + line would therefore also need `[ExcludeLoadGameType standard, classic]`. +- Per-game metadata (`## Title`) uses the same `[AllowLoadGameType ...]` suffix. + +## Libraries + +`libs/*` are git submodules, loaded through `libs/init.xml`: `LibStub`, `LibDispel`. +`CallbackHandler-1.0` and `LibClassicDurations` are present but commented out (not loaded); +`core/init.lua` only uses `LibClassicDurations` if it happens to be registered. + +## Runtime client checks + +Flags from `WOW_PROJECT_ID` in `core/init.lua`: `Filger.isRetail`, `Filger.isClassic`, +`Filger.isBCC`, `Filger.isWrath`, `Filger.isCata`, `Filger.isMoP`. + +- There is no Classic Forever flag. Forever sets `WOW_PROJECT_ID = WOW_PROJECT_CAMELOT` (18) + (`Blizzard_ProjectConstants/Camelot/ProjectConstants.lua`), so every flag is false there. + +## Secret values (Midnight / Retail) + +- Some APIs return "secret" values: no arithmetic, comparison, string operations or table keys + on them. +- Before using an API result in logic, check the generated API docs + (`Blizzard_APIDocumentationGenerated`, see [reference-repositories.md](reference-repositories.md)) + for the target client; APIs and secret flags differ per client. +- If unsure whether a function returns secrets or is restricted, say so. Don't guess. +- Aura scanning (`C_UnitAuras`, `UnitAuraInfo` fields) and spell/item cooldowns + (`C_Spell.GetSpellCooldown`, `GetItemCooldown`) are the most likely to be affected. Audit before fixing. diff --git a/docs/GAMETOOLTIP.md b/docs/dispels/GAMETOOLTIP.md similarity index 96% rename from docs/GAMETOOLTIP.md rename to docs/dispels/GAMETOOLTIP.md index 26a7a36..bd9e2f8 100644 --- a/docs/GAMETOOLTIP.md +++ b/docs/dispels/GAMETOOLTIP.md @@ -1,11 +1,11 @@ -# GameTooltip - -## Classic - -```lua -GameTooltip:SetUnitAura(unit, index, filter); -GameTooltip:SetInventoryItem("player", self:GetID()); -GameTooltip:SetItemByID(self.itemId); -GameTooltip:SetSpellBookItem(slot, SpellBookFrame.bookType) -GameTooltip:SetSpellByID(self:GetID()); +# GameTooltip + +## Classic + +```lua +GameTooltip:SetUnitAura(unit, index, filter); +GameTooltip:SetInventoryItem("player", self:GetID()); +GameTooltip:SetItemByID(self.itemId); +GameTooltip:SetSpellBookItem(slot, SpellBookFrame.bookType) +GameTooltip:SetSpellByID(self:GetID()); ``` \ No newline at end of file diff --git a/docs/reference-repositories.md b/docs/reference-repositories.md new file mode 100644 index 0000000..7782981 --- /dev/null +++ b/docs/reference-repositories.md @@ -0,0 +1,48 @@ +# Reference repositories + +Local clones in `../refs`, outside this repo. **Read-only**: never edit, and no git write operations. +Use them when investigating WoW API, UI, template, event or compatibility behavior. + +- Search, don't browse: targeted `Grep`/`Glob` scoped to one repo, addon and flavor dir. + No recursive listings or whole-repo reads. +- Pick the worktree that matches the client in question before searching. + +## Authority + +**`wow-ui-source`** (Blizzard's own UI source) is the only reference and is authoritative for +how Blizzard UI and APIs actually work. Never invent an API; if it can't be verified, mark it +"unverified". Wiki (after Blizzard source): `https://warcraft.wiki.gg/wiki/API:[NAME]` +(e.g. `C_Spell.GetSpellInfo`) and `https://warcraft.wiki.gg/wiki/Event:[NAME]` (e.g. `PLAYER_LOGIN`). + +## `wow-ui-source` (Blizzard UI; authoritative) + +| Path (`../refs/wow-ui-source/...`) | Branch | Version (`version.txt`) | Client | +|------------------------------------|-----------------------|-------------------------|------------------------------| +| `.` | `live` | 12.1.0 | Retail/Midnight | +| `worktrees/forever` | `forever` | 1.60.1 | Classic Forever | +| `worktrees/classic` | `classic` | 5.5.4 | MoP Classic | +| `worktrees/classic_titan` | `classic_titan` | 3.80.2 | WotLK (Titan) | +| `worktrees/classic_anniversary` | `classic_anniversary` | 2.5.6 | TBC Anniversary | +| `worktrees/classic_era` | `classic_era` | 1.15.9 | Classic Era | + +No worktree covers Cata (`40402`); Cata API behavior is unverified. + +- Code lives in `Interface/AddOns/Blizzard_//`. Flavor dirs: `Shared`, + `Mainline`, `Classic`, `Vanilla`, `TBC`, `Wrath`, `Cata`, `Mists` (`Camelot` in forever). + Every classic-family worktree contains all flavor dirs: don't infer the client from the dir. + Instead read the per-flavor TOC (`*_Classic.toc`, `*_Mainline.toc`): each file line is tagged + `[AllowLoadGameType vanilla|tbc|wrath|cata|mists]`. +- `classic_titan` is Filger's WotLK target (see [compatibility.md](compatibility.md)). +- API truth: `Interface/AddOns/Blizzard_APIDocumentationGenerated/*Documentation.lua` + (check every worktree; APIs and secret flags differ per client). +- Removed/renamed APIs: `Interface/AddOns/Blizzard_Deprecated*`. +- Index of all addons/files: `Interface/ui-toc-list.txt`, `Interface/ui-code-list.txt`. + +## Where to look, by Filger feature + +| Feature | Blizzard (`Interface/AddOns/...`) | +|-----------|----------------------------------------------------------------------------------------------------------------| +| Auras | `Blizzard_BuffFrame`, `Blizzard_AuraContainer` (retail), `Blizzard_PrivateAurasUI`; `C_UnitAuras` in API docs | +| Cooldowns | `Blizzard_CooldownViewer` (retail); `C_Spell.GetSpellCooldown` / `GetItemCooldown` in API docs | +| Spell API | `C_Spell` vs legacy `GetSpellInfo` in API docs and `Blizzard_Deprecated*` | +| Tooltips | `Blizzard_GameTooltip` (`GameTooltip:SetUnitAura`) | diff --git a/docs/wowhead.lua b/docs/wowhead.lua deleted file mode 100644 index 2764417..0000000 --- a/docs/wowhead.lua +++ /dev/null @@ -1,84 +0,0 @@ --- Get the filename from the command line argument -local inputFilePath = arg[1] - -if not inputFilePath then - print("Usage: lua script.lua ") - return -end - --- Define the output file path -local outputFilePath = inputFilePath:gsub("%.%w+$", "_results.txt") - --- Function to split a string by a given delimiter -local function split(inputstr, sep) - if sep == nil then - sep = "%s" - end - local t = {} - for str in string.gmatch(inputstr, "([^"..sep.."]+)") do - table.insert(t, str) - end - return t -end - --- Open the input file in read mode -local inputFile, err = io.open(inputFilePath, "r") - --- Check if the file was opened successfully -if not inputFile then - print("Could not open input file: " .. err) - return -end - --- Read the first line (numbers) -local numberLine = inputFile:read("*l") - --- Read the second line (texts) -local textLine = inputFile:read("*l") - --- Close the input file -inputFile:close() - --- Split the lines by commas -local numbers = split(numberLine, ",") -local texts = split(textLine, ",") - --- Create a table to store the number-text pairs -local numberTextTable = {} - --- Populate the table -for i = 1, #numbers do - local number = tonumber(numbers[i]:match("^%s*(.-)%s*$")) - local text = texts[i]:match("^%s*(.-)%s*$") - table.insert(numberTextTable, {number = number, text = text}) -end - --- Sort the table by text first, then by number if the texts are the same -table.sort(numberTextTable, function(a, b) - if a.text == b.text then - return a.number < b.number - else - return a.text < b.text - end -end) - --- Open the output file in write mode -local outputFile, err = io.open(outputFilePath, "w") - --- Check if the file was opened successfully -if not outputFile then - print("Could not open output file: " .. err) - return -end - --- Write the table to the output file -outputFile:write("{\n") -for _, pair in ipairs(numberTextTable) do - outputFile:write(" [" .. pair.number .. "] = \"" .. pair.text .. "\",\n") -end -outputFile:write("}\n") - --- Close the output file -outputFile:close() - -print("Table successfully written to " .. outputFilePath) diff --git a/exclude.lst b/exclude.lst index 42f71e8..ae67512 100644 --- a/exclude.lst +++ b/exclude.lst @@ -6,6 +6,10 @@ docs/* Makefile exclude.lst +.luacheckrc +mise.toml +CLAUDE.md +.claude/* **/.git **/.gitignore diff --git a/libs/LibDispel b/libs/LibDispel index 32a0d62..24d6425 160000 --- a/libs/LibDispel +++ b/libs/LibDispel @@ -1 +1 @@ -Subproject commit 32a0d623dacdbf5723971459c8d0dc4449afa4e4 +Subproject commit 24d64256237068cc8029cf493800f75fafefd4e0 diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..5e411e5 --- /dev/null +++ b/mise.toml @@ -0,0 +1,2 @@ +[tools] +lua = "5.1" From 84c60e60d47e8ab3b096e5c30b11dfb9c825dbdd Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 4 Oct 2026 18:01:11 -0300 Subject: [PATCH 02/16] update LibDispel submodule --- libs/LibDispel | 2 +- libs/init.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/LibDispel b/libs/LibDispel index 24d6425..329f074 160000 --- a/libs/LibDispel +++ b/libs/LibDispel @@ -1 +1 @@ -Subproject commit 24d64256237068cc8029cf493800f75fafefd4e0 +Subproject commit 329f0746b8b5acb55deb6d7d36d408fe394b1b0a diff --git a/libs/init.xml b/libs/init.xml index f4047d1..8c64340 100644 --- a/libs/init.xml +++ b/libs/init.xml @@ -1,6 +1,6 @@