fix(ci): fix pipeline #366 — web @mosaic/ui build, Dockerfile find bug, event handler types
All checks were successful
ci/woodpecker/push/orchestrator Pipeline was successful
ci/woodpecker/push/web Pipeline was successful

Three root causes resolved:

1. .woodpecker/web.yml: build-shared step was missing @mosaic/ui build,
   causing 10 test suite failures + 20 typecheck errors (TS2307)

2. apps/orchestrator/Dockerfile: find -o without parentheses only deleted
   last pattern's matches, leaving spec files with test fixture secrets
   that triggered 5 Trivy false positives (3 CRITICAL, 2 HIGH)

3. 9 web files had untyped event handler parameters (e) causing 49 lint
   errors and 19 typecheck errors — added React.ChangeEvent<T> types

Verification: lint 0 errors, typecheck 0 errors, tests 73/73 suites pass

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jason Woltje
2026-02-12 17:50:41 -06:00
parent 3b12adf8f7
commit e8a9a3087a
12 changed files with 37 additions and 23 deletions

View File

@@ -116,7 +116,7 @@ export function CreateCredentialDialog({
<Input
id="name"
value={formData.name}
onChange={(e) => {
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setFormData({ ...formData, name: e.target.value });
}}
placeholder="e.g., GitHub Personal Token"
@@ -178,7 +178,7 @@ export function CreateCredentialDialog({
id="value"
type="password"
value={formData.value}
onChange={(e) => {
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setFormData({ ...formData, value: e.target.value });
}}
placeholder="Enter credential value"
@@ -195,7 +195,7 @@ export function CreateCredentialDialog({
<Textarea
id="description"
value={formData.description}
onChange={(e) => {
onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) => {
setFormData({ ...formData, description: e.target.value });
}}
placeholder="Optional description"
@@ -211,7 +211,7 @@ export function CreateCredentialDialog({
id="expiresAt"
type="date"
value={formData.expiresAt}
onChange={(e) => {
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setFormData({ ...formData, expiresAt: e.target.value });
}}
disabled={isSubmitting}

View File

@@ -99,7 +99,7 @@ export function EditCredentialDialog({
<Input
id="edit-name"
value={formData.name}
onChange={(e) => {
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setFormData({ ...formData, name: e.target.value });
}}
placeholder="e.g., GitHub Personal Token"
@@ -113,7 +113,7 @@ export function EditCredentialDialog({
<Textarea
id="edit-description"
value={formData.description}
onChange={(e) => {
onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) => {
setFormData({ ...formData, description: e.target.value });
}}
placeholder="Optional description"
@@ -129,7 +129,7 @@ export function EditCredentialDialog({
id="edit-expiresAt"
type="date"
value={formData.expiresAt}
onChange={(e) => {
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setFormData({ ...formData, expiresAt: e.target.value });
}}
disabled={isSubmitting}

View File

@@ -101,7 +101,7 @@ export function RotateCredentialDialog({
id="rotate-new-value"
type="password"
value={newValue}
onChange={(e) => {
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setNewValue(e.target.value);
}}
placeholder="Enter new credential value"
@@ -116,7 +116,7 @@ export function RotateCredentialDialog({
id="rotate-confirm-value"
type="password"
value={confirmValue}
onChange={(e) => {
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setConfirmValue(e.target.value);
}}
placeholder="Re-enter new credential value"