shakapacker 8.4.0 → 9.7.0

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 (265) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/commands/address-review.md +206 -0
  3. data/.claude/commands/update-changelog.md +354 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +6 -9
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +6 -8
  6. data/.github/STATUS.md +1 -0
  7. data/.github/actionlint-matcher.json +17 -0
  8. data/.github/workflows/claude-code-review.yml +45 -0
  9. data/.github/workflows/claude.yml +55 -0
  10. data/.github/workflows/dummy.yml +18 -5
  11. data/.github/workflows/eslint-validation.yml +46 -0
  12. data/.github/workflows/generator.yml +38 -22
  13. data/.github/workflows/node.yml +116 -2
  14. data/.github/workflows/ruby.yml +57 -15
  15. data/.github/workflows/test-bundlers.yml +180 -0
  16. data/.gitignore +27 -0
  17. data/.husky/pre-commit +2 -0
  18. data/.npmignore +56 -0
  19. data/.prettierignore +7 -0
  20. data/.rubocop.yml +2 -0
  21. data/.yalcignore +26 -0
  22. data/CHANGELOG.md +487 -19
  23. data/CLAUDE.md +63 -0
  24. data/CONTRIBUTING.md +268 -21
  25. data/ESLINT_TECHNICAL_DEBT.md +165 -0
  26. data/README.md +497 -137
  27. data/Rakefile +44 -4
  28. data/TODO.md +58 -0
  29. data/TODO_v9.md +97 -0
  30. data/bin/conductor-exec +24 -0
  31. data/bin/shakapacker-config +11 -0
  32. data/conductor-setup.sh +147 -0
  33. data/conductor.json +9 -0
  34. data/docs/api-reference.md +519 -0
  35. data/docs/cdn_setup.md +384 -0
  36. data/docs/common-upgrades.md +695 -0
  37. data/docs/configuration.md +845 -0
  38. data/docs/css-modules-export-mode.md +566 -0
  39. data/docs/customizing_babel_config.md +16 -16
  40. data/docs/deployment.md +78 -7
  41. data/docs/developing_shakapacker.md +6 -0
  42. data/docs/early_hints.md +433 -0
  43. data/docs/early_hints_manual_api.md +454 -0
  44. data/docs/feature_testing.md +492 -0
  45. data/docs/node_package_api.md +70 -0
  46. data/docs/optional-peer-dependencies.md +203 -0
  47. data/docs/peer-dependencies.md +71 -0
  48. data/docs/precompile_hook.md +486 -0
  49. data/docs/preventing_fouc.md +132 -0
  50. data/docs/react.md +58 -48
  51. data/docs/releasing.md +288 -0
  52. data/docs/rspack.md +218 -0
  53. data/docs/rspack_migration_guide.md +862 -0
  54. data/docs/sprockets.md +1 -0
  55. data/docs/style_loader_vs_mini_css.md +12 -12
  56. data/docs/subresource_integrity.md +13 -7
  57. data/docs/transpiler-migration.md +212 -0
  58. data/docs/transpiler-performance.md +200 -0
  59. data/docs/troubleshooting.md +272 -24
  60. data/docs/typescript-migration.md +388 -0
  61. data/docs/typescript.md +103 -0
  62. data/docs/using_esbuild_loader.md +12 -12
  63. data/docs/using_swc_loader.md +121 -16
  64. data/docs/v6_upgrade.md +42 -19
  65. data/docs/v7_upgrade.md +8 -6
  66. data/docs/v8_upgrade.md +13 -12
  67. data/docs/v9_upgrade.md +616 -0
  68. data/eslint.config.fast.js +254 -0
  69. data/eslint.config.js +309 -0
  70. data/jest.config.js +8 -1
  71. data/knip.ts +61 -0
  72. data/lib/install/bin/shakapacker +4 -6
  73. data/lib/install/bin/shakapacker-config +11 -0
  74. data/lib/install/bin/shakapacker-dev-server +1 -1
  75. data/lib/install/binstubs.rb +6 -2
  76. data/lib/install/config/rspack/rspack.config.js +6 -0
  77. data/lib/install/config/rspack/rspack.config.ts +7 -0
  78. data/lib/install/config/shakapacker.yml +75 -12
  79. data/lib/install/config/webpack/webpack.config.ts +7 -0
  80. data/lib/install/package.json +38 -0
  81. data/lib/install/template.rb +207 -45
  82. data/lib/shakapacker/build_config_loader.rb +147 -0
  83. data/lib/shakapacker/bundler_switcher.rb +415 -0
  84. data/lib/shakapacker/compiler.rb +87 -0
  85. data/lib/shakapacker/configuration.rb +475 -6
  86. data/lib/shakapacker/dev_server.rb +88 -1
  87. data/lib/shakapacker/dev_server_runner.rb +240 -6
  88. data/lib/shakapacker/doctor.rb +1191 -0
  89. data/lib/shakapacker/env.rb +19 -3
  90. data/lib/shakapacker/helper.rb +411 -14
  91. data/lib/shakapacker/install/env.rb +33 -0
  92. data/lib/shakapacker/instance.rb +93 -4
  93. data/lib/shakapacker/manifest.rb +167 -30
  94. data/lib/shakapacker/railtie.rb +4 -0
  95. data/lib/shakapacker/rspack_runner.rb +19 -0
  96. data/lib/shakapacker/runner.rb +668 -9
  97. data/lib/shakapacker/swc_migrator.rb +384 -0
  98. data/lib/shakapacker/utils/manager.rb +2 -0
  99. data/lib/shakapacker/utils/version_syntax_converter.rb +1 -1
  100. data/lib/shakapacker/version.rb +1 -1
  101. data/lib/shakapacker/version_checker.rb +1 -1
  102. data/lib/shakapacker/webpack_runner.rb +4 -42
  103. data/lib/shakapacker.rb +159 -1
  104. data/lib/tasks/shakapacker/binstubs.rake +4 -2
  105. data/lib/tasks/shakapacker/check_binstubs.rake +2 -2
  106. data/lib/tasks/shakapacker/doctor.rake +48 -0
  107. data/lib/tasks/shakapacker/export_bundler_config.rake +68 -0
  108. data/lib/tasks/shakapacker/install.rake +16 -4
  109. data/lib/tasks/shakapacker/migrate_to_swc.rake +13 -0
  110. data/lib/tasks/shakapacker/switch_bundler.rake +72 -0
  111. data/lib/tasks/shakapacker.rake +2 -0
  112. data/package/.npmignore +4 -0
  113. data/package/babel/preset.ts +59 -0
  114. data/package/config.ts +189 -0
  115. data/package/configExporter/buildValidator.ts +906 -0
  116. data/package/configExporter/cli.ts +1748 -0
  117. data/package/configExporter/configDocs.ts +102 -0
  118. data/package/configExporter/configFile.ts +663 -0
  119. data/package/configExporter/fileWriter.ts +112 -0
  120. data/package/configExporter/index.ts +15 -0
  121. data/package/configExporter/types.ts +159 -0
  122. data/package/configExporter/yamlSerializer.ts +391 -0
  123. data/package/dev_server.ts +27 -0
  124. data/package/env.ts +92 -0
  125. data/package/environments/__type-tests__/rspack-plugin-compatibility.ts +36 -0
  126. data/package/environments/base.ts +147 -0
  127. data/package/environments/development.ts +88 -0
  128. data/package/environments/production.ts +82 -0
  129. data/package/environments/test.ts +55 -0
  130. data/package/environments/types.ts +98 -0
  131. data/package/esbuild/index.ts +40 -0
  132. data/package/index.d.ts +68 -93
  133. data/package/index.d.ts.template +72 -0
  134. data/package/index.ts +104 -0
  135. data/package/loaders.d.ts +28 -0
  136. data/package/optimization/rspack.ts +36 -0
  137. data/package/optimization/webpack.ts +55 -0
  138. data/package/plugins/envFilter.ts +82 -0
  139. data/package/plugins/rspack.ts +119 -0
  140. data/package/plugins/webpack.ts +82 -0
  141. data/package/rspack/index.ts +91 -0
  142. data/package/rules/{babel.js → babel.ts} +2 -2
  143. data/package/rules/{coffee.js → coffee.ts} +1 -1
  144. data/package/rules/css.ts +3 -0
  145. data/package/rules/{erb.js → erb.ts} +1 -1
  146. data/package/rules/esbuild.ts +10 -0
  147. data/package/rules/file.ts +41 -0
  148. data/package/rules/{jscommon.js → jscommon.ts} +5 -4
  149. data/package/rules/{less.js → less.ts} +4 -4
  150. data/package/rules/raw.ts +28 -0
  151. data/package/rules/rspack.ts +174 -0
  152. data/package/rules/sass.ts +21 -0
  153. data/package/rules/{stylus.js → stylus.ts} +4 -8
  154. data/package/rules/swc.ts +10 -0
  155. data/package/rules/{index.js → webpack.ts} +1 -2
  156. data/package/swc/index.ts +54 -0
  157. data/package/types/README.md +90 -0
  158. data/package/types/index.ts +69 -0
  159. data/package/types.ts +105 -0
  160. data/package/utils/bundlerUtils.ts +232 -0
  161. data/package/utils/configPath.ts +6 -0
  162. data/package/utils/debug.ts +45 -0
  163. data/package/utils/defaultConfigPath.ts +7 -0
  164. data/package/utils/ensureManifestExists.ts +17 -0
  165. data/package/utils/errorCodes.ts +249 -0
  166. data/package/utils/errorHelpers.ts +152 -0
  167. data/package/utils/getStyleRule.ts +75 -0
  168. data/package/utils/helpers.ts +99 -0
  169. data/package/utils/{inliningCss.js → inliningCss.ts} +3 -3
  170. data/package/utils/pathValidation.ts +207 -0
  171. data/package/utils/requireOrError.ts +24 -0
  172. data/package/utils/snakeToCamelCase.ts +5 -0
  173. data/package/utils/typeGuards.ts +388 -0
  174. data/package/utils/validateDependencies.ts +61 -0
  175. data/package/webpack-types.d.ts +33 -0
  176. data/package/webpackDevServerConfig.ts +130 -0
  177. data/package.json +157 -18
  178. data/scripts/remove-use-strict.js +44 -0
  179. data/scripts/type-check-no-emit.js +27 -0
  180. data/shakapacker.gemspec +4 -2
  181. data/sig/shakapacker/commands.rbs +35 -0
  182. data/sig/shakapacker/compiler.rbs +65 -0
  183. data/sig/shakapacker/compiler_strategy.rbs +41 -0
  184. data/sig/shakapacker/configuration.rbs +140 -0
  185. data/sig/shakapacker/dev_server.rbs +56 -0
  186. data/sig/shakapacker/env.rbs +25 -0
  187. data/sig/shakapacker/helper.rbs +98 -0
  188. data/sig/shakapacker/instance.rbs +46 -0
  189. data/sig/shakapacker/manifest.rbs +69 -0
  190. data/sig/shakapacker/version.rbs +4 -0
  191. data/sig/shakapacker.rbs +66 -0
  192. data/test/configExporter/buildValidator.test.js +1295 -0
  193. data/test/configExporter/configFile.test.js +393 -0
  194. data/test/configExporter/integration.test.js +262 -0
  195. data/test/helpers.js +1 -1
  196. data/test/package/bundlerUtils.rspack.test.js +145 -0
  197. data/test/package/bundlerUtils.test.js +97 -0
  198. data/test/package/config.test.js +14 -0
  199. data/test/package/configExporter/cli.test.js +440 -0
  200. data/test/package/configExporter/types.test.js +163 -0
  201. data/test/package/configExporter.test.js +491 -0
  202. data/test/package/env.test.js +42 -7
  203. data/test/package/environments/base.test.js +14 -4
  204. data/test/package/helpers.test.js +2 -2
  205. data/test/package/plugins/envFiltering.test.js +453 -0
  206. data/test/package/plugins/webpackSubresourceIntegrity.test.js +89 -0
  207. data/test/package/rspack/index.test.js +293 -0
  208. data/test/package/rspack/optimization.test.js +86 -0
  209. data/test/package/rspack/plugins.test.js +185 -0
  210. data/test/package/rspack/rules.test.js +229 -0
  211. data/test/package/rules/babel.test.js +65 -38
  212. data/test/package/rules/esbuild.test.js +13 -4
  213. data/test/package/rules/file.test.js +7 -1
  214. data/test/package/rules/raw.test.js +40 -7
  215. data/test/package/rules/sass-version-parsing.test.js +71 -0
  216. data/test/package/rules/sass.test.js +11 -6
  217. data/test/package/rules/sass1.test.js +8 -5
  218. data/test/package/rules/sass16.test.js +24 -0
  219. data/test/package/rules/swc.test.js +50 -39
  220. data/test/package/rules/webpack.test.js +35 -0
  221. data/test/package/staging.test.js +4 -3
  222. data/test/package/transpiler-defaults.test.js +169 -0
  223. data/test/package/utils/ensureManifestExists.test.js +51 -0
  224. data/test/package/yamlSerializer.test.js +204 -0
  225. data/test/peer-dependencies.sh +85 -0
  226. data/test/resolver.js +34 -3
  227. data/test/scripts/remove-use-strict.test.js +125 -0
  228. data/test/typescript/build.test.js +118 -0
  229. data/test/typescript/environments.test.js +107 -0
  230. data/test/typescript/pathValidation.test.js +186 -0
  231. data/test/typescript/requireOrError.test.js +49 -0
  232. data/test/typescript/securityValidation.test.js +182 -0
  233. data/tools/README.md +134 -0
  234. data/tools/css-modules-v9-codemod.js +179 -0
  235. data/tsconfig.eslint.json +9 -0
  236. data/tsconfig.json +38 -0
  237. data/yarn.lock +3202 -1097
  238. metadata +212 -44
  239. data/.eslintignore +0 -4
  240. data/.eslintrc.js +0 -36
  241. data/Gemfile.lock +0 -251
  242. data/package/babel/preset.js +0 -48
  243. data/package/config.js +0 -56
  244. data/package/dev_server.js +0 -23
  245. data/package/env.js +0 -48
  246. data/package/environments/base.js +0 -171
  247. data/package/environments/development.js +0 -13
  248. data/package/environments/production.js +0 -88
  249. data/package/environments/test.js +0 -3
  250. data/package/esbuild/index.js +0 -40
  251. data/package/index.js +0 -40
  252. data/package/rules/css.js +0 -3
  253. data/package/rules/esbuild.js +0 -10
  254. data/package/rules/file.js +0 -29
  255. data/package/rules/raw.js +0 -5
  256. data/package/rules/sass.js +0 -18
  257. data/package/rules/swc.js +0 -10
  258. data/package/swc/index.js +0 -50
  259. data/package/utils/configPath.js +0 -4
  260. data/package/utils/defaultConfigPath.js +0 -2
  261. data/package/utils/getStyleRule.js +0 -40
  262. data/package/utils/helpers.js +0 -62
  263. data/package/utils/snakeToCamelCase.js +0 -5
  264. data/package/webpackDevServerConfig.js +0 -71
  265. data/test/package/rules/index.test.js +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6ccbba3c39a550ae683e13c45e3ac4f79733ae6ffebabf2d6ab55f37b7427d99
4
- data.tar.gz: 569998bb9475e8ed2b8ba786d1ccdf2b84d562d61ba8ef78d08ad195c3ea2230
3
+ metadata.gz: 518eb8673a021c5e18507ebc14ba593128288ddb9f735390581bd998d1f33715
4
+ data.tar.gz: 3c2c532321d8c79e4374fbbe0854319d6ebd89df33557e21a4ce6e4ec322cc7c
5
5
  SHA512:
6
- metadata.gz: 2c529d5f970394ca40b79d7ac1ddb430c197cbd508bf533195f13d81937cca872232436bcb92c5a8f38eafc9968ef0d1a82c280120545e421d143dcf72d12f0c
7
- data.tar.gz: b341f56e92124b2418b56483dab20374aee03fca5de1e946e5b09ce1f2ca7d0daa16c47ed365a90f51a8f5bdf55235dbe9107cf95dc0a3b9b00e19056f72f343
6
+ metadata.gz: 26414fbf14fe2d835262ee5a6d2b46a9e50c76eee0391a0d859b60ee60f8899a87fa0e8c9d39aa651a8eadecb37639cd9684e775dd2004a55f83bb1f8aa4647e
7
+ data.tar.gz: 13f248afecdaa3ef579a20f7abf7ed592db788c2e5aa6b119a4940429b1e3c6f0bae263b985abe78e6ed0217116c6eeb9483c252f3a38bddd33e1c6e4533cc2c
@@ -0,0 +1,206 @@
1
+ ---
2
+ description: Fetch GitHub PR review comments, triage them, create todos for must-fix items, reply to comments, and resolve addressed threads
3
+ ---
4
+
5
+ Fetch review comments from a GitHub PR in this repository, triage them, and create a todo list only for items worth addressing.
6
+
7
+ # Instructions
8
+
9
+ ## Step 1: Determine the Repository
10
+
11
+ ```bash
12
+ REPO=$(gh repo view --json nameWithOwner -q .nameWithOwner)
13
+ ```
14
+
15
+ If this command fails, ensure `gh` CLI is installed and authenticated (`gh auth status`).
16
+
17
+ ## Step 2: Parse User Input
18
+
19
+ Extract the PR number and optional review/comment ID from the user's message:
20
+
21
+ **Supported formats:**
22
+
23
+ - PR number only: `12345`
24
+ - PR URL: `https://github.com/org/repo/pull/12345`
25
+ - Specific PR review: `https://github.com/org/repo/pull/12345#pullrequestreview-123456789`
26
+ - Specific issue comment: `https://github.com/org/repo/pull/12345#issuecomment-123456789`
27
+
28
+ **URL parsing:**
29
+
30
+ - Extract org/repo from URL path: `github.com/{org}/{repo}/pull/{PR_NUMBER}`
31
+ - Extract fragment ID after `#` (e.g., `pullrequestreview-123456789` → `123456789`)
32
+ - If a full GitHub URL is provided, use the org/repo from the URL instead of the current repo
33
+
34
+ ## Step 3: Fetch Review Comments
35
+
36
+ **If a specific issue comment ID is provided (`#issuecomment-...`):**
37
+
38
+ ```bash
39
+ gh api repos/${REPO}/issues/comments/{COMMENT_ID} | jq '{body: .body, user: .user.login, html_url: .html_url}'
40
+ ```
41
+
42
+ **If a specific review ID is provided (`#pullrequestreview-...`):**
43
+
44
+ ```bash
45
+ gh api repos/${REPO}/pulls/{PR_NUMBER}/reviews/{REVIEW_ID}/comments | jq '[.[] | {id: .id, path: .path, body: .body, line: .line, start_line: .start_line, user: .user.login}]'
46
+ ```
47
+
48
+ **If only PR number is provided (fetch all PR review comments):**
49
+
50
+ ```bash
51
+ gh api repos/${REPO}/pulls/{PR_NUMBER}/comments | jq '[.[] | {id: .id, path: .path, body: .body, line: .line, start_line: .start_line, user: .user.login, in_reply_to_id: .in_reply_to_id}]'
52
+ ```
53
+
54
+ **Filtering comments:**
55
+
56
+ - Skip comments where `in_reply_to_id` is set (these are replies, not top-level comments)
57
+ - Do not skip bot-generated comments by default. Many actionable review comments in this repository come from bots.
58
+ - Deduplicate repeated bot comments and skip bot status posts, summaries, and acknowledgments that do not require a code or documentation change
59
+ - Treat as actionable by default only: correctness bugs, regressions, missing tests, and clear inconsistencies with adjacent code
60
+ - Treat as non-actionable by default: style nits, speculative suggestions, changelog wording, duplicate bot comments, and "could consider" feedback unless the user explicitly asks for polish work
61
+ - Focus on actionable feedback, not acknowledgments or thank-you messages
62
+
63
+ **Error handling:**
64
+
65
+ - If the API returns 404, the PR/comment doesn't exist - inform the user
66
+ - If the API returns 403, check authentication with `gh auth status`
67
+ - If the response is empty, inform the user no review comments were found
68
+
69
+ ## Step 4: Triage Comments
70
+
71
+ Before creating any todos, classify every review comment into one of three categories:
72
+
73
+ - `MUST-FIX`: correctness bugs, regressions, security issues, missing tests that could hide a real bug, and clear inconsistencies with adjacent code that would likely block merge
74
+ - `DISCUSS`: reasonable suggestions that expand scope, architectural opinions that are not clearly right or wrong, and comments where the reviewer claim may be correct but needs a user decision
75
+ - `SKIPPED`: style preferences, documentation nits, comment requests, test-shape preferences, speculative suggestions, changelog wording, duplicate comments, status posts, summaries, and factually incorrect suggestions
76
+
77
+ Triage rules:
78
+
79
+ - Deduplicate overlapping comments before classifying them. Keep one representative item for the underlying issue.
80
+ - Verify factual claims locally before classifying a comment as `MUST-FIX`.
81
+ - If a claim appears wrong, classify it as `SKIPPED` and note briefly why.
82
+ - Preserve the original review comment ID and thread ID when available so the command can reply to the correct place and resolve the correct thread later.
83
+
84
+ ## Step 5: Create Todo List
85
+
86
+ Create a todo list with TodoWrite containing **only the `MUST-FIX` items**:
87
+
88
+ - One todo per must-fix comment or deduplicated issue
89
+ - For file-specific comments: `"{file}:{line} - {comment_summary} (@{username})"` (content)
90
+ - For general comments: Parse the comment body and extract the must-fix action
91
+ - Format activeForm: `"Addressing {brief description}"`
92
+ - All todos should start with status: `"pending"`
93
+
94
+ ## Step 6: Present Triage to User
95
+
96
+ Present the triage to the user - **DO NOT automatically start addressing items**:
97
+
98
+ - `MUST-FIX ({count})`: list the todos created
99
+ - `DISCUSS ({count})`: list items needing user choice, with a short reason
100
+ - `SKIPPED ({count})`: list skipped comments with a short reason, including duplicates and factually incorrect suggestions
101
+ - Wait for the user to tell you which items to address
102
+ - Always offer an explicit optional follow-up to post rationale replies on selected `SKIPPED` or declined `DISCUSS` items
103
+ - Never post those rationale replies unless the user explicitly selects which items to reply to
104
+ - Ask two things when relevant:
105
+ - Which items to address in code/tests/docs
106
+ - Which skipped/declined items (if any) should receive a rationale reply
107
+
108
+ ## Step 7: Address Items, Reply, and Resolve
109
+
110
+ When addressing items, after completing each selected todo item, reply to the original review comment explaining how it was addressed.
111
+ If the user selects skipped/declined items for rationale replies, post those replies too.
112
+
113
+ **For issue comments (general PR comments):**
114
+
115
+ ```bash
116
+ gh api repos/${REPO}/issues/{PR_NUMBER}/comments -X POST -f body="<response>"
117
+ ```
118
+
119
+ **For PR review comments (file-specific, replying to a thread):**
120
+
121
+ ```bash
122
+ gh api repos/${REPO}/pulls/{PR_NUMBER}/comments/{COMMENT_ID}/replies -X POST -f body="<response>"
123
+ ```
124
+
125
+ **For standalone review comments (not in a thread):**
126
+
127
+ ```bash
128
+ gh api repos/${REPO}/pulls/{PR_NUMBER}/comments -X POST -f body="<response>" -f commit_id="<COMMIT_SHA>" -f path="<FILE_PATH>" -f line=<LINE_NUMBER> -f side="RIGHT"
129
+ ```
130
+
131
+ Note: `side` is required when using `line`. Use `"RIGHT"` for the PR commit side (most common) or `"LEFT"` for the base commit side.
132
+
133
+ The response should briefly explain:
134
+
135
+ - What was changed
136
+ - Which commit(s) contain the fix
137
+ - Any relevant details or decisions made
138
+
139
+ After posting the reply, resolve the review thread when all of the following are true:
140
+
141
+ - The comment belongs to a review thread and you have the thread ID
142
+ - The concern was actually addressed in code, tests, or documentation, or it was explicitly declined with a clear explanation approved by the user
143
+ - The thread is not already resolved
144
+
145
+ Use GitHub GraphQL to resolve the thread:
146
+
147
+ ```bash
148
+ gh api graphql -f query='mutation($threadId:ID!) { resolveReviewThread(input:{threadId:$threadId}) { thread { id isResolved } } }' -f threadId="<THREAD_ID>"
149
+ ```
150
+
151
+ Do not resolve a thread if the fix is still pending, if you are unsure whether the reviewer concern is satisfied, or if the user asked to leave the thread open.
152
+
153
+ If the user explicitly asks to close out a `DISCUSS` or `SKIPPED` item, reply with the rationale and resolve the thread only when the conversation is actually complete.
154
+
155
+ # Example Usage
156
+
157
+ ```text
158
+ /address-review https://github.com/org/repo/pull/12345#pullrequestreview-123456789
159
+ /address-review https://github.com/org/repo/pull/12345#issuecomment-123456789
160
+ /address-review 12345
161
+ /address-review https://github.com/org/repo/pull/12345
162
+ ```
163
+
164
+ # Example Output
165
+
166
+ After fetching and triaging comments, present them like this:
167
+
168
+ ```text
169
+ Found 5 review comments. Triage:
170
+
171
+ MUST-FIX (1):
172
+ 1. ⬜ src/helper.rb:45 - Missing nil guard causes a crash on empty input (@reviewer1)
173
+
174
+ DISCUSS (1):
175
+ 2. src/config.rb:12 - Extract this to a shared config constant (@reviewer1)
176
+ Reason: reasonable suggestion, but it expands scope
177
+
178
+ SKIPPED (3):
179
+ 3. src/helper.rb:50 - "Consider adding a comment" (@claude[bot]) - documentation nit
180
+ 4. src/helper.rb:45 - Same nil guard issue (@greptile-apps[bot]) - duplicate of #1
181
+ 5. spec/helper_spec.rb:20 - "Consolidate assertions" (@claude[bot]) - test style preference
182
+
183
+ Which items would you like me to address? (e.g., "1", "1,2", or "all must-fix")
184
+ Optional: I can also post rationale replies for skipped/declined items (e.g., "reply 3,5" or "reply all skipped").
185
+ ```
186
+
187
+ # Important Notes
188
+
189
+ - Automatically detect the repository using `gh repo view` for the current working directory
190
+ - If a GitHub URL is provided, extract the org/repo from the URL
191
+ - Include file path and line number in each todo for easy navigation (when available)
192
+ - Include the reviewer's username in the todo text
193
+ - If a comment doesn't have a specific line number, note it as "general comment"
194
+ - **NEVER automatically address all review comments** - always wait for user direction
195
+ - When given a specific review URL, no need to ask for more information
196
+ - **ALWAYS reply to comments after addressing them** to close the feedback loop
197
+ - After triage, always offer to post rationale replies for selected `SKIPPED`/declined items, but only post them with explicit user approval
198
+ - Resolve the review thread after replying when the concern is actually addressed and a thread ID is available
199
+ - Default to real issues only. Do not spend a review cycle on optional polish unless the user explicitly asks for it
200
+ - Triage comments before creating todos. Only `MUST-FIX` items should become todos by default
201
+ - For large review comments (like detailed code reviews), parse and extract the actionable items into separate todos
202
+
203
+ # Known Limitations
204
+
205
+ - Rate limiting: GitHub API has rate limits; if you hit them, wait a few minutes
206
+ - Private repos: Requires appropriate `gh` authentication scope
@@ -0,0 +1,354 @@
1
+ # Update Changelog
2
+
3
+ You are helping to add an entry to the CHANGELOG.md file for the Shakapacker project.
4
+
5
+ ## Arguments
6
+
7
+ This command accepts an optional argument: `$ARGUMENTS`
8
+
9
+ - **No argument** (`/update-changelog`): Add entries to `[Unreleased]` without stamping a version header. Use this during development.
10
+ - **`release`** (`/update-changelog release`): Add entries and stamp a version header. Auto-compute the next version based on changes (breaking → major, added features → minor, fixes → patch). Then `rake release` (with no args) will pick up this version automatically.
11
+ - **`rc`** (`/update-changelog rc`): Same as `release`, but stamps an RC prerelease version (e.g., `v9.7.0-rc.0`). Auto-increments the RC index if prior RCs exist for the same base version.
12
+ - **`beta`** (`/update-changelog beta`): Same as `rc`, but stamps a beta prerelease version (e.g., `v9.7.0-beta.0`).
13
+ - **Explicit version** (`/update-changelog 9.7.0-rc.10` or `/update-changelog v9.7.0-rc.10`): Add entries and stamp the exact version provided. Skips auto-computation — use this when you already know the target version. The version string must use npm semver format with optional `-rc.N` or `-beta.N` suffix (e.g., `9.7.0-rc.10`, `9.7.0`). A `v` prefix is optional and will be added automatically if missing. If passed in RubyGems dot format (e.g., `9.7.0.rc.10` or `9.7.0.beta.2`), convert to npm semver dash format (`v9.7.0-rc.10` or `v9.7.0-beta.2`) for the changelog header.
14
+
15
+ ## When to Use This
16
+
17
+ This command serves three use cases at different points in the release lifecycle:
18
+
19
+ **During development** — Add entries to `[Unreleased]` as PRs merge:
20
+
21
+ - Run `/update-changelog` to find merged PRs missing from the changelog
22
+ - Entries accumulate under `## [Unreleased]`
23
+
24
+ **Before a release** — Stamp a version header and prepare for release:
25
+
26
+ - Run `/update-changelog release` (or `rc` or `beta`) to add entries AND stamp the version header
27
+ - The version is auto-computed from changelog content (see "Auto-Computing the Next Version" below)
28
+ - Commit and push CHANGELOG.md
29
+ - Then run `rake release` (no args needed — it reads the version from CHANGELOG.md)
30
+ - The release task automatically creates a GitHub release from the changelog section
31
+
32
+ **After a release you forgot to update the changelog for** — Catch-up mode:
33
+
34
+ - The command can retroactively find commits between tags and add missing entries
35
+ - Ask the user whether to stamp a version header or add to `[Unreleased]`
36
+
37
+ ### Why changelog comes BEFORE the release
38
+
39
+ - `release` automatically creates a GitHub release if a changelog section exists — no separate `sync_github_release` step needed
40
+ - The release task warns if no changelog section is found for the target version
41
+ - A premature version header (if release fails) is harmless — you'll release eventually
42
+ - A missing changelog after release means GitHub release must be created manually
43
+
44
+ ## Auto-Computing the Next Version
45
+
46
+ When stamping a version header (`release`, `rc`, or `beta`), compute the next version as follows:
47
+
48
+ 1. **Find the latest stable version tag** using semver sort:
49
+
50
+ ```bash
51
+ git tag -l 'v*' --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -1
52
+ ```
53
+
54
+ 2. **Determine bump type from changelog content**:
55
+ - If changes include `### Breaking Changes` or `### ⚠️ Breaking Changes` → **major** bump
56
+ - If changes include `### Added` or `### New Features` → **minor** bump
57
+ - If changes only include `### Fixed`, `### Security`, `### Improved`, `### Changed`, `### Deprecated` → **patch** bump
58
+
59
+ 3. **Compute the version**:
60
+ - For `release`: Apply the bump to the latest stable tag (e.g., `9.5.0` + minor → `9.6.0`)
61
+ - For `rc`: Apply the bump, then find the next RC index based **only on git tags** (e.g., if `v9.6.0-rc.0` tag exists → `v9.6.0-rc.1`). **Do NOT use changelog headers** to determine the next index — a version header in the changelog is a draft that may not have been released yet. Only git tags represent shipped versions.
62
+ - For `beta`: Same as RC but with beta suffix
63
+
64
+ 4. **Verify**: Check that the computed version is newer than ALL existing tags (stable and prerelease). If not, ask the user what to do.
65
+
66
+ 5. **Show the computed version to the user and ask for confirmation** before stamping the header. If the bump type is ambiguous (e.g., changes could reasonably be classified as patch vs minor, or the changelog headings don't clearly signal the bump level), explain your reasoning for the suggested bump and ask the user to confirm or override before proceeding.
67
+
68
+ ## Critical Requirements
69
+
70
+ 1. **User-visible changes only**: Only add changelog entries for user-visible changes:
71
+ - New features
72
+ - Bug fixes
73
+ - Breaking changes
74
+ - Deprecations
75
+ - Performance improvements
76
+ - Security fixes
77
+ - Changes to public APIs or configuration options
78
+
79
+ 2. **Do NOT add entries for**:
80
+ - Linting fixes
81
+ - Code formatting
82
+ - Internal refactoring
83
+ - Test updates
84
+ - Documentation fixes (unless they fix incorrect docs about behavior)
85
+ - CI/CD changes
86
+
87
+ ## Formatting Requirements
88
+
89
+ ### Entry Format
90
+
91
+ Each changelog entry MUST follow this exact format:
92
+
93
+ ```markdown
94
+ - **Bold description of change**. [PR #123](https://github.com/shakacode/shakapacker/pull/123) by [username](https://github.com/username). Optional additional context or details.
95
+ ```
96
+
97
+ **Important formatting rules**:
98
+
99
+ - Start with a dash and space: `- `
100
+ - Use **bold** for the main description
101
+ - End the bold description with a period before the link
102
+ - Always link to the PR: `[PR #123](https://github.com/shakacode/shakapacker/pull/123)` - **Note: Shakapacker uses `#` in PR links, unlike React on Rails**
103
+ - Always link to the author: `by [username](https://github.com/username)`
104
+ - End with a period after the author link
105
+ - Additional details can be added after the main entry, using proper indentation for multi-line entries
106
+
107
+ ### Breaking Changes Format
108
+
109
+ For breaking changes, use this format:
110
+
111
+ ```markdown
112
+ - **Breaking**: Description of the breaking change. See [Migration Guide](docs/vX_upgrade.md) for migration instructions. [PR #123](https://github.com/shakacode/shakapacker/pull/123) by [username](https://github.com/username).
113
+ ```
114
+
115
+ ### Category Organization
116
+
117
+ Entries should be organized under these section headings. The project uses both standard and custom headings:
118
+
119
+ **Standard headings** (from keepachangelog.com) - use these for most changes:
120
+
121
+ - `### Added` - New features
122
+ - `### Changed` - Changes to existing functionality
123
+ - `### Deprecated` - Deprecation notices
124
+ - `### Removed` - Removed features
125
+ - `### Fixed` - Bug fixes
126
+ - `### Security` - Security-related changes
127
+ - `### Improved` - Improvements to existing features
128
+
129
+ **Custom headings** (project-specific) - use sparingly when standard headings don't fit:
130
+
131
+ - `### ⚠️ Breaking Changes` - Breaking changes only (Shakapacker uses emoji in heading)
132
+ - `### API Improvements` - API changes and improvements
133
+ - `### Developer Experience` - Developer workflow improvements
134
+ - `### Performance` - Performance improvements
135
+
136
+ **Prefer standard headings.** Only use custom headings when the change needs more specific categorization.
137
+
138
+ **Only include section headings that have entries.**
139
+
140
+ ### Version Header Format
141
+
142
+ **Stable releases**: `## [v9.6.0] - March 7, 2026`
143
+
144
+ **Prerelease versions** (RC and beta): Use npm semver format with dashes, NOT RubyGems dot format:
145
+
146
+ - Correct: `## [v9.6.0-rc.1]` (npm semver — this is what `sync_github_release` expects)
147
+ - Wrong: `## [v9.6.0.rc.1]` (RubyGems format — do NOT use this in CHANGELOG.md headers)
148
+
149
+ This matters because the release rake tasks convert between formats:
150
+
151
+ - Git tags use npm format: `v9.6.0-rc.1`
152
+ - Gem versions use RubyGems format: `9.6.0.rc.1`
153
+ - CHANGELOG.md headers must match git tag format: `## [v9.6.0-rc.1]`
154
+
155
+ ### Version Management
156
+
157
+ After adding entries, use the rake task to manage version headers:
158
+
159
+ ```bash
160
+ bundle exec rake update_changelog
161
+ ```
162
+
163
+ This will:
164
+
165
+ - Add headers for the new version
166
+ - Update version diff links at the bottom of the file
167
+
168
+ ### Version Links
169
+
170
+ After adding an entry to the `## [Unreleased]` section, ensure the version diff links at the bottom of the file are correct.
171
+
172
+ **IMPORTANT**: Compare links at the bottom MUST use the `v` prefix to match git tags (e.g., `.../compare/v9.2.0...v9.3.0`). This is consistent with Shakapacker's changelog headers which also include the `v` prefix (e.g., `## [v9.3.0]`).
173
+
174
+ The format at the bottom should be:
175
+
176
+ ```markdown
177
+ [Unreleased]: https://github.com/shakacode/shakapacker/compare/v9.3.0...main
178
+ [v9.3.0]: https://github.com/shakacode/shakapacker/compare/v9.2.0...v9.3.0
179
+ ```
180
+
181
+ When a new version is released:
182
+
183
+ 1. Change `[Unreleased]` heading to `## [vX.Y.Z] - Month Day, Year`
184
+ 2. Add a new `## [Unreleased]` section at the top
185
+ 3. Update the `[Unreleased]` link to compare from the new version
186
+ 4. Add a new version link for the released version
187
+
188
+ ## Process
189
+
190
+ ### For Regular Changelog Updates
191
+
192
+ #### Step 1: Fetch and read current state
193
+
194
+ - **CRITICAL**: Run `git fetch origin main --tags` to ensure you have the latest commits AND tags
195
+ - The workspace may be behind origin/main, causing you to miss recently merged PRs
196
+ - After fetching, use `origin/main` for all comparisons, NOT local `main` branch
197
+ - Read the current CHANGELOG.md to understand the existing structure
198
+
199
+ #### Step 2: Reconcile tags with changelog sections (DO THIS FIRST)
200
+
201
+ **This step catches missing version sections and is the #1 source of errors when skipped.**
202
+
203
+ 1. Get the latest git tag: `git tag -l 'v*' --sort=-v:refname | head -5`
204
+ 2. Get the most recent version header in CHANGELOG.md (the first `## [vVERSION]` after `## [Unreleased]`)
205
+ 3. **Compare them.** If the latest git tag does NOT appear anywhere in the changelog version headers, there are tagged releases missing from the changelog. **Important**: Don't just compare against the _top_ changelog header — a version header may exist _above_ the latest tag if it was stamped as a draft before tagging. Check whether the tag's version appears in _any_ `## [vX.Y.Z]` header. For example:
206
+ - Latest tag: `v9.6.0-rc.4`, and no `## [v9.6.0-rc.4]` header exists anywhere in CHANGELOG.md
207
+ - **Result: `v9.6.0-rc.4` is missing and needs its own section**
208
+ - But if `## [v9.7.0-rc.0]` is the top header (a draft, not yet tagged) and `## [v9.6.0-rc.4]` exists below it, then nothing is missing — the top header is simply a pre-release draft
209
+
210
+ 4. For EACH missing tagged version (there may be multiple):
211
+ a. Find commits in that tag vs the previous tag: `git log --oneline PREV_TAG..MISSING_TAG`
212
+ b. Extract PR numbers and fetch details for user-visible changes
213
+ c. Check which entries currently in `## [Unreleased]` actually belong to this tagged version (compare PR numbers against the commit list)
214
+ d. **Create a new version section** immediately before the previous version section
215
+ e. **Move** matching entries from Unreleased into the new section
216
+ f. **Add** any new entries for PRs in that tag that aren't in the changelog at all
217
+ g. **Update version diff links** at the bottom of the file
218
+
219
+ 5. Get the tag date with: `git log -1 --format="%Y-%m-%d" TAG_NAME`
220
+
221
+ #### Step 3: Add new entries for post-tag commits
222
+
223
+ 1. Run `git log --oneline LATEST_TAG..origin/main` to find commits after the latest tag (LATEST_TAG is the most recent git tag, i.e., the same one identified in Step 2)
224
+ 2. **Extract ALL PR numbers** from commit messages: `git log --oneline LATEST_TAG..origin/main | grep -oE "#[0-9]+" | sort -u`
225
+ 3. If Step 2 found no missing tagged versions, verify no tag is ahead of main: `git log --oneline origin/main..LATEST_TAG` should be empty. If not, entries in "Unreleased" may belong to that tagged version — Step 2 should have caught this, so re-check.
226
+ 4. For each PR number, check if it's already in CHANGELOG.md: `grep "PR #XXX" CHANGELOG.md`
227
+ 5. For PRs not yet in the changelog:
228
+ - Get PR details: `gh pr view NUMBER --json title,body,author --repo shakacode/shakapacker`
229
+ - **Never ask the user for PR details** — get them from git history or the GitHub API
230
+ - Validate that the change is user-visible (per the criteria above). Skip CI, lint, refactoring, test-only changes.
231
+ - Add the entry to `## [Unreleased]` under the appropriate category heading
232
+
233
+ #### Step 4: Stamp version header (only when a version mode or explicit version is given)
234
+
235
+ If the user passed `release`, `rc`, `beta`, or an explicit version string as an argument:
236
+
237
+ 1. Auto-compute the next version (see "Auto-Computing the Next Version" above), or use the explicit version provided
238
+ 2. Insert the version header immediately after `## [Unreleased]`
239
+ 3. For `rc`/`beta` or an explicit prerelease version (e.g., `9.7.0-rc.10`): collapse prior prerelease sections of the same base version into the new section
240
+ 4. Update version diff links at the bottom of the file
241
+ 5. **Verify** the computed version looks correct
242
+
243
+ If no argument was passed, skip this step — entries stay in `## [Unreleased]`.
244
+
245
+ #### Step 5: Verify and finalize
246
+
247
+ 1. **Verify formatting**:
248
+ - Bold description with period
249
+ - Proper PR link (with `#` prefix for Shakapacker)
250
+ - Proper author link
251
+ - Consistent with existing entries
252
+ - File ends with a newline character
253
+ - **No duplicate section headings** (e.g., don't create two `### Fixed` sections — merge entries into the existing heading)
254
+ 2. **Verify version sections are in order** (Unreleased → newest tag → older tags)
255
+ 3. **Verify version diff links** at the bottom of the file are correct (compare links MUST use the `v` prefix to match git tags)
256
+ 4. **Run linting** after making changes:
257
+
258
+ ```bash
259
+ yarn lint
260
+ ```
261
+
262
+ 5. **Show the user** a summary of what was done:
263
+ - Which version sections were created
264
+ - Which entries were moved from Unreleased
265
+ - Which new entries were added
266
+ - Which PRs were skipped (and why)
267
+ 6. If in `release`/`rc`/`beta` mode or explicit-version mode, **automatically commit, push, and open a PR**:
268
+ - Verify the working tree only has `CHANGELOG.md` changes; if there are other uncommitted changes, warn the user and stop
269
+ - Verify the current branch is `main` (`git branch --show-current`); if not, warn the user and stop
270
+ - Create a feature branch (e.g., `changelog-v9.6.0-rc.1`)
271
+ - Stage only `CHANGELOG.md` (`git add CHANGELOG.md`) and commit with message `Update CHANGELOG.md for vX.Y.Z` (using the stamped version)
272
+ - Push and open a PR with the changelog diff as the body
273
+ - If the push or PR creation fails, the CHANGELOG is already stamped locally — fix the issue and retry manually
274
+ - Remind the user to run `bundle exec rake release` (no args) after merge to publish and auto-create the GitHub release
275
+
276
+ ### For Prerelease Versions (RC and Beta)
277
+
278
+ When the user passes `rc` or `beta` as an argument (or when creating a prerelease section manually):
279
+
280
+ 1. **Find the latest tag** (stable or prerelease) using semver sort:
281
+
282
+ ```bash
283
+ git tag -l 'v*' --sort=-v:refname | head -10
284
+ ```
285
+
286
+ 2. **Auto-compute the next prerelease version** using the process in "Auto-Computing the Next Version" above.
287
+
288
+ 3. **Use npm semver format** for the version header:
289
+ - RC: `## [v9.6.0-rc.1]`
290
+ - Beta: `## [v9.6.0-beta.2]`
291
+
292
+ 4. **Always collapse prior prereleases into the current prerelease** (this is the default behavior):
293
+ - Combine all prior prerelease changelog entries into the new prerelease version section
294
+ - Remove previous prerelease version sections (e.g., remove `## [v9.6.0-rc.0]` when creating `## [v9.6.0-rc.1]`)
295
+ - When collapsing, **consolidate duplicate category headings** — if both the Unreleased section and a prior prerelease section have `### Fixed`, merge all entries under a single `### Fixed` heading
296
+ - **Remove orphaned version diff links** at the bottom of the file for collapsed prerelease sections
297
+ - Add any new user-visible changes from commits since the last prerelease
298
+ - Update version diff links to point from the last stable version to the new prerelease
299
+ - This keeps the changelog clean with a single prerelease section that accumulates all changes since the last stable release
300
+
301
+ **Note**: The new version header must be inserted **immediately after `## [Unreleased]`** (see Step 4). This ensures correct ordering of version headers.
302
+
303
+ ### For Prerelease to Stable Version Release
304
+
305
+ When releasing from prerelease to a stable version (e.g., v9.6.0-rc.1 → v9.6.0):
306
+
307
+ 1. **Remove all prerelease version labels** from the changelog:
308
+ - Change `## [v9.6.0-rc.0]`, `## [v9.6.0-rc.1]`, etc. to a single `## [v9.6.0]` section
309
+ - Also handle beta versions: `## [v9.6.0-beta.1]` etc.
310
+ - Combine all prerelease entries into the stable release section
311
+
312
+ 2. **Consolidate duplicate entries**:
313
+ - If bug fixes or changes were made to features introduced in earlier prereleases, keep only the final state
314
+ - Remove redundant changelog entries for fixes to prerelease features
315
+ - Keep the most recent/accurate description of each change
316
+
317
+ 3. **Update version diff links** at the bottom to point to the stable version
318
+
319
+ ## Examples
320
+
321
+ Run this command to see real formatting examples from the codebase:
322
+
323
+ ```bash
324
+ grep -A 3 "^### " CHANGELOG.md | head -30
325
+ ```
326
+
327
+ ### Good Entry Example
328
+
329
+ ```markdown
330
+ - **Enhanced error handling for better security and debugging**. [PR #786](https://github.com/shakacode/shakapacker/pull/786) by [justin808](https://github.com/justin808).
331
+ - Path validation now properly reports permission errors instead of silently handling them
332
+ - Module loading errors now include original error context for easier troubleshooting
333
+ - Improved security by only catching ENOENT errors in path resolution, rethrowing permission and access errors
334
+ ```
335
+
336
+ ### Entry with Sub-bullets Example
337
+
338
+ ```markdown
339
+ - **HTTP 103 Early Hints support** for faster asset loading. [PR #722](https://github.com/shakacode/shakapacker/pull/722) by [justin808](https://github.com/justin808). Automatically sends early hints when `early_hints: enabled: true` in `shakapacker.yml`. Works with `append_javascript_pack_tag`/`append_stylesheet_pack_tag`, supports per-controller/action configuration, and includes helpers like `configure_pack_early_hints` and `skip_send_pack_early_hints`. Requires Rails 5.2+ and HTTP/2-capable server. See [Early Hints Guide](docs/early_hints.md).
340
+ ```
341
+
342
+ ### Breaking Change Example
343
+
344
+ ```markdown
345
+ - **Breaking: SWC default configuration now uses `loose: false`**. [PR #658](https://github.com/shakacode/shakapacker/pull/658) by [justin808](https://github.com/justin808). See [v9 Upgrade Guide - SWC Loose Mode](./docs/v9_upgrade.md#swc-loose-mode-breaking-change-v910) for migration details.
346
+ ```
347
+
348
+ ## Additional Notes
349
+
350
+ - Keep descriptions concise but informative
351
+ - Focus on the "what" and "why", not the "how"
352
+ - Use past tense for the description
353
+ - Be consistent with existing formatting in the changelog
354
+ - Always ensure the file ends with a trailing newline
@@ -1,24 +1,21 @@
1
1
  ---
2
2
  name: Bug report
3
3
  about: Create a report for a crash or unexpected behavior.
4
- title: ''
4
+ title: ""
5
5
  labels: bug
6
- assignees: ''
7
-
6
+ assignees: ""
8
7
  ---
9
8
 
10
9
  _Notice: A bug is a crash or incorrect behavior. If you have a debugging or troubleshooting question, please open a discussion on the [Discussions Tab](https://github.com/shakacode/shakapacker/discussions). Otherwise, remove this line and fill out the following sections._
11
10
 
12
11
  ## Expected behavior:
13
12
 
14
-
15
13
  ## Actual behavior:
16
14
 
17
-
18
15
  ## Small, reproducible repo:
19
16
 
20
-
21
17
  ## Setup environment:
22
- - Ruby version:
23
- - Rails version:
24
- - Shakapacker version:
18
+
19
+ - Ruby version:
20
+ - Rails version:
21
+ - Shakapacker version:
@@ -1,21 +1,19 @@
1
1
  ---
2
2
  name: Feature request
3
3
  about: Create a request for new functionality
4
- title: ''
4
+ title: ""
5
5
  labels: enhancement
6
- assignees: ''
7
-
6
+ assignees: ""
8
7
  ---
9
8
 
10
9
  _Notice: A feature request describes a suggested improvement. If you have a debugging or troubleshooting question, please open a discussion on the [Discussions Tab](https://github.com/shakacode/shakapacker/discussions). Otherwise, remove this line and fill out the following sections._
11
10
 
12
11
  ## Desired behavior:
13
12
 
14
-
15
13
  ## Actual behavior:
16
14
 
17
-
18
15
  ## Setup environment:
19
- - Ruby version:
20
- - Rails version:
21
- - Shakapacker version:
16
+
17
+ - Ruby version:
18
+ - Rails version:
19
+ - Shakapacker version:
data/.github/STATUS.md ADDED
@@ -0,0 +1 @@
1
+ # CI Status Update
@@ -0,0 +1,17 @@
1
+ {
2
+ "problemMatcher": [
3
+ {
4
+ "owner": "actionlint",
5
+ "pattern": [
6
+ {
7
+ "regexp": "^(?:\\x1b\\[\\d+m)?(.+?)(?:\\x1b\\[\\d+m)*:(?:\\x1b\\[\\d+m)*(\\d+)(?:\\x1b\\[\\d+m)*:(?:\\x1b\\[\\d+m)*(\\d+)(?:\\x1b\\[\\d+m)*: (?:\\x1b\\[\\d+m)*(.+?)(?:\\x1b\\[\\d+m)* \\[(.+?)\\]$",
8
+ "file": 1,
9
+ "line": 2,
10
+ "column": 3,
11
+ "message": 4,
12
+ "code": 5
13
+ }
14
+ ]
15
+ }
16
+ ]
17
+ }