skilldrop-cli 0.16.35 → 0.16.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/README.md +1 -0
  2. package/agents/README.md +4 -1
  3. package/agents/docs-reviewer.md +47 -0
  4. package/agents/finding-adjudicator.md +49 -0
  5. package/agents/test-reviewer.md +52 -0
  6. package/catalogue.json +17 -7
  7. package/model-routing.json +40 -0
  8. package/package.json +1 -1
  9. package/packs/ai-engineering/skills/agent-config-review/SKILL.md +116 -0
  10. package/packs/ai-engineering/skills/agent-config-review/evals/eval_queries.json +12 -0
  11. package/packs/ai-engineering/skills/agent-config-review/evals/evals.json +75 -0
  12. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/db-migrator.md +8 -0
  13. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/reviewer.md +9 -0
  14. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/settings.json +48 -0
  15. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/settings.local.json +5 -0
  16. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.mcp.json +22 -0
  17. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/package.json +12 -0
  18. package/packs/ai-engineering/skills/agent-config-review/evals/files/2/.cursor/mcp.json +17 -0
  19. package/packs/ai-engineering/skills/agent-config-review/evals/files/2/config.toml +21 -0
  20. package/packs/ai-engineering/skills/agent-config-review/evals/files/4/my-user-settings.json +11 -0
  21. package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.claude/agents/release-notes.md +13 -0
  22. package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.claude/settings.json +39 -0
  23. package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.mcp.json +18 -0
  24. package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/package.json +14 -0
  25. package/packs/ai-engineering/skills/agent-config-review/evals/files/5/.github/workflows/codex-triage.yml +29 -0
  26. package/packs/ai-engineering/skills/agent-config-review/evals/files/5/AGENTS.md +16 -0
  27. package/packs/ai-engineering/skills/agent-config-review/evals/files/5/codex/config.toml +34 -0
  28. package/packs/ai-engineering/skills/agent-config-review/examples/inputs/tidewater-ingest/.claude/settings.json +22 -0
  29. package/packs/ai-engineering/skills/agent-config-review/examples/inputs/tidewater-ingest/.mcp.json +9 -0
  30. package/packs/ai-engineering/skills/agent-config-review/examples/python-repo-tighten.md +81 -0
  31. package/packs/ai-engineering/skills/agent-config-review/manifest.json +60 -0
  32. package/packs/ai-engineering/skills/agent-config-review/reference.md +205 -0
  33. package/packs/ai-engineering/skills/agent-config-review/scripts/agent_config_scan.py +989 -0
  34. package/packs/ai-engineering/skills/agent-incident-response/SKILL.md +175 -0
  35. package/packs/ai-engineering/skills/agent-incident-response/evals/eval_queries.json +14 -0
  36. package/packs/ai-engineering/skills/agent-incident-response/evals/evals.json +107 -0
  37. package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/agent-session-excerpt.txt +11 -0
  38. package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/ci-build-log.txt +24 -0
  39. package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/incident-notes.md +19 -0
  40. package/packs/ai-engineering/skills/agent-incident-response/evals/files/2/mcp-config.json +20 -0
  41. package/packs/ai-engineering/skills/agent-incident-response/evals/files/2/session-transcript.txt +8 -0
  42. package/packs/ai-engineering/skills/agent-incident-response/evals/files/4/agent-session.log +70 -0
  43. package/packs/ai-engineering/skills/agent-incident-response/evals/files/4/infra/staging-db.tf +25 -0
  44. package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/jobs/nightly-triage/job.yaml +19 -0
  45. package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/jobs/nightly-triage/run.log +13 -0
  46. package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/usage-export-2026-10-20.csv +13 -0
  47. package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/.mcp.json +20 -0
  48. package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/git-log.txt +12 -0
  49. package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/notesync-excerpt.txt +30 -0
  50. package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/notesync.log +15 -0
  51. package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/ssh-config.txt +16 -0
  52. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/.github/workflows/ci.yml +28 -0
  53. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/SECURITY.md +8 -0
  54. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/issue-479.md +35 -0
  55. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/package.json +15 -0
  56. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/pr-482.diff +20 -0
  57. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/run-log.txt +30 -0
  58. package/packs/ai-engineering/skills/agent-incident-response/examples/injected-issue-comment.md +57 -0
  59. package/packs/ai-engineering/skills/agent-incident-response/manifest.json +55 -0
  60. package/packs/ai-engineering/skills/agent-incident-response/reference.md +152 -0
  61. package/packs/ai-engineering/skills/agent-incident-response/scripts/find_secret_exposure.py +239 -0
  62. package/packs/ai-engineering/skills/agent-incident-response/scripts/usage_split.py +194 -0
  63. package/packs/converters/skills/file-to-markdown/SKILL.md +2 -1
  64. package/packs/converters/skills/file-to-markdown/evals/eval_queries.json +4 -0
  65. package/packs/converters/skills/file-to-markdown/manifest.json +2 -2
  66. package/packs/converters/skills/file-to-markdown/scripts/to_markdown.py +253 -3
  67. package/packs/converters/skills/md-to-confluence/SKILL.md +139 -0
  68. package/packs/converters/skills/md-to-confluence/evals/eval_queries.json +42 -0
  69. package/packs/converters/skills/md-to-confluence/evals/evals.json +89 -0
  70. package/packs/converters/skills/md-to-confluence/evals/files/1/img/latency-dashboard.png +0 -0
  71. package/packs/converters/skills/md-to-confluence/evals/files/1/payments-runbook.md +60 -0
  72. package/packs/converters/skills/md-to-confluence/evals/files/2/deploy-checklist.md +33 -0
  73. package/packs/converters/skills/md-to-confluence/evals/files/3/img/after/screen.png +0 -0
  74. package/packs/converters/skills/md-to-confluence/evals/files/3/img/before/screen.png +0 -0
  75. package/packs/converters/skills/md-to-confluence/evals/files/3/release-notes-4.2.md +49 -0
  76. package/packs/converters/skills/md-to-confluence/evals/files/4/docs/img/topology.png +0 -0
  77. package/packs/converters/skills/md-to-confluence/evals/files/4/docs/ingest-pipeline-design.md +65 -0
  78. package/packs/converters/skills/md-to-confluence/evals/files/5/support/troubleshooting-sso.md +57 -0
  79. package/packs/converters/skills/md-to-confluence/examples/inputs/img/queue-depth.png +0 -0
  80. package/packs/converters/skills/md-to-confluence/examples/inputs/queue-runbook.fixed.md +21 -0
  81. package/packs/converters/skills/md-to-confluence/examples/inputs/queue-runbook.md +21 -0
  82. package/packs/converters/skills/md-to-confluence/examples/queue-runbook.md +57 -0
  83. package/packs/converters/skills/md-to-confluence/manifest.json +52 -0
  84. package/packs/converters/skills/md-to-confluence/reference.md +92 -0
  85. package/packs/converters/skills/md-to-confluence/scripts/md_to_confluence.py +821 -0
  86. package/packs/converters/skills/md-to-pptx/SKILL.md +131 -0
  87. package/packs/converters/skills/md-to-pptx/evals/eval_queries.json +12 -0
  88. package/packs/converters/skills/md-to-pptx/evals/evals.json +84 -0
  89. package/packs/converters/skills/md-to-pptx/evals/files/1/img/defect-burndown.png +0 -0
  90. package/packs/converters/skills/md-to-pptx/evals/files/1/status-report.md +75 -0
  91. package/packs/converters/skills/md-to-pptx/evals/files/3/brand.json +12 -0
  92. package/packs/converters/skills/md-to-pptx/evals/files/3/night-shift-induction.md +53 -0
  93. package/packs/converters/skills/md-to-pptx/evals/files/4/charts/ontime.png +0 -0
  94. package/packs/converters/skills/md-to-pptx/evals/files/4/qbr-q3.md +85 -0
  95. package/packs/converters/skills/md-to-pptx/evals/files/5/vendor-sync-notes.md +28 -0
  96. package/packs/converters/skills/md-to-pptx/examples/support-weekly-input.md +48 -0
  97. package/packs/converters/skills/md-to-pptx/examples/support-weekly.md +75 -0
  98. package/packs/converters/skills/md-to-pptx/examples/tickets-by-week.png +0 -0
  99. package/packs/converters/skills/md-to-pptx/manifest.json +49 -0
  100. package/packs/converters/skills/md-to-pptx/reference.md +139 -0
  101. package/packs/converters/skills/md-to-pptx/scripts/md_to_pptx.py +1841 -0
  102. package/packs/dev-team/loops/modernize/LOOP.md +124 -0
  103. package/packs/dev-team/loops/modernize/evals/eval_queries.json +9 -0
  104. package/packs/dev-team/loops/modernize/evals/evals.json +27 -0
  105. package/packs/dev-team/loops/modernize/loop.json +60 -0
  106. package/packs/dev-team/skills/behaviour-equivalence/SKILL.md +155 -0
  107. package/packs/dev-team/skills/behaviour-equivalence/evals/eval_queries.json +11 -0
  108. package/packs/dev-team/skills/behaviour-equivalence/evals/evals.json +76 -0
  109. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/cases.jsonl +12 -0
  110. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/new.jsonl +12 -0
  111. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/notes.md +15 -0
  112. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/old.jsonl +12 -0
  113. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/old_rerun.jsonl +12 -0
  114. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/pricing_v1.py +45 -0
  115. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/pricing_v2.py +65 -0
  116. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/rules.json +10 -0
  117. package/packs/dev-team/skills/behaviour-equivalence/evals/files/3/diff-summary.txt +16 -0
  118. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/diff.txt +13 -0
  119. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/fee_calc_py2.py +16 -0
  120. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/fee_calc_py3.py +24 -0
  121. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/input.csv +13 -0
  122. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/new_output.csv +13 -0
  123. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/old_output.csv +13 -0
  124. package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/TEAM_NOTES.md +19 -0
  125. package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/normalisation.yaml +12 -0
  126. package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/new_run.jsonl +8 -0
  127. package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/old_run1.jsonl +8 -0
  128. package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/old_run2.jsonl +8 -0
  129. package/packs/dev-team/skills/behaviour-equivalence/examples/delivery-date.md +78 -0
  130. package/packs/dev-team/skills/behaviour-equivalence/manifest.json +33 -0
  131. package/packs/dev-team/skills/behaviour-equivalence/reference.md +97 -0
  132. package/packs/dev-team/skills/behaviour-equivalence/scripts/golden_diff.py +524 -0
  133. package/packs/dev-team/skills/behaviour-equivalence/templates/accepted.json +10 -0
  134. package/packs/dev-team/skills/behaviour-equivalence/templates/rules.json +7 -0
  135. package/packs/frontend/pack.json +55 -0
  136. package/packs/frontend/skills/rendering-strategy/SKILL.md +149 -0
  137. package/packs/frontend/skills/rendering-strategy/evals/eval_queries.json +38 -0
  138. package/packs/frontend/skills/rendering-strategy/evals/evals.json +77 -0
  139. package/packs/frontend/skills/rendering-strategy/evals/files/1/fernhill-app.md +40 -0
  140. package/packs/frontend/skills/rendering-strategy/evals/files/3/routes.md +33 -0
  141. package/packs/frontend/skills/rendering-strategy/evals/files/4/build-notes.txt +5 -0
  142. package/packs/frontend/skills/rendering-strategy/evals/files/4/nuxt.config.ts +19 -0
  143. package/packs/frontend/skills/rendering-strategy/evals/files/4/pages/recipes/[slug].vue +37 -0
  144. package/packs/frontend/skills/rendering-strategy/evals/files/4/routes.md +15 -0
  145. package/packs/frontend/skills/rendering-strategy/evals/files/5/routes.txt +18 -0
  146. package/packs/frontend/skills/rendering-strategy/evals/files/5/src/hooks.server.ts +14 -0
  147. package/packs/frontend/skills/rendering-strategy/evals/files/5/src/routes/(marketing)/pricing/+page.server.ts +10 -0
  148. package/packs/frontend/skills/rendering-strategy/evals/files/5/src/routes/+layout.server.ts +10 -0
  149. package/packs/frontend/skills/rendering-strategy/evals/files/5/svelte.config.js +10 -0
  150. package/packs/frontend/skills/rendering-strategy/evals/files/5/traffic.md +18 -0
  151. package/packs/frontend/skills/rendering-strategy/examples/saas-site.md +42 -0
  152. package/packs/frontend/skills/rendering-strategy/manifest.json +50 -0
  153. package/packs/frontend/skills/rendering-strategy/reference.md +116 -0
  154. package/packs/frontend/skills/rendering-strategy/scripts/render_load.py +181 -0
  155. package/packs/frontend/skills/web-performance-review/SKILL.md +106 -0
  156. package/packs/frontend/skills/web-performance-review/evals/eval_queries.json +38 -0
  157. package/packs/frontend/skills/web-performance-review/evals/evals.json +76 -0
  158. package/packs/frontend/skills/web-performance-review/evals/files/1/psi.json +1065 -0
  159. package/packs/frontend/skills/web-performance-review/evals/files/2/after.json +359 -0
  160. package/packs/frontend/skills/web-performance-review/evals/files/2/before.json +375 -0
  161. package/packs/frontend/skills/web-performance-review/evals/files/4/psi-pdp-mobile-2026-10-19.json +171 -0
  162. package/packs/frontend/skills/web-performance-review/evals/files/4/rum-inp-attribution-oct14-19.csv +6 -0
  163. package/packs/frontend/skills/web-performance-review/evals/files/4/rum-inp-daily.csv +15 -0
  164. package/packs/frontend/skills/web-performance-review/evals/files/5/crux-home-phone.json +35 -0
  165. package/packs/frontend/skills/web-performance-review/evals/files/5/lighthouse-home-mobile.json +173 -0
  166. package/packs/frontend/skills/web-performance-review/examples/quayside-article-lhr.json +480 -0
  167. package/packs/frontend/skills/web-performance-review/examples/quayside-article.md +103 -0
  168. package/packs/frontend/skills/web-performance-review/manifest.json +48 -0
  169. package/packs/frontend/skills/web-performance-review/reference.md +105 -0
  170. package/packs/frontend/skills/web-performance-review/scripts/lh_summary.py +743 -0
  171. package/packs/product-manager/skills/lean-canvas/SKILL.md +162 -0
  172. package/packs/product-manager/skills/lean-canvas/evals/eval_queries.json +42 -0
  173. package/packs/product-manager/skills/lean-canvas/evals/evals.json +82 -0
  174. package/packs/product-manager/skills/lean-canvas/evals/files/1/pawpass-notes.md +54 -0
  175. package/packs/product-manager/skills/lean-canvas/evals/files/3/lunchloop-pitch.md +30 -0
  176. package/packs/product-manager/skills/lean-canvas/evals/files/4/clubkit-notes.md +44 -0
  177. package/packs/product-manager/skills/lean-canvas/evals/files/5/cost-model.csv +5 -0
  178. package/packs/product-manager/skills/lean-canvas/evals/files/5/proposal.md +40 -0
  179. package/packs/product-manager/skills/lean-canvas/evals/files/5/stakeholder-emails.txt +18 -0
  180. package/packs/product-manager/skills/lean-canvas/examples/bike-repair.md +72 -0
  181. package/packs/product-manager/skills/lean-canvas/manifest.json +34 -0
  182. package/packs/product-manager/skills/lean-canvas/reference.md +102 -0
  183. package/packs/product-manager/skills/lean-canvas/scripts/unit_economics.py +211 -0
  184. package/packs/solution-architect/skills/api-contract-draft/SKILL.md +2 -2
  185. package/packs/solution-architect/skills/api-contract-draft/manifest.json +28 -6
  186. package/packs/solution-architect/skills/event-contract-draft/SKILL.md +167 -0
  187. package/packs/solution-architect/skills/event-contract-draft/evals/eval_queries.json +38 -0
  188. package/packs/solution-architect/skills/event-contract-draft/evals/evals.json +76 -0
  189. package/packs/solution-architect/skills/event-contract-draft/evals/files/1/order-events-brief.md +45 -0
  190. package/packs/solution-architect/skills/event-contract-draft/evals/files/4/NOTES.md +23 -0
  191. package/packs/solution-architect/skills/event-contract-draft/evals/files/4/schemas/shipment-update.json +40 -0
  192. package/packs/solution-architect/skills/event-contract-draft/evals/files/5/invoice.example.json +25 -0
  193. package/packs/solution-architect/skills/event-contract-draft/examples/order-service.asyncapi.json +246 -0
  194. package/packs/solution-architect/skills/event-contract-draft/examples/order-service.md +92 -0
  195. package/packs/solution-architect/skills/event-contract-draft/manifest.json +25 -0
  196. package/packs/solution-architect/skills/event-contract-draft/reference.md +113 -0
  197. package/packs/solution-architect/skills/event-contract-draft/scripts/check_asyncapi.py +502 -0
  198. package/packs/solution-architect/skills/event-contract-draft/templates/asyncapi-skeleton.json +144 -0
  199. package/packs/sre-oncall/skills/slo-spec/SKILL.md +161 -0
  200. package/packs/sre-oncall/skills/slo-spec/evals/eval_queries.json +38 -0
  201. package/packs/sre-oncall/skills/slo-spec/evals/evals.json +75 -0
  202. package/packs/sre-oncall/skills/slo-spec/evals/files/1/order-service.md +51 -0
  203. package/packs/sre-oncall/skills/slo-spec/evals/files/3/search-slo-status.md +30 -0
  204. package/packs/sre-oncall/skills/slo-spec/evals/files/4/alerts/payments-api.rules.yaml +16 -0
  205. package/packs/sre-oncall/skills/slo-spec/evals/files/4/docs/dependencies.md +8 -0
  206. package/packs/sre-oncall/skills/slo-spec/evals/files/4/metrics/summary-90d.md +51 -0
  207. package/packs/sre-oncall/skills/slo-spec/evals/files/5/ops-notes.md +34 -0
  208. package/packs/sre-oncall/skills/slo-spec/examples/ticket-booking.md +88 -0
  209. package/packs/sre-oncall/skills/slo-spec/manifest.json +34 -0
  210. package/packs/sre-oncall/skills/slo-spec/reference.md +113 -0
  211. package/packs/sre-oncall/skills/slo-spec/scripts/slo_math.py +449 -0
  212. package/packs/sre-oncall/skills/slo-spec/templates/slo-spec.md +35 -0
@@ -0,0 +1,173 @@
1
+ {
2
+ "lighthouseVersion": "12.2.1",
3
+ "requestedUrl": "https://www.quillstack.example/",
4
+ "finalDisplayedUrl": "https://www.quillstack.example/",
5
+ "fetchTime": "2026-10-16T14:03:27.512Z",
6
+ "userAgent": "Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Mobile Safari/537.36",
7
+ "configSettings": {
8
+ "formFactor": "mobile",
9
+ "throttlingMethod": "simulate",
10
+ "throttling": { "rttMs": 150, "throughputKbps": 1638.4, "cpuSlowdownMultiplier": 4 },
11
+ "screenEmulation": { "mobile": true, "width": 412, "height": 823, "deviceScaleFactor": 1.75 },
12
+ "onlyCategories": ["performance"]
13
+ },
14
+ "categories": {
15
+ "performance": { "id": "performance", "title": "Performance", "score": 0.68 }
16
+ },
17
+ "audits": {
18
+ "first-contentful-paint": { "id": "first-contentful-paint", "score": 0.72, "numericValue": 2400, "displayValue": "2.4 s" },
19
+ "speed-index": { "id": "speed-index", "score": 0.8, "numericValue": 3900, "displayValue": "3.9 s" },
20
+ "largest-contentful-paint": { "id": "largest-contentful-paint", "score": 0.48, "numericValue": 4100, "displayValue": "4.1 s" },
21
+ "total-blocking-time": { "id": "total-blocking-time", "score": 0.72, "numericValue": 380, "displayValue": "380 ms" },
22
+ "cumulative-layout-shift": { "id": "cumulative-layout-shift", "score": 0.78, "numericValue": 0.14, "displayValue": "0.14" },
23
+ "interactive": { "id": "interactive", "score": 0.61, "numericValue": 6200, "displayValue": "6.2 s" },
24
+ "largest-contentful-paint-element": {
25
+ "id": "largest-contentful-paint-element",
26
+ "score": 0,
27
+ "displayValue": "4,100 ms",
28
+ "details": {
29
+ "type": "list",
30
+ "items": [
31
+ {
32
+ "type": "table",
33
+ "headings": [{ "key": "node", "valueType": "node", "label": "Element" }],
34
+ "items": [
35
+ { "node": { "type": "node", "selector": "section.hero > h1", "nodeLabel": "Ship releases your team trusts" } }
36
+ ]
37
+ },
38
+ {
39
+ "type": "table",
40
+ "headings": [
41
+ { "key": "phase", "valueType": "text", "label": "Phase" },
42
+ { "key": "timing", "valueType": "ms", "label": "Timing" }
43
+ ],
44
+ "items": [
45
+ { "phase": "TTFB", "timing": 540 },
46
+ { "phase": "Load Delay", "timing": 0 },
47
+ { "phase": "Load Time", "timing": 0 },
48
+ { "phase": "Render Delay", "timing": 3560 }
49
+ ]
50
+ }
51
+ ]
52
+ }
53
+ },
54
+ "layout-shifts": {
55
+ "id": "layout-shifts",
56
+ "score": 0,
57
+ "displayValue": "3 layout shifts found",
58
+ "details": {
59
+ "type": "table",
60
+ "headings": [
61
+ { "key": "node", "valueType": "node", "label": "Element", "subItemsHeading": { "key": "extra" } },
62
+ { "key": "score", "valueType": "numeric", "label": "Layout shift score", "subItemsHeading": { "key": "cause", "valueType": "text" } }
63
+ ],
64
+ "items": [
65
+ {
66
+ "node": { "type": "node", "selector": "body > main#content", "nodeLabel": "Ship releases your team trusts Quillstack runs your release checks…" },
67
+ "score": 0.091,
68
+ "subItems": {
69
+ "type": "subitems",
70
+ "items": [
71
+ { "extra": { "type": "url", "value": "https://cdn.tallyconsent.example/v2/banner.js" }, "cause": "A late network request adjusted the page layout" }
72
+ ]
73
+ }
74
+ },
75
+ {
76
+ "node": { "type": "node", "selector": "section.hero > h1", "nodeLabel": "Ship releases your team trusts" },
77
+ "score": 0.038,
78
+ "subItems": {
79
+ "type": "subitems",
80
+ "items": [
81
+ { "extra": { "type": "url", "value": "https://www.quillstack.example/fonts/northwind-sans-bold.woff2" }, "cause": "Web font loaded" }
82
+ ]
83
+ }
84
+ },
85
+ {
86
+ "node": { "type": "node", "selector": "section.social-proof > ul.logo-strip", "nodeLabel": "Trusted by teams at Brightmoor, Oakhaven Labs, Pellucid" },
87
+ "score": 0.011,
88
+ "subItems": {
89
+ "type": "subitems",
90
+ "items": [
91
+ { "extra": { "type": "node", "selector": "ul.logo-strip > li > img.logo-brightmoor", "nodeLabel": "Brightmoor logo" }, "cause": "Unsized image element" }
92
+ ]
93
+ }
94
+ }
95
+ ]
96
+ }
97
+ },
98
+ "font-display": {
99
+ "id": "font-display",
100
+ "title": "All text remains visible during webfont loads",
101
+ "score": 1,
102
+ "details": { "type": "table", "items": [] }
103
+ },
104
+ "unsized-images": {
105
+ "id": "unsized-images",
106
+ "score": 0,
107
+ "details": {
108
+ "type": "table",
109
+ "items": [
110
+ { "url": "https://www.quillstack.example/img/logos/brightmoor.svg", "node": { "type": "node", "selector": "ul.logo-strip > li > img.logo-brightmoor", "nodeLabel": "Brightmoor logo" } }
111
+ ]
112
+ }
113
+ },
114
+ "render-blocking-resources": {
115
+ "id": "render-blocking-resources",
116
+ "score": 0,
117
+ "displayValue": "Potential savings of 620 ms",
118
+ "metricSavings": { "FCP": 620, "LCP": 620 },
119
+ "details": {
120
+ "type": "opportunity",
121
+ "overallSavingsMs": 620,
122
+ "items": [
123
+ { "url": "https://www.quillstack.example/_next/static/css/app-8d21.css", "totalBytes": 61440, "wastedMs": 470 },
124
+ { "url": "https://cdn.tallyconsent.example/v2/banner.css", "totalBytes": 14336, "wastedMs": 150 }
125
+ ]
126
+ }
127
+ },
128
+ "unused-javascript": {
129
+ "id": "unused-javascript",
130
+ "score": 0,
131
+ "displayValue": "Potential savings of 412 KiB",
132
+ "metricSavings": { "FCP": 900, "LCP": 1050 },
133
+ "details": {
134
+ "type": "opportunity",
135
+ "overallSavingsMs": 1900,
136
+ "overallSavingsBytes": 421888,
137
+ "items": [
138
+ { "url": "https://www.quillstack.example/_next/static/chunks/pages/index-c41d.js", "totalBytes": 229376, "wastedBytes": 151552, "wastedPercent": 66.1 },
139
+ { "url": "https://www.quillstack.example/_next/static/chunks/framework-3f9a.js", "totalBytes": 196608, "wastedBytes": 118784, "wastedPercent": 60.4 },
140
+ { "url": "https://js.pulsemetrics.example/tag.js", "totalBytes": 122880, "wastedBytes": 86016, "wastedPercent": 70.0 },
141
+ { "url": "https://cdn.tallyconsent.example/v2/banner.js", "totalBytes": 102400, "wastedBytes": 65536, "wastedPercent": 64.0 }
142
+ ]
143
+ }
144
+ },
145
+ "third-party-summary": {
146
+ "id": "third-party-summary",
147
+ "score": 0,
148
+ "displayValue": "Third-party code blocked the main thread for 200 ms",
149
+ "details": {
150
+ "type": "table",
151
+ "summary": { "wastedBytes": 239616, "wastedMs": 200 },
152
+ "items": [
153
+ { "entity": "TallyConsent", "transferSize": 116736, "mainThreadTime": 340, "blockingTime": 110 },
154
+ { "entity": "PulseMetrics", "transferSize": 122880, "mainThreadTime": 290, "blockingTime": 90 }
155
+ ]
156
+ }
157
+ },
158
+ "long-tasks": {
159
+ "id": "long-tasks",
160
+ "score": 1,
161
+ "displayValue": "4 long tasks found",
162
+ "details": {
163
+ "type": "table",
164
+ "items": [
165
+ { "url": "https://www.quillstack.example/_next/static/chunks/framework-3f9a.js", "startTime": 2510, "duration": 168 },
166
+ { "url": "https://cdn.tallyconsent.example/v2/banner.js", "startTime": 3020, "duration": 160 },
167
+ { "url": "https://js.pulsemetrics.example/tag.js", "startTime": 3480, "duration": 140 },
168
+ { "url": "https://www.quillstack.example/_next/static/chunks/pages/index-c41d.js", "startTime": 4150, "duration": 112 }
169
+ ]
170
+ }
171
+ }
172
+ }
173
+ }
@@ -0,0 +1,480 @@
1
+ {
2
+ "lighthouseVersion": "12.6.1",
3
+ "requestedUrl": "https://news.quayside.example/2026/10/harbour-bridge-reopens",
4
+ "mainDocumentUrl": "https://news.quayside.example/2026/10/harbour-bridge-reopens",
5
+ "finalDisplayedUrl": "https://news.quayside.example/2026/10/harbour-bridge-reopens",
6
+ "finalUrl": "https://news.quayside.example/2026/10/harbour-bridge-reopens",
7
+ "fetchTime": "2026-10-15T07:30:44.018Z",
8
+ "gatherMode": "navigation",
9
+ "runWarnings": [],
10
+ "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/141.0.0.0 Safari/537.36",
11
+ "environment": {
12
+ "networkUserAgent": "Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36 Chrome-Lighthouse",
13
+ "hostUserAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/141.0.0.0 Safari/537.36",
14
+ "benchmarkIndex": 1488.0
15
+ },
16
+ "configSettings": {
17
+ "output": [
18
+ "json"
19
+ ],
20
+ "maxWaitForFcp": 30000,
21
+ "maxWaitForLoad": 45000,
22
+ "pauseAfterFcpMs": 1000,
23
+ "pauseAfterLoadMs": 1000,
24
+ "networkQuietThresholdMs": 1000,
25
+ "cpuQuietThresholdMs": 1000,
26
+ "formFactor": "mobile",
27
+ "throttling": {
28
+ "rttMs": 150,
29
+ "throughputKbps": 1638.4,
30
+ "requestLatencyMs": 562.5,
31
+ "downloadThroughputKbps": 1474.5600000000002,
32
+ "uploadThroughputKbps": 675,
33
+ "cpuSlowdownMultiplier": 4
34
+ },
35
+ "throttlingMethod": "simulate",
36
+ "screenEmulation": {
37
+ "mobile": true,
38
+ "width": 412,
39
+ "height": 823,
40
+ "deviceScaleFactor": 1.75,
41
+ "disabled": false
42
+ },
43
+ "emulatedUserAgent": "Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
44
+ "onlyCategories": [
45
+ "performance"
46
+ ],
47
+ "channel": "cli"
48
+ },
49
+ "categories": {
50
+ "performance": {
51
+ "id": "performance",
52
+ "title": "Performance",
53
+ "score": 0.78,
54
+ "auditRefs": [
55
+ {
56
+ "id": "first-contentful-paint",
57
+ "weight": 10,
58
+ "group": "metrics",
59
+ "acronym": "FCP"
60
+ },
61
+ {
62
+ "id": "largest-contentful-paint",
63
+ "weight": 25,
64
+ "group": "metrics",
65
+ "acronym": "LCP"
66
+ },
67
+ {
68
+ "id": "total-blocking-time",
69
+ "weight": 30,
70
+ "group": "metrics",
71
+ "acronym": "TBT"
72
+ },
73
+ {
74
+ "id": "cumulative-layout-shift",
75
+ "weight": 25,
76
+ "group": "metrics",
77
+ "acronym": "CLS"
78
+ },
79
+ {
80
+ "id": "speed-index",
81
+ "weight": 10,
82
+ "group": "metrics",
83
+ "acronym": "SI"
84
+ }
85
+ ]
86
+ }
87
+ },
88
+ "audits": {
89
+ "first-contentful-paint": {
90
+ "id": "first-contentful-paint",
91
+ "title": "First Contentful Paint",
92
+ "score": 0.83,
93
+ "scoreDisplayMode": "numeric",
94
+ "numericValue": 2050,
95
+ "numericUnit": "millisecond",
96
+ "displayValue": "2.1 s"
97
+ },
98
+ "largest-contentful-paint": {
99
+ "id": "largest-contentful-paint",
100
+ "title": "Largest Contentful Paint",
101
+ "score": 0.72,
102
+ "scoreDisplayMode": "numeric",
103
+ "numericValue": 3120,
104
+ "numericUnit": "millisecond",
105
+ "displayValue": "3.1 s"
106
+ },
107
+ "total-blocking-time": {
108
+ "id": "total-blocking-time",
109
+ "title": "Total Blocking Time",
110
+ "score": 0.95,
111
+ "scoreDisplayMode": "numeric",
112
+ "numericValue": 140,
113
+ "numericUnit": "millisecond",
114
+ "displayValue": "140 ms"
115
+ },
116
+ "cumulative-layout-shift": {
117
+ "id": "cumulative-layout-shift",
118
+ "title": "Cumulative Layout Shift",
119
+ "score": 0.56,
120
+ "scoreDisplayMode": "numeric",
121
+ "numericValue": 0.2204,
122
+ "numericUnit": "unitless",
123
+ "displayValue": "0.22"
124
+ },
125
+ "speed-index": {
126
+ "id": "speed-index",
127
+ "title": "Speed Index",
128
+ "score": 0.9,
129
+ "scoreDisplayMode": "numeric",
130
+ "numericValue": 3310,
131
+ "numericUnit": "millisecond",
132
+ "displayValue": "3.3 s"
133
+ },
134
+ "server-response-time": {
135
+ "id": "server-response-time",
136
+ "title": "Reduce initial server response time",
137
+ "score": 0,
138
+ "scoreDisplayMode": "metricSavings",
139
+ "numericValue": 1420,
140
+ "numericUnit": "millisecond",
141
+ "displayValue": "Root document took 1,420 ms",
142
+ "metricSavings": {
143
+ "FCP": 1320,
144
+ "LCP": 1320
145
+ },
146
+ "details": {
147
+ "type": "opportunity",
148
+ "headings": [
149
+ {
150
+ "key": "url",
151
+ "valueType": "url"
152
+ },
153
+ {
154
+ "key": "responseTime",
155
+ "valueType": "timespanMs"
156
+ }
157
+ ],
158
+ "items": [
159
+ {
160
+ "url": "https://news.quayside.example/2026/10/harbour-bridge-reopens",
161
+ "responseTime": 1420
162
+ }
163
+ ],
164
+ "overallSavingsMs": 1320
165
+ }
166
+ },
167
+ "largest-contentful-paint-element": {
168
+ "id": "largest-contentful-paint-element",
169
+ "title": "Largest Contentful Paint element",
170
+ "score": 0,
171
+ "scoreDisplayMode": "metricSavings",
172
+ "displayValue": "3,120 ms",
173
+ "metricSavings": {
174
+ "LCP": 620
175
+ },
176
+ "details": {
177
+ "type": "list",
178
+ "items": [
179
+ {
180
+ "type": "table",
181
+ "headings": [
182
+ {
183
+ "key": "node",
184
+ "valueType": "node",
185
+ "label": "Element"
186
+ }
187
+ ],
188
+ "items": [
189
+ {
190
+ "node": {
191
+ "type": "node",
192
+ "lhId": "1-22-IMG",
193
+ "path": "1,HTML,1,BODY,2,DIV,0,ARTICLE,1,FIGURE,0,IMG",
194
+ "selector": "article > figure.article-lead > img.article-lead__image",
195
+ "nodeLabel": "Traffic crossing the reopened Harbour Bridge at dawn",
196
+ "snippet": "<img class=\"article-lead__image\" src=\"https://img.quayside.example/2026/10/bridge-1200.webp\" alt=\"Traffic crossing the reopened Harbour Bridge at dawn\" fetchpriority=\"high\">"
197
+ }
198
+ }
199
+ ]
200
+ },
201
+ {
202
+ "type": "table",
203
+ "headings": [
204
+ {
205
+ "key": "phase",
206
+ "valueType": "text",
207
+ "label": "Phase"
208
+ },
209
+ {
210
+ "key": "percent",
211
+ "valueType": "text",
212
+ "label": "% of LCP"
213
+ },
214
+ {
215
+ "key": "timing",
216
+ "valueType": "ms",
217
+ "label": "Timing"
218
+ }
219
+ ],
220
+ "items": [
221
+ {
222
+ "phase": "TTFB",
223
+ "timing": 1650,
224
+ "percent": "53%"
225
+ },
226
+ {
227
+ "phase": "Load Delay",
228
+ "timing": 180,
229
+ "percent": "6%"
230
+ },
231
+ {
232
+ "phase": "Load Time",
233
+ "timing": 820,
234
+ "percent": "26%"
235
+ },
236
+ {
237
+ "phase": "Render Delay",
238
+ "timing": 470,
239
+ "percent": "15%"
240
+ }
241
+ ]
242
+ }
243
+ ]
244
+ }
245
+ },
246
+ "layout-shifts": {
247
+ "id": "layout-shifts",
248
+ "title": "Avoid large layout shifts",
249
+ "score": 0,
250
+ "scoreDisplayMode": "metricSavings",
251
+ "metricSavings": {
252
+ "CLS": 0.22
253
+ },
254
+ "displayValue": "2 layout shifts found",
255
+ "details": {
256
+ "type": "table",
257
+ "headings": [
258
+ {
259
+ "key": "node",
260
+ "valueType": "node"
261
+ },
262
+ {
263
+ "key": "score",
264
+ "valueType": "numeric"
265
+ }
266
+ ],
267
+ "items": [
268
+ {
269
+ "node": {
270
+ "type": "node",
271
+ "lhId": "1-18-DIV",
272
+ "path": "1,HTML,1,BODY,1,DIV",
273
+ "selector": "body > div.ad-slot.ad-slot--top",
274
+ "nodeLabel": "Advertisement",
275
+ "snippet": "<div class=\"ad-slot ad-slot--top\" id=\"ad-top\">"
276
+ },
277
+ "score": 0.1503,
278
+ "subItems": {
279
+ "type": "subitems",
280
+ "items": [
281
+ {
282
+ "extra": {
283
+ "type": "url",
284
+ "value": "https://ads.adharbor.example/serve/frame.html"
285
+ },
286
+ "cause": "Injected iframe"
287
+ }
288
+ ]
289
+ }
290
+ },
291
+ {
292
+ "node": {
293
+ "type": "node",
294
+ "lhId": "1-22-IMG",
295
+ "path": "1,HTML,1,BODY,2,DIV,0,ARTICLE,1,FIGURE,0,IMG",
296
+ "selector": "article > figure.article-lead > img.article-lead__image",
297
+ "nodeLabel": "Traffic crossing the reopened Harbour Bridge at dawn",
298
+ "snippet": "<img class=\"article-lead__image\" src=\"https://img.quayside.example/2026/10/bridge-1200.webp\" alt=\"Traffic crossing the reopened Harbour Bridge at dawn\" fetchpriority=\"high\">"
299
+ },
300
+ "score": 0.0701,
301
+ "subItems": {
302
+ "type": "subitems",
303
+ "items": [
304
+ {
305
+ "extra": {
306
+ "type": "url",
307
+ "value": "https://img.quayside.example/2026/10/bridge-1200.webp"
308
+ },
309
+ "cause": "Unsized image element"
310
+ }
311
+ ]
312
+ }
313
+ }
314
+ ]
315
+ }
316
+ },
317
+ "unsized-images": {
318
+ "id": "unsized-images",
319
+ "title": "Image elements do not have explicit width and height",
320
+ "score": 0,
321
+ "scoreDisplayMode": "metricSavings",
322
+ "metricSavings": {
323
+ "CLS": 0
324
+ },
325
+ "details": {
326
+ "type": "table",
327
+ "headings": [
328
+ {
329
+ "key": "node",
330
+ "valueType": "node"
331
+ },
332
+ {
333
+ "key": "url",
334
+ "valueType": "url"
335
+ }
336
+ ],
337
+ "items": [
338
+ {
339
+ "node": {
340
+ "type": "node",
341
+ "lhId": "1-22-IMG",
342
+ "path": "1,HTML,1,BODY,2,DIV,0,ARTICLE,1,FIGURE,0,IMG",
343
+ "selector": "article > figure.article-lead > img.article-lead__image",
344
+ "nodeLabel": "Traffic crossing the reopened Harbour Bridge at dawn",
345
+ "snippet": "<img class=\"article-lead__image\" src=\"https://img.quayside.example/2026/10/bridge-1200.webp\" alt=\"Traffic crossing the reopened Harbour Bridge at dawn\" fetchpriority=\"high\">"
346
+ },
347
+ "url": "https://img.quayside.example/2026/10/bridge-1200.webp"
348
+ }
349
+ ]
350
+ }
351
+ },
352
+ "unused-css-rules": {
353
+ "id": "unused-css-rules",
354
+ "title": "Reduce unused CSS",
355
+ "score": 0.5,
356
+ "scoreDisplayMode": "metricSavings",
357
+ "displayValue": "Est savings of 69 KiB",
358
+ "metricSavings": {
359
+ "FCP": 150,
360
+ "LCP": 150
361
+ },
362
+ "details": {
363
+ "type": "opportunity",
364
+ "headings": [
365
+ {
366
+ "key": "url",
367
+ "valueType": "url"
368
+ },
369
+ {
370
+ "key": "totalBytes",
371
+ "valueType": "bytes"
372
+ },
373
+ {
374
+ "key": "wastedBytes",
375
+ "valueType": "bytes"
376
+ }
377
+ ],
378
+ "items": [
379
+ {
380
+ "url": "https://news.quayside.example/assets/site.css",
381
+ "totalBytes": 92000,
382
+ "wastedBytes": 71000,
383
+ "wastedPercent": 77.2
384
+ }
385
+ ],
386
+ "overallSavingsMs": 150,
387
+ "overallSavingsBytes": 71000
388
+ }
389
+ },
390
+ "long-tasks": {
391
+ "id": "long-tasks",
392
+ "title": "Avoid long main-thread tasks",
393
+ "score": 1,
394
+ "scoreDisplayMode": "informative",
395
+ "displayValue": "2 long tasks found",
396
+ "details": {
397
+ "type": "table",
398
+ "headings": [
399
+ {
400
+ "key": "url",
401
+ "valueType": "url"
402
+ },
403
+ {
404
+ "key": "startTime",
405
+ "valueType": "ms"
406
+ },
407
+ {
408
+ "key": "duration",
409
+ "valueType": "ms"
410
+ }
411
+ ],
412
+ "items": [
413
+ {
414
+ "url": "https://cdn.adharbor.example/hb/v5/adharbor.js",
415
+ "duration": 140,
416
+ "startTime": 2600
417
+ },
418
+ {
419
+ "url": "https://news.quayside.example/assets/article.js",
420
+ "duration": 74,
421
+ "startTime": 2210
422
+ }
423
+ ]
424
+ }
425
+ },
426
+ "third-party-summary": {
427
+ "id": "third-party-summary",
428
+ "title": "Reduce the impact of third-party code",
429
+ "score": 1,
430
+ "scoreDisplayMode": "metricSavings",
431
+ "metricSavings": {
432
+ "TBT": 90
433
+ },
434
+ "details": {
435
+ "type": "table",
436
+ "headings": [
437
+ {
438
+ "key": "entity",
439
+ "valueType": "text"
440
+ },
441
+ {
442
+ "key": "mainThreadTime",
443
+ "valueType": "ms"
444
+ },
445
+ {
446
+ "key": "blockingTime",
447
+ "valueType": "ms"
448
+ }
449
+ ],
450
+ "items": [
451
+ {
452
+ "entity": "AdHarbor",
453
+ "mainThreadTime": 380,
454
+ "blockingTime": 90,
455
+ "transferSize": 310000
456
+ }
457
+ ]
458
+ }
459
+ }
460
+ },
461
+ "entities": [
462
+ {
463
+ "name": "quayside.example",
464
+ "origins": [
465
+ "https://news.quayside.example",
466
+ "https://img.quayside.example"
467
+ ],
468
+ "isFirstParty": true,
469
+ "isUnrecognized": true
470
+ },
471
+ {
472
+ "name": "AdHarbor",
473
+ "origins": [
474
+ "https://cdn.adharbor.example",
475
+ "https://ads.adharbor.example"
476
+ ],
477
+ "isFirstParty": false
478
+ }
479
+ ]
480
+ }