Compare commits

..

3 Commits

Author SHA1 Message Date
core-devops 4d4a074538 ci: re-trigger (run 62794 wedged: Canvas Deploy Reminder storm-cancelled 2s zero-output, poisoned needs-graph so all-required Skipped+never posted; Gitea 1.22.6 no REST rerun) [no-op]
CI / Shellcheck (E2E scripts) (pull_request) Blocked by required conditions
E2E API Smoke Test / E2E API Smoke Test (pull_request) Blocked by required conditions
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 33s
CI / Detect changes (pull_request) Successful in 1m24s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 20s
E2E API Smoke Test / detect-changes (pull_request) Successful in 1m48s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 1m41s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 34s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Successful in 2m52s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 1m11s
gate-check-v3 / gate-check (pull_request) Successful in 25s
qa-review / approved (pull_request) Successful in 23s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m44s
security-review / approved (pull_request) Successful in 44s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 3m6s
sop-tier-check / tier-check (pull_request) Successful in 32s
sop-checklist / all-items-acked (pull_request) Successful in 33s
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Successful in 3m11s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 2m13s
CI / Python Lint & Test (pull_request) Successful in 57s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 17s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 20s
CI / Canvas (Next.js) (pull_request) Successful in 23m39s
CI / Platform (Go) (pull_request) Successful in 24m22s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
audit-force-merge / audit (pull_request) Waiting to run
CI / all-required (pull_request) Has been cancelled
2026-05-16 07:14:27 +00:00
core-devops ed75d60ca3 ci: re-trigger wedged CI run (detect-changes never dispatched all-required; Gitea 1.22.6 has no REST rerun) [no-op]
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 18s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 34s
CI / Detect changes (pull_request) Successful in 1m8s
E2E API Smoke Test / detect-changes (pull_request) Successful in 1m13s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 1m16s
E2E Chat / detect-changes (pull_request) Successful in 1m18s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 22s
gate-check-v3 / gate-check (pull_request) Successful in 33s
qa-review / approved (pull_request) Successful in 34s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 1m22s
security-review / approved (pull_request) Successful in 49s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 2m14s
sop-tier-check / tier-check (pull_request) Successful in 1m20s
sop-checklist / all-items-acked (pull_request) Successful in 1m23s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 2m53s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 3m33s
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Successful in 3m31s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 20s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 43s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 30s
CI / Python Lint & Test (pull_request) Successful in 50s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 35s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Failing after 14m30s
E2E Chat / E2E Chat (pull_request) Failing after 13m33s
CI / Canvas (Next.js) (pull_request) Successful in 22m40s
CI / Platform (Go) (pull_request) Successful in 23m53s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 6s
2026-05-16 06:37:37 +00:00
core-devops 95048afa27 fix(ci): pin e2e-chat setup-node to mirrored v6.4.0 SHA
CI / Detect changes (pull_request) Waiting to run
CI / Canvas (Next.js) (pull_request) Waiting to run
E2E API Smoke Test / detect-changes (pull_request) Waiting to run
E2E Chat / detect-changes (pull_request) Waiting to run
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Blocked by required conditions
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Waiting to run
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Waiting to run
lint-required-no-paths / lint-required-no-paths (pull_request) Waiting to run
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 40s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 31s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 30s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 2m6s
qa-review / approved (pull_request) Successful in 31s
security-review / approved (pull_request) Successful in 30s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 1m35s
sop-checklist / all-items-acked (pull_request) Has started running
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m58s
gate-check-v3 / gate-check (pull_request) Successful in 43s
sop-tier-check / tier-check (pull_request) Successful in 33s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Successful in 3m41s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 14s
CI / Platform (Go) (pull_request) Successful in 22m17s
CI / Shellcheck (E2E scripts) (pull_request) Has been cancelled
CI / Canvas Deploy Reminder (pull_request) Has been cancelled
E2E API Smoke Test / E2E API Smoke Test (pull_request) Has been cancelled
E2E Chat / E2E Chat (pull_request) Has been cancelled
CI / Python Lint & Test (pull_request) Has been cancelled
CI / all-required (pull_request) Has been cancelled
The E2E Chat job has a 100% failure rate since inception (33 failures,
0 successes across all PRs + staging HEAD). Root cause: the workflow
pinned actions/setup-node@60edb5dd... (v4), whose SHA was never
replicated into the self-hosted Gitea actions mirror
(git.moleculesai.app/actions/setup-node -> 404 reference not found).
Every run dies at action resolution, ~12s in, before any test code.

Sibling Playwright workflow e2e-staging-canvas.yml already uses the
mirrored v6.4.0 SHA 48b55a011bda... (resolves 200). Align e2e-chat.yml
to the same pin so the job can actually execute.

This is not a #1277 regression and not a code defect — E2E Chat has
never run a single test. The check is non-blocking (continue-on-error,
not yet in branch protection per the bp-required pending-#1142 note),
so no merges were gated by this.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 22:34:56 -07:00
3 changed files with 1 additions and 121 deletions
+1 -1
View File
@@ -97,7 +97,7 @@ jobs:
cache-dependency-path: workspace-server/go.sum
- if: needs.detect-changes.outputs.chat == 'true'
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d6f5 # v4
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '22'
cache: 'npm'
-66
View File
@@ -1,66 +0,0 @@
// @vitest-environment jsdom
/**
* Tests for theme.ts — cssVar() function and ColorToken type.
*
* cssVar is intentionally simple (string concatenation) — these tests guard
* against regressions as ColorToken is extended and against typos in the
* token-name → CSS variable mapping.
*/
import { describe, it, expect } from "vitest";
import { cssVar, type ColorToken } from "../theme";
describe("cssVar", () => {
it("wraps each known token in a var() reference", () => {
const tokens: ColorToken[] = [
"surface",
"surface-elevated",
"surface-sunken",
"surface-card",
"line",
"line-soft",
"ink",
"ink-mid",
"ink-soft",
"accent",
"accent-strong",
"warm",
"good",
"bad",
"bg",
"bg-elev",
"bg-card",
"line-strong",
"ink-mute",
"ink-dim",
"accent-dim",
"plasma",
"warn",
];
for (const token of tokens) {
expect(cssVar(token)).toBe(`var(--color-${token})`);
}
});
it("is a pure function — same token always returns same value", () => {
for (let i = 0; i < 5; i++) {
expect(cssVar("accent")).toBe("var(--color-accent)");
expect(cssVar("surface")).toBe("var(--color-surface)");
expect(cssVar("good")).toBe("var(--color-good)");
}
});
it("handles hyphenated tokens correctly", () => {
expect(cssVar("surface-elevated")).toBe("var(--color-surface-elevated)");
expect(cssVar("line-soft")).toBe("var(--color-line-soft)");
expect(cssVar("ink-mute")).toBe("var(--color-ink-mute)");
});
it("produces a value usable as an inline style prop value", () => {
// cssVar returns a plain string, which is exactly what style={{ color: cssVar(token) }}
// expects — no extra wrapping needed.
const result = cssVar("accent");
expect(typeof result).toBe("string");
expect(result.startsWith("var(--color-")).toBe(true);
expect(result.endsWith(")")).toBe(true);
});
});
@@ -1,54 +0,0 @@
package handlers
import (
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/gin-gonic/gin"
)
// ListSources is the only exported function in plugins_sources.go. It calls
// h.sources.Schemes() and returns the result verbatim, so the test verifies
// the handler correctly serialises whatever the real registry provides.
func TestListSources_ReturnsSchemes(t *testing.T) {
// Use a real handler — the registry is deterministic (local + github).
h := NewPluginsHandler(t.TempDir(), nil, nil)
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
c.Request = httptest.NewRequest("GET", "/plugins/sources", nil)
h.ListSources(c)
if w.Code != http.StatusOK {
t.Fatalf("expected 200, got %d: %s", w.Code, w.Body.String())
}
var body struct {
Schemes []string `json:"schemes"`
}
if err := json.Unmarshal(w.Body.Bytes(), &body); err != nil {
t.Fatalf("failed to unmarshal response: %v", err)
}
// The default registry registers local + github resolvers.
if len(body.Schemes) < 1 {
t.Fatalf("expected at least 1 scheme, got %d: %v", len(body.Schemes), body.Schemes)
}
// Verify the schemes slice is stable (same call always returns same result).
w2 := httptest.NewRecorder()
c2, _ := gin.CreateTestContext(w2)
c2.Request = httptest.NewRequest("GET", "/plugins/sources", nil)
h.ListSources(c2)
var body2 struct {
Schemes []string `json:"schemes"`
}
json.Unmarshal(w2.Body.Bytes(), &body2)
if len(body.Schemes) != len(body2.Schemes) {
t.Errorf("Schemes() is not stable: first=%v, second=%v", body.Schemes, body2.Schemes)
}
}