{
  "name": "ui5-modernization — 19 skills",
  "slug": "source-skills-dd433175cfd56ea0d2cd2fd5",
  "type": "skills",
  "category": "developer-tools",
  "example": false,
  "evidence_state": "pinned_source_listing",
  "stamp": "Pinned source listing — machine-checked",
  "summary": "Pinned source declarations and file hashes were listed.",
  "outcome": "Listed 19 skill declarations. Ran 78 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection.",
  "rule_results": [
    "The retained source tree matches its acquisition manifest.",
    "Declared skill names (listing.json): fix-bootstrap-params; fix-component-async; fix-control-renderer; fix-csp-compliance; fix-cyclic-deps; fix-deprecated-controls; fix-fiori-elements-extensions; fix-js-globals; fix-library-init; fix-linter-blind-spots; fix-manifest-json; fix-partially-deprecated-apis; fix-pseudo-modules; fix-table-row-mode; fix-xml-globals; fix-xml-native-html; modernize-flp-sandbox; modernize-test-starter; modernize-ui5-app"
  ],
  "task": "What declarations and files are present in this pinned source?",
  "setup": "Git blob acquisition followed by static source inspection.",
  "limitations": "Scope: acquisition and static inspection. Command results: commands.json.",
  "source_url": "https://github.com/UI5/plugins-coding-agents.git",
  "documentation_url": "https://github.com/UI5/plugins-coding-agents.git",
  "commit": "2b8c4a944e39609214bce7aef3b05260985f0e91",
  "tree_sha256": "42233e18204163c8abd019a7920dcc5e5915f5f4eabbc146d8c1cf95ddd379a1",
  "file_sha256": {
    "plugins/ui5-modernization/.github/plugin/plugin.json": "6c0cdca10f54b4fe42baac4a6b593c57bc7e08dab83845a759290fe8e98190c1",
    "plugins/ui5-modernization/.mcp.json": "c96357d8c984ec8a853e792474f41b5ad7b10526061d8cae8c533d06e9504ec3",
    "plugins/ui5-modernization/README.md": "03f34803aa8f9c07803d97354426bdfd44f31409cc1465f15b461f98c058e555",
    "plugins/ui5-modernization/plugin.json": "6c0cdca10f54b4fe42baac4a6b593c57bc7e08dab83845a759290fe8e98190c1",
    "plugins/ui5-modernization/skills/fix-bootstrap-params/SKILL.md": "4682c61d32ba8971fb8f0c8d0360a2db48a84ccd7871e26a097969002b1a28c2",
    "plugins/ui5-modernization/skills/fix-component-async/SKILL.md": "604958cc203a8cf09a755144e8ee90e720805c9d7e208300cd47119413830f3a",
    "plugins/ui5-modernization/skills/fix-component-async/scripts/verify-component.js": "78fd524a226314675e63e3b128d17c20406cbeabe0693a984c0ff60c3828d98e",
    "plugins/ui5-modernization/skills/fix-control-renderer/SKILL.md": "5a5d75b9a5ac0bb802cfc13b6828cdea4f52d47f5d1485eaa1c34b60a8b438d5",
    "plugins/ui5-modernization/skills/fix-control-renderer/references/renderer-api-mapping.md": "d9a7003f94ca4c76f40dead9302dbe7ddb3e54d918a36ec2f5248f2f9e912e48",
    "plugins/ui5-modernization/skills/fix-csp-compliance/SKILL.md": "da6952e0742555f52cff77559ba06c0257f67b71cc460f2f65a6eca8b91db9be",
    "plugins/ui5-modernization/skills/fix-cyclic-deps/SKILL.md": "e695cbdc587e317cb7d9c20ea0f265f9233bca2611a316eb709c60ee229069e3",
    "plugins/ui5-modernization/skills/fix-cyclic-deps/references/dependency-graph-analysis.md": "c406b0346bd2500ec7b8cd20dcc4750976a1b5c562fdff2ffe2380b7d5241e10",
    "plugins/ui5-modernization/skills/fix-cyclic-deps/scripts/detect-cycles.js": "2226cecf738dc6dace0467bebc645108e6bf499f737b61353f345443d6770d7a",
    "plugins/ui5-modernization/skills/fix-cyclic-deps/scripts/detect-unsafe-lazy.js": "2b316a1564ad2911c2286a30626926e8ce2efb7203c79892487ff3b0ddce1599",
    "plugins/ui5-modernization/skills/fix-cyclic-deps/scripts/detect-unsafe-lazy.test.js": "a05663fa296e913d871fb05cda1e993f835f8cfc53852c945be5e16234ae04eb",
    "plugins/ui5-modernization/skills/fix-cyclic-deps/scripts/lib/graph-utils.js": "2ad4142ce8aa85d65acf40f6ea51c835ec0e9516bcc24b8a869c89ba9c26ec30",
    "plugins/ui5-modernization/skills/fix-deprecated-controls/SKILL.md": "0c74b7205949cb8033dc72852a16c1aaae259dd2f9ccadd820341cbc79dc3ac1",
    "plugins/ui5-modernization/skills/fix-deprecated-controls/references/control-modernization-details.md": "9a7c94d65953a309c654193f93ee342bd436c0803820f481fbc929c1598e4421",
    "plugins/ui5-modernization/skills/fix-fiori-elements-extensions/SKILL.md": "9d3d6ad9d900644dcc6a1d2de1ac11e23de74f0438182973c077159d2354aa31",
    "plugins/ui5-modernization/skills/fix-js-globals/SKILL.md": "6c4a1fc808170597f296d4463b4645a4a38d785d03b6d694011409052fd2a4f8",
    "plugins/ui5-modernization/skills/fix-js-globals/references/core-api-replacements.md": "ac4fcf51c17f15c8ece917e5304a3c9417763997dab645162c31f03987542d52",
    "plugins/ui5-modernization/skills/fix-js-globals/references/example-fix-session.md": "f6214f61bc08963a5031fc0beb2dda71bb805185c5c5ef92141b81bf66bc5ae5",
    "plugins/ui5-modernization/skills/fix-library-init/SKILL.md": "bbfc909c7b2a7e814d5f82d6466d38eb7fa78355508ffa31e4defb9e582def0e",
    "plugins/ui5-modernization/skills/fix-linter-blind-spots/SKILL.md": "af8ad819d3e64eb4beb3ae575d02028c0c3a3c62f2470bec4a3ccfa7848c9e13",
    "plugins/ui5-modernization/skills/fix-linter-blind-spots/scripts/detect-blind-spots.js": "a8c60490a6d9e21a217897a40f623169a2b7502c39a4f8200c41f18722abd01b",
    "plugins/ui5-modernization/skills/fix-linter-blind-spots/scripts/detect-blind-spots.test.js": "f1c89f7fda4f80c5da998d2389e7c842ffb2bd4b0b575adf017f22b5be39785d",
    "plugins/ui5-modernization/skills/fix-manifest-json/SKILL.md": "be91e0e30255fff07518f911ad0a5a149ce3309975865fd99dedc546952a1ce0",
    "plugins/ui5-modernization/skills/fix-partially-deprecated-apis/SKILL.md": "42dbbce2be48707219c3f4adc50c5b843c1c0096a67d1ba089b350af01a79b2e",
    "plugins/ui5-modernization/skills/fix-pseudo-modules/SKILL.md": "809df204187d94c092d55e491412274f3d6d736846af738e0230745fb8005cd5",
    "plugins/ui5-modernization/skills/fix-table-row-mode/SKILL.md": "5200c461611fdc4dfbf193ad88e8066bf546e558675e3b15b93293df64d582f1",
    "plugins/ui5-modernization/skills/fix-xml-globals/SKILL.md": "0ac718028e37e3f20af90d5f12c6dba47f4f9c6eb408449cc7c9f32d2f37431b",
    "plugins/ui5-modernization/skills/fix-xml-globals/references/placement-and-binding.md": "659a3f480fb42d4e40f7e5e88d7f16ecefa7485636787c074a005cc64c73e6a2",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/README.md": "16af5b039b2457a570343e9189427a6652d8e3055769d90a42bf76634bd4c4c6",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/nested_function_shadow.js": "0c3ad8397fe2ca2bb56c12064d1f7c6622bf0733d2cf62b1580030256151f889",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/no_this.js": "d60a7be1d2be4b53be219977f536be7f3e18497a03722dea68ab149b3bfd2d3f",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/not_found.js": "a946539377ba49da82329be13eb91c791b2e2cc10b95bfdbc618b09fa874d857",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/this_in_comment.js": "b12bf6cab2e8876d444e8911d0ed939618939b92ca91888d5dc0ea7412093c9d",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/this_in_string.js": "32569e89464b171629fc88ab86c006736a08a8adcedb8f519993b0f78ebdb781",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/uses_this_alias.js": "03e33b9a71f637edacd01474380534b4d89297bcd5a6000c70f371afbade1fd9",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/uses_this_arrow.js": "5f315214161ba69ca7bec61a8cc7689b99315d52ee29faab6036930095eeeff8",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/uses_this_bare.js": "ecde2928c24d014db923811d2bef59fa8fe7cb3494e8db2a59898b6f711ed60a",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/uses_this_member.js": "2eef7f3e8107c98282ce15df3a125c3d7ce2256a7985e49676e0ad776e1eceb9",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/uses_this_nested_in_if.js": "25d56e0a4a2b21bc85ec96785250119c4c5487022de4d611f27581d3e73b199a",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/xml/has_bind.fragment.xml": "5c4c3a60ada3140241d268477532d4a92be9add55d72bb92bed5e57663378ecc",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/xml/multi_line.fragment.xml": "3144273b7572851e3a45cf58ecd911f4e4b31c1c91a8559ad578860ca7afe1f6",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/xml/needs_bind.fragment.xml": "f4da77b3a216aa319f1b28a49e816a03682393da1f86171224ed613232739127",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/xml/no_this_no_bind.fragment.xml": "a376b5161eb7164997872b685a5bd00d59cc1158108758c859d3e535dae383a5",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/verify-this-bind.js": "ba98684e1dc6e3e27fd582f02854771244ddcf4f5cd9df07b9df3556503c1639",
    "plugins/ui5-modernization/skills/fix-xml-globals/scripts/verify-this-bind.test.js": "bd569a6af3d8724197fa03804593d1066857656f88075cf3acdf2919fbf94375",
    "plugins/ui5-modernization/skills/fix-xml-native-html/SKILL.md": "edaa2d742613136dc7d2bd4f084b298dd3167e6b30cc8f61c27a13bb339e2727",
    "plugins/ui5-modernization/skills/modernize-flp-sandbox/SKILL.md": "73cbe7f6a0b2e0b044a519429ebe1193e9c6cac9b60a5b1205e43e8f5fd9f6e6",
    "plugins/ui5-modernization/skills/modernize-flp-sandbox/references/native-replacements.md": "4ad360cce3d5b865f1023680093a698ca0914bcd9977a3e304a9ae8a656ca6ae",
    "plugins/ui5-modernization/skills/modernize-flp-sandbox/references/operations.md": "83bd454e83d04cdd2e0f344d75d4b19c81bc384edaf70e6f96a2cb06c92d5c9e",
    "plugins/ui5-modernization/skills/modernize-flp-sandbox/references/sandbox-config-surface.md": "2a1a0d2d5c8c3dcea07283ede57082fee0c96becb8635b2c37d08c96271e27d2",
    "plugins/ui5-modernization/skills/modernize-test-starter/SKILL.md": "ab286f304a888ee6472239dfe23b0d938a40ca6e736eaa521c51d8b3e3051d74",
    "plugins/ui5-modernization/skills/modernize-test-starter/references/linter-invisible-patterns.md": "d4e9a9d7cff799f43cf9f7eac7bf5e728b3a35f61d417f0c6f964565415e4a28",
    "plugins/ui5-modernization/skills/modernize-test-starter/references/pattern-a-modernization.md": "682878a9f457ddef7d3e060df83b5c74258c47d63d1f34664dd1b6e2e51b6ec7",
    "plugins/ui5-modernization/skills/modernize-test-starter/references/pattern-b-modernization.md": "e1aeaf45810b2b5ac5ef6cef6fe6906710e26ba0ba3d5fb7c7857241fe03f6b7",
    "plugins/ui5-modernization/skills/modernize-test-starter/references/pattern-u-iframe-migration.md": "3dc090986cdf1ef3434643761fb661f2e3bf7e8a1ba6db7a2fa35440f7900719",
    "plugins/ui5-modernization/skills/modernize-test-starter/references/testsuite-configuration.md": "cd73518d821d9388d4ca39e8f9b1057d2764d1f8ecd152153d5ab4ea71aa4eed",
    "plugins/ui5-modernization/skills/modernize-test-starter/scripts/check-dangling-entries.js": "f38e787c49ad1c778460326048e9fd1e0f4febc423b4cd75cf3d9ed9d49beca4",
    "plugins/ui5-modernization/skills/modernize-test-starter/scripts/check-dangling-entries.test.js": "b9bec74ad5a80f0654bd39891452fc1fe7e940268a87833f7e0fd3ce6718fac5",
    "plugins/ui5-modernization/skills/modernize-test-starter/scripts/detect-cross-window-imports.js": "e4f970e83affac8957fa38cd63711bc2d010b1114e76c2088428b618cec4383a",
    "plugins/ui5-modernization/skills/modernize-test-starter/scripts/detect-cross-window-imports.test.js": "8442472a9f63594e5ebf88d246e124c4c4a49565269faf52de0f7c7899664f7e",
    "plugins/ui5-modernization/skills/modernize-test-starter/scripts/parse-testsuite.js": "06b7dcc15803619e42973ff747782726522add89adb84b819e08efa757c41c77",
    "plugins/ui5-modernization/skills/modernize-test-starter/scripts/parse-testsuite.test.js": "000d35dd3cfa96a7ebf5495a453589f490a059325337b007930a0d88616f6a75",
    "plugins/ui5-modernization/skills/modernize-ui5-app/SKILL.md": "775977fa1dcef5f81b2797c3885abee3440f8647961759cb5a8d681975d523be",
    "plugins/ui5-modernization/skills/modernize-ui5-app/references/SAPUI5_Local_Build.md": "4a033a6a2e57f98f9b428044488f43102912a32de97d2066a491e17861cb37c4",
    "plugins/ui5-modernization/skills/modernize-ui5-app/references/build-and-test-commands.md": "3e01d8c090e4edd40a1cbee745161b66b300c1ea7b766eb82e9b6eb1a00a16f3",
    "plugins/ui5-modernization/skills/modernize-ui5-app/references/documentation-templates.md": "c937e4f136f2884d4fbe209aa2e98d55a1274dd0b69652e7973d7bb5426a9d9d",
    "plugins/ui5-modernization/skills/modernize-ui5-app/references/headless-capabilities.md": "4a9fbd11e0036be325aa40e22e94abfa797a236a1f98c48e95c6da628bb505f5",
    "plugins/ui5-modernization/skills/modernize-ui5-app/references/headless-chrome.json": "584d6e0b8c71544ba5940e3b70350b54fc7c9cdb70e47e4111324d11fb57067e",
    "plugins/ui5-modernization/skills/modernize-ui5-app/references/pom-dev-profile-patch.md": "61eba45da3130c310d183ea65591294e17407c622850f84ceeb105f9f578fd2b"
  },
  "lockfiles": [
    "LOCK.json"
  ],
  "utc_date": "2026-10-20T00:18:59Z",
  "source_date": "2026-10-16",
  "discovered_date": "2026-10-16",
  "retested_date": "2026-10-20",
  "reviewed_date": "2026-10-20",
  "published_date": "2026-10-20",
  "modified_date": "2026-10-20",
  "reviewer": "machine pipeline",
  "harness_version": "toolwitness harness at commit 80347ac5c68b1268b011b015a8797984151a16e7",
  "claude_code_version": "Not applicable: static source inspection (commands.json).",
  "model_id": "Not applicable: static source inspection (commands.json).",
  "scanner_version": "Not applicable: static source inspection.",
  "rulepack_version": "Not applicable: static source inspection.",
  "agents": [],
  "disclaimer": "This record lists declarations and file hashes from a pinned source tree. Git command results from acquisition and static inspection are retained in commands.json. Scope: acquisition and static inspection. It is not a security or quality verdict. Changed bytes are outside this record.",
  "commands": [
    "Ran 78 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection."
  ],
  "prompt_list": [
    "Not applicable: static source inspection (commands.json)."
  ],
  "history": [
    "2026-10-20T00:18:59Z: pinned source inspection"
  ],
  "application": {
    "name": "ui5-modernization — 19 skills",
    "softwareVersion": "2b8c4a944e39609214bce7aef3b05260985f0e91",
    "applicationCategory": "DeveloperApplication",
    "operatingSystem": "Not exercised"
  },
  "artifacts": {
    "transcript": "Ran 78 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection.",
    "sinkhole_log": "Not applicable: static source inspection (commands.json).",
    "canary_log": "Not applicable: static source inspection (commands.json).",
    "scanner_output": "Not applicable: static source inspection (commands.json).",
    "normalized_text": "{\n  \"listing\": {\n    \"skills\": [\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-bootstrap-params/SKILL.md\",\n        \"name\": \"fix-bootstrap-params\",\n        \"description\": \"Fix HTML bootstrap parameter issues that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs these rules:\\n- `no-deprecated-api` - For missing/deprecated bootstrap parameters (async, compat-version, animation, binding-syntax, etc.)\\n- `no-deprecated-theme` - For deprecated theme values in data-sap-ui-theme\\n- `no-deprecated-library` - For deprecated libraries in data-sap-ui-libs\\nTrigger on error messages containing: \\\"Missing bootstrap parameter\\\", \\\"Abandoned bootstrap parameter\\\", \\\"Redundant bootstrap parameter\\\", \\\"deprecated value\\\", \\\"bootstrap\\\"\\nAutomatically applies safe fixes to HTML files containing UI5 bootstrap script tags.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-bootstrap-params/SKILL.md\": \"4682c61d32ba8971fb8f0c8d0360a2db48a84ccd7871e26a097969002b1a28c2\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-component-async/SKILL.md\",\n        \"name\": \"fix-component-async\",\n        \"description\": \"Fix Component.js async configuration issues that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs these rules:\\n- `async-component-flags` - For missing IAsyncContentCreation interface, missing manifest declaration, redundant async flags, async:false errors\\n- `no-removed-manifest-property` - For async flags in inline manifest v2\\nTrigger on Component.js files with errors about async loading, IAsyncContentCreation, manifest declaration.\\nAutomatically adds the IAsyncContentCreation interface and configures manifest properly.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-component-async/SKILL.md\": \"604958cc203a8cf09a755144e8ee90e720805c9d7e208300cd47119413830f3a\",\n          \"plugins/ui5-modernization/skills/fix-component-async/scripts/verify-component.js\": \"78fd524a226314675e63e3b128d17c20406cbeabe0693a984c0ff60c3828d98e\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-control-renderer/SKILL.md\",\n        \"name\": \"fix-control-renderer\",\n        \"description\": \"Fix Control renderer issues that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs these rules:\\n- `no-deprecated-control-renderer-declaration` - For missing renderer declaration, string-based renderer declaration, implicit renderer auto-discovery (removed in modern UI5)\\n- `no-deprecated-api` - For missing apiVersion:2 in renderer objects, missing IconPool import when using oRm.icon(), deprecated rerender() override. NOTE: For Library.init() apiVersion errors, use fix-library-init instead.\\n- `ui5-class-declaration` - For non-static renderer property in ES6 classes\\nTrigger on: \\\"missing a renderer declaration\\\", \\\"Deprecated declaration of renderer\\\", \\\"deprecated renderer\\\", \\\"apiVersion\\\" (in renderer context), \\\"IconPool\\\", \\\"rerender\\\", \\\"renderer must be a static property\\\"\\nConverts legacy renderer patterns to modern apiVersion: 2 format with proper module imports.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-control-renderer/SKILL.md\": \"5a5d75b9a5ac0bb802cfc13b6828cdea4f52d47f5d1485eaa1c34b60a8b438d5\",\n          \"plugins/ui5-modernization/skills/fix-control-renderer/references/renderer-api-mapping.md\": \"d9a7003f94ca4c76f40dead9302dbe7ddb3e54d918a36ec2f5248f2f9e912e48\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-csp-compliance/SKILL.md\",\n        \"name\": \"fix-csp-compliance\",\n        \"description\": \"Fix Content Security Policy (CSP) compliance issues that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs:\\n- `csp-unsafe-inline-script` with message \\\"Use of unsafe inline script\\\"\\nTrigger on: inline JavaScript in HTML files, script tags without src attribute, onclick/onload handlers in HTML.\\nAlso use when user mentions 'security headers', 'inline script warning', 'CSP policy', 'unsafe-inline', or 'Content-Security-Policy'.\\nProvides guidance on moving inline scripts to external files for CSP compliance.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-csp-compliance/SKILL.md\": \"da6952e0742555f52cff77559ba06c0257f67b71cc460f2f65a6eca8b91db9be\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-cyclic-deps/SKILL.md\",\n        \"name\": \"fix-cyclic-deps\",\n        \"description\": \"Detect and resolve cyclic module dependencies introduced during UI5 modernization.\\nTrigger when user mentions: \\\"cyclic dependency\\\", \\\"circular import\\\", \\\"undefined module at runtime\\\",\\n\\\"lazy require\\\", \\\"sap.ui.require sync\\\", \\\"import cycle\\\", or when a module returns undefined despite\\na correct import path. Classic symptom: a module is `undefined` at runtime despite a correct\\nsap.ui.define import path.\\nAuto-fixes 2-node cycles (A↔B) by converting the lesser-used edge to lazy sap.ui.require().\\nAuto-fixes longer chains (3+ nodes) via hub-based approach. Reports unfixable chains to\\nMODERNIZATION-ISSUES.md. Runs as Phase 3, Step 3.3 (final step) after all other Phase 3 steps.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-cyclic-deps/SKILL.md\": \"e695cbdc587e317cb7d9c20ea0f265f9233bca2611a316eb709c60ee229069e3\",\n          \"plugins/ui5-modernization/skills/fix-cyclic-deps/references/dependency-graph-analysis.md\": \"c406b0346bd2500ec7b8cd20dcc4750976a1b5c562fdff2ffe2380b7d5241e10\",\n          \"plugins/ui5-modernization/skills/fix-cyclic-deps/scripts/detect-cycles.js\": \"2226cecf738dc6dace0467bebc645108e6bf499f737b61353f345443d6770d7a\",\n          \"plugins/ui5-modernization/skills/fix-cyclic-deps/scripts/detect-unsafe-lazy.js\": \"2b316a1564ad2911c2286a30626926e8ce2efb7203c79892487ff3b0ddce1599\",\n          \"plugins/ui5-modernization/skills/fix-cyclic-deps/scripts/detect-unsafe-lazy.test.js\": \"a05663fa296e913d871fb05cda1e993f835f8cfc53852c945be5e16234ae04eb\",\n          \"plugins/ui5-modernization/skills/fix-cyclic-deps/scripts/lib/graph-utils.js\": \"2ad4142ce8aa85d65acf40f6ea51c835ec0e9516bcc24b8a869c89ba9c26ec30\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-deprecated-controls/SKILL.md\",\n        \"name\": \"fix-deprecated-controls\",\n        \"description\": \"Fix deprecated control/class/interface/type issues that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs:\\n- `no-deprecated-api` with messages about deprecated class, interface, type, property, or property of class\\n- Messages like \\\"Use of deprecated class '...'\\\", \\\"Use of deprecated interface '...'\\\", \\\"Use of deprecated property '...'\\\"\\nTrigger on: deprecated control usage in JS `new` expressions, deprecated properties in constructor settings, deprecated interfaces/types in metadata, deprecated controls/properties in XML views, sap.m.MessagePage modernization to IllustratedMessage.\\nUse this skill whenever you see 'deprecated class', 'deprecated property', 'deprecated interface', or 'deprecated type' in linter output, even if the user doesn't explicitly mention deprecation.\\nProvides replacement guidance for deprecated UI5 controls and their properties.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-deprecated-controls/SKILL.md\": \"0c74b7205949cb8033dc72852a16c1aaae259dd2f9ccadd820341cbc79dc3ac1\",\n          \"plugins/ui5-modernization/skills/fix-deprecated-controls/references/control-modernization-details.md\": \"9a7c94d65953a309c654193f93ee342bd436c0803820f481fbc929c1598e4421\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-fiori-elements-extensions/SKILL.md\",\n        \"name\": \"fix-fiori-elements-extensions\",\n        \"description\": \"Handle Fiori Elements V2 controller extensions during UI5 modernization. Use this skill when:\\n- Extension controllers use `sap.ui.controller()` AND the manifest has a matching `controllerName` entry (Case B → report only, do not modernize)\\n- Extension controllers use `Controller.extend()` with manifest `controllerName` registration (Case B → report only, do not modernize)\\n- Code contains `registerControllerExtensions` calls (Case A → ControllerExtension.extend + override)\\n- Manifest.json has `sap.ui5/extends/extensions/sap.ui.controllerExtensions` with `controllerName` entries\\nCase B (plain object) is by far the most common. For Case B, do NOT modify controller files — report them and move on. Case A requires actual code modernization.\\nFor plain controller definitions in custom (non-Fiori-Elements) apps where `sap.ui.controller()` is just defining a standalone controller, use `fix-js-globals` (Case 9) instead.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-fiori-elements-extensions/SKILL.md\": \"9d3d6ad9d900644dcc6a1d2de1ac11e23de74f0438182973c077159d2354aa31\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-js-globals/SKILL.md\",\n        \"name\": \"fix-js-globals\",\n        \"description\": \"Fix JavaScript `no-globals` errors that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs:\\n- `no-globals` rule with message \\\"Access of global variable '...' (...)\\\" in JS files\\nCases handled (linter CANNOT auto-fix):\\n- Assignments to global namespaces: `sap.myNamespace = {...}`\\n- Global namespace assignment/read inside sap.ui.define\\n- Delete expressions: `delete sap.something`\\n- sap.ui.core.Core direct access (class vs singleton)\\n- jQuery/$ globals: add `sap/ui/thirdparty/jquery` — do NOT replace jQuery API calls\\n- jQuery.sap.* utilities: replace with dedicated modules\\n- Conditional/probing access: `if (sap.ui.something)`\\n- Custom namespace definitions that aren't UI5 modules\\n- sap.ui.controller() factory → Controller.extend (NOT Fiori Elements extensions)\\n- jQuery.sap.declare/require: legacy modules without sap.ui.define\\nTrigger when: \\\"fix no-globals\\\", \\\"global variable error\\\", \\\"sap.ui.getCore\\\", \\\"jQuery.sap\\\"\\nConverts global namespace access to proper sap.ui.define module imports.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-js-globals/SKILL.md\": \"6c4a1fc808170597f296d4463b4645a4a38d785d03b6d694011409052fd2a4f8\",\n          \"plugins/ui5-modernization/skills/fix-js-globals/references/core-api-replacements.md\": \"ac4fcf51c17f15c8ece917e5304a3c9417763997dab645162c31f03987542d52\",\n          \"plugins/ui5-modernization/skills/fix-js-globals/references/example-fix-session.md\": \"f6214f61bc08963a5031fc0beb2dda71bb805185c5c5ef92141b81bf66bc5ae5\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-library-init/SKILL.md\",\n        \"name\": \"fix-library-init\",\n        \"description\": \"Fix Library.init() apiVersion issues and modernize enums to DataType.registerEnum. Use this skill when linter outputs:\\n- `no-deprecated-api` with message \\\"Deprecated call to ... Use the {apiVersion: 2} parameter instead\\\"\\nTrigger on library.js files with errors about: \\\"Deprecated call to\\\", \\\"Lib.init\\\", \\\"Library.init\\\", \\\"{apiVersion: 2} parameter\\\"\\nAdds apiVersion: 2 to Library.init() calls and modernizes enum definitions to use DataType.registerEnum, which is required for type validation when using apiVersion: 2.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-library-init/SKILL.md\": \"bbfc909c7b2a7e814d5f82d6466d38eb7fa78355508ffa31e4defb9e582def0e\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-linter-blind-spots/SKILL.md\",\n        \"name\": \"fix-linter-blind-spots\",\n        \"description\": \"Fix runtime-breaking patterns in JS files that the UI5 linter does NOT report. Use this skill when:\\n- Tests fail after modernization with \\\"ReferenceError\\\", \\\"TypeError: Cannot read properties of undefined\\\", or \\\"X is not defined\\\"\\n- The linter shows zero remaining errors but tests still crash at runtime\\n- Phase 3, Step 3.2 of the modernize-ui5-app workflow (runs after the parallel globals batch, before fix-cyclic-deps)\\n- User mentions \\\"runtime errors after modernization\\\", \\\"test failures after modernization\\\", \\\"global namespace still used\\\"\\n- After running fix-js-globals and fix-cyclic-deps, but tests STILL fail\\n- User sees \\\"X is not a constructor\\\" or module loading errors in test output\\nThe linter only checks sap.* globals in JS. App-specific namespace patterns (e.g., com.example.app.utils.Module)\\nare invisible to it. This skill detects and fixes those across ALL JS files — app source AND test.\\nNOTE: App-namespace globals in XML files are handled by `fix-xml-globals` — NOT by this skill.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-linter-blind-spots/SKILL.md\": \"af8ad819d3e64eb4beb3ae575d02028c0c3a3c62f2470bec4a3ccfa7848c9e13\",\n          \"plugins/ui5-modernization/skills/fix-linter-blind-spots/scripts/detect-blind-spots.js\": \"a8c60490a6d9e21a217897a40f623169a2b7502c39a4f8200c41f18722abd01b\",\n          \"plugins/ui5-modernization/skills/fix-linter-blind-spots/scripts/detect-blind-spots.test.js\": \"f1c89f7fda4f80c5da998d2389e7c842ffb2bd4b0b575adf017f22b5be39785d\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-manifest-json/SKILL.md\",\n        \"name\": \"fix-manifest-json\",\n        \"description\": \"Fix manifest.json issues that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs these rules:\\n- `no-outdated-manifest-version` - For _version not being 2.x\\n- `no-legacy-ui5-version-in-manifest` - For minUI5Version below 1.136\\n- `no-deprecated-library` - For deprecated libraries in dependencies\\n- `no-deprecated-component` - For deprecated components in dependencies\\n- `no-deprecated-api` - For deprecated view types, resources/js, deprecated model types\\n- `no-removed-manifest-property` - For async flags in manifest v2\\nTrigger on manifest.json files with errors about version, libraries, components, view types.\\nAutomatically updates manifest.json to be modern UI5 compatible.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-manifest-json/SKILL.md\": \"be91e0e30255fff07518f911ad0a5a149ce3309975865fd99dedc546952a1ce0\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-partially-deprecated-apis/SKILL.md\",\n        \"name\": \"fix-partially-deprecated-apis\",\n        \"description\": \"Fix partially deprecated API usage that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs:\\n- `no-deprecated-api` for Parameters.get, JSONModel.loadData, Mobile.init, ODataModel.v2.createEntry, View.create, Fragment.load, Router constructor\\n- `unsupported-api-usage` for string formatter in JS bindings\\nTrigger on: Parameters.get without object param, JSONModel.loadData with bAsync=false, Mobile.init with homeIcon, createEntry with batchGroupId, View.create/Fragment.load with non-XML type, Router without async:true, formatter as string in JS.\\nProvides specific fix patterns for each partially deprecated API variant.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-partially-deprecated-apis/SKILL.md\": \"42dbbce2be48707219c3f4adc50c5b843c1c0096a67d1ba089b350af01a79b2e\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-pseudo-modules/SKILL.md\",\n        \"name\": \"fix-pseudo-modules\",\n        \"description\": \"Fix pseudo module and implicit global issues that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs:\\n- `no-pseudo-modules` with messages about deprecated enum or DataType pseudo module access\\n- `no-implicit-globals` with messages about module not exported by library or OData globals\\nTrigger on: direct enum imports (sap/ui/core/BarColor), direct DataType imports (sap/ui/core/CSSSize), library.EnumName access, odata.compare/fillUriTemplate/uriEncode in bindings.\\nProvides guidance on proper module imports for enums, DataTypes, and OData expression addons.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-pseudo-modules/SKILL.md\": \"809df204187d94c092d55e491412274f3d6d736846af738e0230745fb8005cd5\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-table-row-mode/SKILL.md\",\n        \"name\": \"fix-table-row-mode\",\n        \"description\": \"Fix deprecated `sap.ui.table.Table` row properties that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs:\\n- `no-deprecated-api` with messages about `visibleRowCountMode`, `visibleRowCount`, `rowHeight`, `fixedRowCount`, `fixedBottomRowCount`, or `minAutoRowCount`\\nTrigger on: deprecated row-related properties on sap.ui.table.Table in JS or XML, modernization to rowMode aggregation.\\nConverts deprecated flat properties to a structured `rowMode` aggregation using `sap.ui.table.rowmodes.Fixed`, `Interactive`, or `Auto`.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-table-row-mode/SKILL.md\": \"5200c461611fdc4dfbf193ad88e8066bf546e558675e3b15b93293df64d582f1\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-xml-globals/SKILL.md\",\n        \"name\": \"fix-xml-globals\",\n        \"description\": \"Fix XML view/fragment issues that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs these rules:\\n- `no-globals` - For ALL global variable access in XML views — sap.*, jQuery.*, AND app-namespace globals (e.g., com.example.app.utils.Handler.onPress, my.app.formatter.method)\\n- `no-ambiguous-event-handler` - For event handlers without dot prefix or local name\\n- `no-deprecated-api` - For legacy template:require syntax (space-separated)\\nTrigger on XML view/fragment files with errors about global variables, event handlers, formatters, type references in bindings, factory functions, or template:require.\\nAutomatically adds core:require declarations, fixes event handler prefixes, and handles .bind($control) for functions that use 'this'.\\nIMPORTANT: The linter reports app-namespace globals in XML under `no-globals` — these MUST be fixed by this skill, NOT deferred to fix-linter-blind-spots.\\nFor native HTML or SVG in XML views, use the fix-xml-native-html skill instead.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-xml-globals/SKILL.md\": \"0ac718028e37e3f20af90d5f12c6dba47f4f9c6eb408449cc7c9f32d2f37431b\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/references/placement-and-binding.md\": \"659a3f480fb42d4e40f7e5e88d7f16ecefa7485636787c074a005cc64c73e6a2\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/README.md\": \"16af5b039b2457a570343e9189427a6652d8e3055769d90a42bf76634bd4c4c6\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/nested_function_shadow.js\": \"0c3ad8397fe2ca2bb56c12064d1f7c6622bf0733d2cf62b1580030256151f889\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/no_this.js\": \"d60a7be1d2be4b53be219977f536be7f3e18497a03722dea68ab149b3bfd2d3f\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/not_found.js\": \"a946539377ba49da82329be13eb91c791b2e2cc10b95bfdbc618b09fa874d857\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/this_in_comment.js\": \"b12bf6cab2e8876d444e8911d0ed939618939b92ca91888d5dc0ea7412093c9d\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/this_in_string.js\": \"32569e89464b171629fc88ab86c006736a08a8adcedb8f519993b0f78ebdb781\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/uses_this_alias.js\": \"03e33b9a71f637edacd01474380534b4d89297bcd5a6000c70f371afbade1fd9\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/uses_this_arrow.js\": \"5f315214161ba69ca7bec61a8cc7689b99315d52ee29faab6036930095eeeff8\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/uses_this_bare.js\": \"ecde2928c24d014db923811d2bef59fa8fe7cb3494e8db2a59898b6f711ed60a\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/uses_this_member.js\": \"2eef7f3e8107c98282ce15df3a125c3d7ce2256a7985e49676e0ad776e1eceb9\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/uses_this_nested_in_if.js\": \"25d56e0a4a2b21bc85ec96785250119c4c5487022de4d611f27581d3e73b199a\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/xml/has_bind.fragment.xml\": \"5c4c3a60ada3140241d268477532d4a92be9add55d72bb92bed5e57663378ecc\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/xml/multi_line.fragment.xml\": \"3144273b7572851e3a45cf58ecd911f4e4b31c1c91a8559ad578860ca7afe1f6\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/xml/needs_bind.fragment.xml\": \"f4da77b3a216aa319f1b28a49e816a03682393da1f86171224ed613232739127\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/__fixtures__/xml/no_this_no_bind.fragment.xml\": \"a376b5161eb7164997872b685a5bd00d59cc1158108758c859d3e535dae383a5\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/verify-this-bind.js\": \"ba98684e1dc6e3e27fd582f02854771244ddcf4f5cd9df07b9df3556503c1639\",\n          \"plugins/ui5-modernization/skills/fix-xml-globals/scripts/verify-this-bind.test.js\": \"bd569a6af3d8724197fa03804593d1066857656f88075cf3acdf2919fbf94375\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/fix-xml-native-html/SKILL.md\",\n        \"name\": \"fix-xml-native-html\",\n        \"description\": \"Fix native HTML and SVG usage in XML views/fragments that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs:\\n- `no-deprecated-api` with message \\\"Usage of native HTML in XML Views/Fragments is deprecated\\\"\\n- `no-deprecated-api` with message \\\"Deprecated use of SVG in XML View or Fragment\\\"\\nTrigger on: HTML elements in XML views (html:div, html:span, html:a), SVG elements in XML views, xmlns:html namespace usage.\\nProvides guidance on replacing native HTML with UI5 controls and SVG with UI5 icons or custom controls.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/fix-xml-native-html/SKILL.md\": \"edaa2d742613136dc7d2bd4f084b298dd3167e6b30cc8f61c27a13bb339e2727\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/modernize-flp-sandbox/SKILL.md\",\n        \"name\": \"modernize-flp-sandbox\",\n        \"description\": \"Use when migrating UI5 apps from legacy FLP sandbox to the new sandbox (New Sandbox). Triggers on /modernize-flp-sandbox, mentions of \\\"flpSandbox.html\\\", \\\"sap-ushell-config\\\", or requests to update sandbox configuration.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/modernize-flp-sandbox/SKILL.md\": \"73cbe7f6a0b2e0b044a519429ebe1193e9c6cac9b60a5b1205e43e8f5fd9f6e6\",\n          \"plugins/ui5-modernization/skills/modernize-flp-sandbox/references/native-replacements.md\": \"4ad360cce3d5b865f1023680093a698ca0914bcd9977a3e304a9ae8a656ca6ae\",\n          \"plugins/ui5-modernization/skills/modernize-flp-sandbox/references/operations.md\": \"83bd454e83d04cdd2e0f344d75d4b19c81bc384edaf70e6f96a2cb06c92d5c9e\",\n          \"plugins/ui5-modernization/skills/modernize-flp-sandbox/references/sandbox-config-surface.md\": \"2a1a0d2d5c8c3dcea07283ede57082fee0c96becb8635b2c37d08c96271e27d2\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/modernize-test-starter/SKILL.md\",\n        \"name\": \"modernize-test-starter\",\n        \"description\": \"Modernize QUnit unit tests and OPA5 integration tests to the UI5 Test Starter concept.\\nUse this skill when:\\n- The linter reports `prefer-test-starter` for *.qunit.html or *.qunit.js files\\n- Test HTML files use manual sap-ui-core.js bootstrapping instead of Test Starter's runTest.js/createSuite.js\\n- Test JS files use Core.ready(), Core.attachInit(), or jsUnitTestSuite instead of sap.ui.define\\n- OPA test HTML files exist with per-test Opa5.extendConfig and manual bootstrapping\\n- An AllJourneys.js orchestrator loads OPA journeys dynamically\\n- OPA journeys call `iStartMyUIComponent` instead of `iStartMyAppInAFrame`\\n- User asks to modernize tests, modernize test infrastructure, or adopt Test Starter\\nHandles unit tests (Core.ready removal, sap.ui.define wrapping) and OPA challenges\\n(page-object imports, Opa5 config, journey orchestration, QUnit 1.x assert modernization,\\nin-window-to-iframe launcher migration).\\nTrigger on: prefer-test-starter warnings, test modernization requests, iStartMyUIComponent.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/modernize-test-starter/SKILL.md\": \"ab286f304a888ee6472239dfe23b0d938a40ca6e736eaa521c51d8b3e3051d74\",\n          \"plugins/ui5-modernization/skills/modernize-test-starter/references/linter-invisible-patterns.md\": \"d4e9a9d7cff799f43cf9f7eac7bf5e728b3a35f61d417f0c6f964565415e4a28\",\n          \"plugins/ui5-modernization/skills/modernize-test-starter/references/pattern-a-modernization.md\": \"682878a9f457ddef7d3e060df83b5c74258c47d63d1f34664dd1b6e2e51b6ec7\",\n          \"plugins/ui5-modernization/skills/modernize-test-starter/references/pattern-b-modernization.md\": \"e1aeaf45810b2b5ac5ef6cef6fe6906710e26ba0ba3d5fb7c7857241fe03f6b7\",\n          \"plugins/ui5-modernization/skills/modernize-test-starter/references/pattern-u-iframe-migration.md\": \"3dc090986cdf1ef3434643761fb661f2e3bf7e8a1ba6db7a2fa35440f7900719\",\n          \"plugins/ui5-modernization/skills/modernize-test-starter/references/testsuite-configuration.md\": \"cd73518d821d9388d4ca39e8f9b1057d2764d1f8ecd152153d5ab4ea71aa4eed\",\n          \"plugins/ui5-modernization/skills/modernize-test-starter/scripts/check-dangling-entries.js\": \"f38e787c49ad1c778460326048e9fd1e0f4febc423b4cd75cf3d9ed9d49beca4\",\n          \"plugins/ui5-modernization/skills/modernize-test-starter/scripts/check-dangling-entries.test.js\": \"b9bec74ad5a80f0654bd39891452fc1fe7e940268a87833f7e0fd3ce6718fac5\",\n          \"plugins/ui5-modernization/skills/modernize-test-starter/scripts/detect-cross-window-imports.js\": \"e4f970e83affac8957fa38cd63711bc2d010b1114e76c2088428b618cec4383a\",\n          \"plugins/ui5-modernization/skills/modernize-test-starter/scripts/detect-cross-window-imports.test.js\": \"8442472a9f63594e5ebf88d246e124c4c4a49565269faf52de0f7c7899664f7e\",\n          \"plugins/ui5-modernization/skills/modernize-test-starter/scripts/parse-testsuite.js\": \"06b7dcc15803619e42973ff747782726522add89adb84b819e08efa757c41c77\",\n          \"plugins/ui5-modernization/skills/modernize-test-starter/scripts/parse-testsuite.test.js\": \"000d35dd3cfa96a7ebf5495a453589f490a059325337b007930a0d88616f6a75\"\n        }\n      },\n      {\n        \"path\": \"plugins/ui5-modernization/skills/modernize-ui5-app/SKILL.md\",\n        \"name\": \"modernize-ui5-app\",\n        \"description\": \"End-to-end workflow for modernizing a UI5 application. Use this skill when:\\n- User wants to modernize their UI5 app\\n- User mentions \\\"UI5 modernization\\\", \\\"modernize UI5 app\\\", \\\"upgrade UI5\\\", \\\"make app modern UI5 compatible\\\"\\n- User asks to \\\"fix all linter errors\\\", \\\"run full modernization\\\", \\\"modernize my UI5 project\\\"\\nThis skill runs the modernization in five phases with a verification gate after each phase. The user picks the verification mode once at the start (full autonomous / half autonomous / manual). The agent applies that mode at every gate without re-asking.\\n\",\n        \"files\": {\n          \"plugins/ui5-modernization/skills/modernize-ui5-app/SKILL.md\": \"775977fa1dcef5f81b2797c3885abee3440f8647961759cb5a8d681975d523be\",\n          \"plugins/ui5-modernization/skills/modernize-ui5-app/references/SAPUI5_Local_Build.md\": \"4a033a6a2e57f98f9b428044488f43102912a32de97d2066a491e17861cb37c4\",\n          \"plugins/ui5-modernization/skills/modernize-ui5-app/references/build-and-test-commands.md\": \"3e01d8c090e4edd40a1cbee745161b66b300c1ea7b766eb82e9b6eb1a00a16f3\",\n          \"plugins/ui5-modernization/skills/modernize-ui5-app/references/documentation-templates.md\": \"c937e4f136f2884d4fbe209aa2e98d55a1274dd0b69652e7973d7bb5426a9d9d\",\n          \"plugins/ui5-modernization/skills/modernize-ui5-app/references/headless-capabilities.md\": \"4a9fbd11e0036be325aa40e22e94abfa797a236a1f98c48e95c6da628bb505f5\",\n          \"plugins/ui5-modernization/skills/modernize-ui5-app/references/headless-chrome.json\": \"584d6e0b8c71544ba5940e3b70350b54fc7c9cdb70e47e4111324d11fb57067e\",\n          \"plugins/ui5-modernization/skills/modernize-ui5-app/references/pom-dev-profile-patch.md\": \"61eba45da3130c310d183ea65591294e17407c622850f84ceeb105f9f578fd2b\"\n        }\n      }\n    ],\n    \"hooks\": [],\n    \"executions\": []\n  }\n}"
  },
  "review_input": {
    "identity_artifact": "identity.json",
    "evidence_sha256": {
      "LOCK.json": "d3ebd5ae475b91f9bc43f4f4c2535437603ac1b95a648864c77018e2e47c48d0",
      "commands.json": "be89823ddf92ab7aa8f21371d2fad348d30be202cf4aa835fb85f5b3e266cbd3",
      "complete.json": "91b504b43905fdc009504d516c45eea831f39a1995b9e7d69987c9756c936d6f",
      "identity.json": "7b522d1092a6f741a1a334332fc9349ab5d3e11879e461a65bab50c943e37407",
      "listing.json": "0a974b5affd85546ec510b3221ed241c20e76495fe7591871c9b0c4108592b46",
      "selection.json": "0ee6cf5e2f4ac80ffc4bfc9e72e290a9fb8ed9071f6f87aa9ccbfb1f0280b786"
    },
    "claims": [
      {
        "id": "acquired",
        "field": "summary",
        "text": "Pinned source declarations and file hashes were listed.",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      },
      {
        "id": "listed",
        "field": "outcome",
        "text": "Listed 19 skill declarations. Ran 78 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection.",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      },
      {
        "id": "tree",
        "field": "rule_results.0",
        "text": "The retained source tree matches its acquisition manifest.",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      },
      {
        "id": "declared",
        "field": "rule_results.1",
        "text": "Declared skill names (listing.json): fix-bootstrap-params; fix-component-async; fix-control-renderer; fix-csp-compliance; fix-cyclic-deps; fix-deprecated-controls; fix-fiori-elements-extensions; fix-js-globals; fix-library-init; fix-linter-blind-spots; fix-manifest-json; fix-partially-deprecated-apis; fix-pseudo-modules; fix-table-row-mode; fix-xml-globals; fix-xml-native-html; modernize-flp-sandbox; modernize-test-starter; modernize-ui5-app",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      }
    ]
  },
  "review": {
    "kind": "machine-checked",
    "date": "2026-10-20",
    "reviewed_sha256": "fac02330e744c112279c07af194b2e145fd48e6a6d8d8e9afaca1ce3c6548ba6",
    "gates": "362115332647e2d21ff175a7de1af35e1809c22b5a2cde8fb29e11c1a0b6ea02",
    "codex": "2c1cb1b50723540a2e225f85654957e54fffb47b843ed2252a148677dadc5d38",
    "grok": "debc2efd369df6914bf3bdc86b89de5bb8057c23e666330ea58f85c300eb2248",
    "summary": "Deterministic gates passed; every claim rebuilt from evidence with a reviewed template; Grok reported no standing refutation."
  }
}
