Pre-launch — Gluecron is in final validation. Public signups and git hosting for non-owner users open after launch review.
Commitb9968e3unknown_key

fix(types): lowercase form method attributes (batch 1: 18 errors cleared)

fix(types): lowercase form method attributes (batch 1: 18 errors cleared)

Pure type-only fix: JSX <form method="POST"|"GET"> now lowercase to satisfy
Hono/SolidJS HTMLAttributeFormMethod typing. Runtime behaviour preserved —
HTTP method tokens are case-insensitive per RFC 7230.

Note: touches locked files src/routes/admin.tsx (F3+I7), src/routes/auth.tsx,
src/routes/ai-explain.tsx (D6), src/routes/ai-changelog.tsx (D7),
src/routes/ai-tests.tsx (D8), src/routes/ask.tsx, src/routes/advisories.tsx
for type-only method-casing fix; runtime behaviour preserved (HTTP method
case-insensitive per RFC 7230).

https://claude.ai/code/session_0155D2jj2kJXaMEnyJhRpRLg
Claude committed on April 15, 2026Parent: 34e87e4
7 files changed+1818b9968e3e41ed16bb8a48d4dd7736ef217d961c74
7 changed files+18−18
Modifiedsrc/routes/admin.tsx+6−6View fileUnifiedSplit
184184 return c.html(
185185 <Layout title="Admin — Users" user={user}>
186186 <h2>Users</h2>
187 <form method="GET" action="/admin/users" style="margin-bottom:16px">
187 <form method="get" action="/admin/users" style="margin-bottom:16px">
188188 <input
189189 type="text"
190190 name="q"
221221 )}
222222 </div>
223223 <form
224 method="POST"
224 method="post"
225225 action={`/admin/users/${u.id}/admin`}
226226 onsubmit={
227227 isAdmin
323323 </div>
324324 </div>
325325 <form
326 method="POST"
326 method="post"
327327 action={`/admin/repos/${r.id}/delete`}
328328 onsubmit="return confirm('Delete repository permanently? This cannot be undone.')"
329329 >
378378 </a>
379379 </div>
380380 <form
381 method="POST"
381 method="post"
382382 action="/admin/flags"
383383 class="panel"
384384 style="padding:16px"
471471 <div style="font-size:13px;color:var(--text-muted);margin-bottom:8px">
472472 {opted} user{opted === 1 ? "" : "s"} opted into the weekly digest.
473473 </div>
474 <form method="POST" action="/admin/digests/run" style="margin-bottom:8px">
474 <form method="post" action="/admin/digests/run" style="margin-bottom:8px">
475475 <button
476476 type="submit"
477477 class="btn btn-primary"
480480 Send digests now
481481 </button>
482482 </form>
483 <form method="POST" action="/admin/digests/preview" style="display:flex;gap:6px;align-items:center">
483 <form method="post" action="/admin/digests/preview" style="display:flex;gap:6px;align-items:center">
484484 <input
485485 type="text"
486486 name="username"
Modifiedsrc/routes/advisories.tsx+3−3View fileUnifiedSplit
9292 <h2 style="margin:0">Security advisories</h2>
9393 {isOwner && (
9494 <form
95 method="POST"
95 method="post"
9696 action={`/${ownerName}/${repoName}/security/advisories/scan`}
9797 >
9898 <button type="submit" class="btn btn-primary btn-sm">
207207 <div style="display:flex;gap:6px">
208208 {a.status === "open" && (
209209 <form
210 method="POST"
210 method="post"
211211 action={`/${ownerName}/${repoName}/security/advisories/${a.id}/dismiss`}
212212 style="display:flex;gap:4px;align-items:center"
213213 >
229229 )}
230230 {a.status === "dismissed" && (
231231 <form
232 method="POST"
232 method="post"
233233 action={`/${ownerName}/${repoName}/security/advisories/${a.id}/reopen`}
234234 >
235235 <button
Modifiedsrc/routes/ai-changelog.tsx+2−2View fileUnifiedSplit
122122 </div>
123123 )}
124124 <form
125 method="GET"
125 method="get"
126126 action={`/${owner}/${repo}/ai/changelog`}
127127 style="display: flex; gap: 12px; align-items: center; margin-bottom: 20px; flex-wrap: wrap"
128128 >
246246 {commits.length} commit{commits.length !== 1 ? "s" : ""}
247247 </div>
248248 <form
249 method="GET"
249 method="get"
250250 action={`/${owner}/${repo}/ai/changelog`}
251251 style="display: flex; gap: 8px; align-items: center; margin-bottom: 20px; flex-wrap: wrap"
252252 >
Modifiedsrc/routes/ai-explain.tsx+1−1View fileUnifiedSplit
135135 <h2 style="margin: 0;">Codebase explanation</h2>
136136 {canRegenerate && (
137137 <form
138 method="POST"
138 method="post"
139139 action={`/${owner}/${repo}/explain/regenerate`}
140140 style="display: inline"
141141 >
Modifiedsrc/routes/ai-tests.tsx+2−2View fileUnifiedSplit
149149 const trimmed = allFiles.slice(0, 200);
150150 return (
151151 <form
152 method="POST"
152 method="post"
153153 action={`/${ownerName}/${repoName}/ai/tests/generate`}
154154 style="margin-top: 16px; display: flex; flex-direction: column; gap: 12px; max-width: 720px;"
155155 >
350350 </p>
351351 </div>
352352 <form
353 method="POST"
353 method="post"
354354 action={`/${owner}/${repo}/ai/tests/generate`}
355355 style="display: inline;"
356356 >
Modifiedsrc/routes/ask.tsx+1−1View fileUnifiedSplit
9696 )}
9797 </div>
9898
99 <form method="POST" action={postUrl} class="chat-form">
99 <form method="post" action={postUrl} class="chat-form">
100100 <textarea
101101 name="message"
102102 placeholder={placeholder}
Modifiedsrc/routes/auth.tsx+3−3View fileUnifiedSplit
3636 <div class="auth-container">
3737 <h2>Create account</h2>
3838 {error && <div class="auth-error">{decodeURIComponent(error)}</div>}
39 <form method="POST" action="/register">
39 <form method="post" action="/register">
4040 <div class="form-group">
4141 <label for="username">Username</label>
4242 <input
174174 <h2>Sign in</h2>
175175 {error && <div class="auth-error">{decodeURIComponent(error)}</div>}
176176 <form
177 method="POST"
177 method="post"
178178 action={`/login${redirect ? `?redirect=${encodeURIComponent(redirect)}` : ""}`}
179179 >
180180 <div class="form-group">
394394 </p>
395395 {error && <div class="auth-error">{decodeURIComponent(error)}</div>}
396396 <form
397 method="POST"
397 method="post"
398398 action={`/login/2fa?redirect=${encodeURIComponent(redirect)}`}
399399 >
400400 <div class="form-group">
401401