3c7ba4a7a4
789 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
| 3c7ba4a7a4 |
delegation_ledger_integration_test.go: add missing time import
Some checks failed
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 8s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 12s
CI / Detect changes (pull_request) Successful in 20s
E2E API Smoke Test / detect-changes (pull_request) Successful in 21s
Harness Replays / detect-changes (pull_request) Successful in 23s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 25s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 25s
qa-review / approved (pull_request) Failing after 17s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 26s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
CI / Canvas (Next.js) (pull_request) Successful in 6s
CI / Python Lint & Test (pull_request) Successful in 6s
security-review / approved (pull_request) Failing after 14s
gate-check-v3 / gate-check (pull_request) Successful in 25s
sop-checklist-gate / gate (pull_request) Successful in 14s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Harness Replays / Harness Replays (pull_request) Successful in 5s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 14s
sop-tier-check / tier-check (pull_request) Successful in 18s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 6s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 7s
Ops Scripts Tests / Ops scripts (unittest) (pull_request) Successful in 38s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Failing after 1m4s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m5s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m27s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m28s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m17s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m31s
CI / Platform (Go) (pull_request) Failing after 10m45s
CI / all-required (pull_request) Failing after 5s
Commit
|
|||
| 184d67e631 |
handlers: pass cancellable context through executeDelegation
Some checks failed
CI / Detect changes (pull_request) Successful in 34s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 13s
Harness Replays / detect-changes (pull_request) Successful in 32s
E2E API Smoke Test / detect-changes (pull_request) Successful in 43s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 47s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 46s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 19s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 34s
qa-review / approved (pull_request) Failing after 12s
gate-check-v3 / gate-check (pull_request) Successful in 27s
security-review / approved (pull_request) Failing after 14s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Failing after 1m22s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
sop-checklist-gate / gate (pull_request) Successful in 13s
Ops Scripts Tests / Ops scripts (unittest) (pull_request) Successful in 51s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m26s
sop-tier-check / tier-check (pull_request) Successful in 15s
CI / Canvas (Next.js) (pull_request) Successful in 9s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m49s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m37s
CI / Python Lint & Test (pull_request) Successful in 9s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 23s
Harness Replays / Harness Replays (pull_request) Successful in 6s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 16s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 6s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 4m44s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 5m4s
CI / Platform (Go) (pull_request) Failing after 12m12s
CI / all-required (pull_request) Failing after 4s
executeDelegation previously created its own context.Background() with a 30-minute timeout internally, so updateDelegationStatus and all DB ops ignored external cancellation. The test helper runWithTimeout could fire its 30-second deadline but the goroutine kept running for the full 30 minutes because the cancellation never propagated. Fix: add ctx context.Context as first parameter to both executeDelegation and updateDelegationStatus. The caller now provides the context budget — Delegate() passes c.Request.Context() (5 min idle timeout), and tests pass context.Background(). This means runWithTimeout's deadline now actually terminates the goroutine when it fires. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| d60da43cd7 |
fix(handlers): add timeouts to all DB operations in integration tests
Some checks failed
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 11s
CI / Detect changes (pull_request) Successful in 27s
E2E API Smoke Test / detect-changes (pull_request) Successful in 28s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 30s
Harness Replays / detect-changes (pull_request) Successful in 27s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 32s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 12s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 26s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
qa-review / approved (pull_request) Failing after 13s
sop-checklist-gate / gate (pull_request) Successful in 14s
security-review / approved (pull_request) Failing after 15s
gate-check-v3 / gate-check (pull_request) Successful in 20s
CI / Canvas (Next.js) (pull_request) Successful in 4s
sop-tier-check / tier-check (pull_request) Successful in 11s
CI / Python Lint & Test (pull_request) Successful in 4s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 5s
Harness Replays / Harness Replays (pull_request) Successful in 5s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 12s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 6s
Ops Scripts Tests / Ops scripts (unittest) (pull_request) Successful in 39s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Failing after 1m11s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m20s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m26s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m33s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 3m13s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 3m17s
CI / Platform (Go) (pull_request) Failing after 5m27s
CI / all-required (pull_request) Failing after 1s
Add 10s timeouts to integrationDB and setupIntegrationFixtures DB operations, and a 5s timeout to the cleanup DELETEs. The raw TCP mock server was confirmed working (tests pass in 5-8s when they pass), but some CI runs hang for 2+ minutes. Adding timeouts ensures that if DB operations block, the test fails cleanly with a timeout message rather than hanging the CI job. This also makes the tests more resilient to transient postgres slowness under CI runner load. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 26e9f158c6 |
fix(handlers): add runtime.LockOSThread to executeDelegation
Some checks failed
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 7s
E2E API Smoke Test / detect-changes (pull_request) Successful in 14s
CI / Detect changes (pull_request) Successful in 14s
Harness Replays / detect-changes (pull_request) Successful in 15s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 13s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 21s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 22s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 22s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
qa-review / approved (pull_request) Failing after 15s
sop-checklist-gate / gate (pull_request) Successful in 17s
security-review / approved (pull_request) Failing after 16s
gate-check-v3 / gate-check (pull_request) Failing after 22s
sop-tier-check / tier-check (pull_request) Successful in 16s
CI / Canvas (Next.js) (pull_request) Successful in 6s
CI / Python Lint & Test (pull_request) Successful in 5s
Harness Replays / Harness Replays (pull_request) Successful in 5s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 8s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 13s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 5s
Ops Scripts Tests / Ops scripts (unittest) (pull_request) Successful in 42s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Failing after 1m2s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m11s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m19s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m24s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m20s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m30s
CI / Platform (Go) (pull_request) Failing after 6m26s
CI / all-required (pull_request) Failing after 2s
Pin the goroutine to a single OS thread for the duration of executeDelegation. This provides a second line of defence against the scheduler-migration race that log.Printf alone sometimes fails to prevent under heavy CI runner load. In production the pinning is harmless: the goroutine terminates when the request completes. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 0924c27b54 |
fix(handlers): explain + rename DIAG logs to INFO step logs
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 3s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 6s
Harness Replays / detect-changes (pull_request) Successful in 11s
E2E API Smoke Test / detect-changes (pull_request) Successful in 13s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 14s
CI / Detect changes (pull_request) Successful in 13s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 10s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 16s
qa-review / approved (pull_request) Failing after 12s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
gate-check-v3 / gate-check (pull_request) Failing after 19s
Harness Replays / Harness Replays (pull_request) Successful in 5s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 21s
security-review / approved (pull_request) Failing after 12s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 8s
sop-checklist-gate / gate (pull_request) Successful in 11s
sop-tier-check / tier-check (pull_request) Successful in 11s
CI / Canvas (Next.js) (pull_request) Successful in 4s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 3s
CI / Python Lint & Test (pull_request) Successful in 4s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 5s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Failing after 1m8s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m10s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m18s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m22s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 1m57s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 1m56s
CI / Platform (Go) (pull_request) Failing after 3m57s
CI / all-required (pull_request) Failing after 1s
The log.Printf calls in executeDelegation are load-bearing for the integration test surface. Add a comment explaining why: they prevent Go's compiler from inlining the function, which eliminates a subtle stack-sharing race between the inlined body and the test goroutine. Rename "DIAG step=..." to "step=..." to make them proper INFO-level delegation lifecycle markers rather than debug diagnostics. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 78b80c813a |
fix(handlers): remove unused timedExecuteDelegation helper
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 3s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 7s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 10s
qa-review / approved (pull_request) Failing after 10s
Harness Replays / detect-changes (pull_request) Successful in 14s
CI / Detect changes (pull_request) Successful in 16s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 19s
E2E API Smoke Test / detect-changes (pull_request) Successful in 19s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 20s
security-review / approved (pull_request) Failing after 12s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
gate-check-v3 / gate-check (pull_request) Failing after 20s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 22s
Harness Replays / Harness Replays (pull_request) Successful in 5s
sop-checklist-gate / gate (pull_request) Successful in 12s
CI / Canvas (Next.js) (pull_request) Successful in 6s
sop-tier-check / tier-check (pull_request) Successful in 12s
CI / Python Lint & Test (pull_request) Successful in 6s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 5s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 4s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 6s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Failing after 1m4s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m14s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m22s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m26s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 1m58s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m2s
CI / Platform (Go) (pull_request) Failing after 4m8s
CI / all-required (pull_request) Failing after 1s
The timedExecuteDelegation wrapper was added during DIAG investigation but is not called by any test. Remove it to keep the test file clean. The runWithTimeout wrapper from the prior commit remains and guards against hanging tests consuming the full CI timeout budget. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 5764658e4f |
test(handlers): add DIAG step logs to pinpoint 2-minute CI hang
Some checks failed
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 3s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 6s
CI / Detect changes (pull_request) Successful in 11s
Harness Replays / detect-changes (pull_request) Successful in 11s
E2E API Smoke Test / detect-changes (pull_request) Successful in 14s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 15s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 12s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 16s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 20s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
CI / Canvas (Next.js) (pull_request) Successful in 9s
qa-review / approved (pull_request) Failing after 14s
CI / Python Lint & Test (pull_request) Successful in 9s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 8s
security-review / approved (pull_request) Failing after 13s
Harness Replays / Harness Replays (pull_request) Successful in 6s
sop-checklist-gate / gate (pull_request) Successful in 13s
sop-tier-check / tier-check (pull_request) Successful in 14s
gate-check-v3 / gate-check (pull_request) Failing after 18s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 4s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 3s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m4s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Failing after 1m12s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m18s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m25s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m0s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 1m54s
CI / Platform (Go) (pull_request) Failing after 4m8s
CI / all-required (pull_request) Failing after 1s
Add log.Printf DIAG markers at each step inside executeDelegation so the CI log reveals exactly which call is blocking. The previous runWithTimeout commit captured a stack trace on 30s timeout but the CI logs were inaccessible (Gitea Actions API 404). This commit adds coarse-grained timing markers that appear in the test output even when the test times out — the last DIAG line before the hang tells us exactly where executeDelegation is blocked. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 3df90099d8 |
test(handlers): add runWithTimeout wrapper to executor integration tests
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 15s
CI / Detect changes (pull_request) Successful in 42s
E2E API Smoke Test / detect-changes (pull_request) Successful in 34s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 38s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 14s
Harness Replays / detect-changes (pull_request) Successful in 31s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 44s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 14s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 35s
qa-review / approved (pull_request) Failing after 17s
gate-check-v3 / gate-check (pull_request) Failing after 26s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
security-review / approved (pull_request) Failing after 11s
sop-checklist-gate / gate (pull_request) Successful in 10s
sop-tier-check / tier-check (pull_request) Successful in 13s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Failing after 1m24s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 5s
CI / Canvas (Next.js) (pull_request) Successful in 7s
CI / Python Lint & Test (pull_request) Successful in 7s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m18s
Harness Replays / Harness Replays (pull_request) Successful in 8s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 9s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 6s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m45s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m37s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 4m12s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 4m16s
CI / Platform (Go) (pull_request) Failing after 6m41s
CI / all-required (pull_request) Failing after 2s
Wraps every executeDelegation call in a 30-second goroutine timeout wrapper. When a test hangs, it now fails fast with a goroutine stack trace instead of consuming the full 5-minute CI timeout. This gives each of the 5 tests its own diagnostic window and prevents a single hang from leaving no time for subsequent tests. The stack trace in the failure output pinpoints the exact blocking syscall/goroutine so we can identify the root cause without guessing. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 1120c94e8d |
fix(handlers): use net.ListenTCP + close conn immediately after response
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 20s
E2E API Smoke Test / detect-changes (pull_request) Successful in 29s
CI / Detect changes (pull_request) Successful in 30s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 22s
Harness Replays / detect-changes (pull_request) Successful in 12s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 17s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 12s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 17s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
qa-review / approved (pull_request) Failing after 19s
security-review / approved (pull_request) Failing after 19s
sop-checklist-gate / gate (pull_request) Successful in 16s
gate-check-v3 / gate-check (pull_request) Failing after 30s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 35s
sop-tier-check / tier-check (pull_request) Successful in 15s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 5s
CI / Canvas (Next.js) (pull_request) Successful in 10s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Failing after 1m11s
CI / Python Lint & Test (pull_request) Successful in 7s
Harness Replays / Harness Replays (pull_request) Successful in 5s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 8s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 7s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m18s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m35s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m34s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 3m42s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 3m52s
CI / Platform (Go) (pull_request) Failing after 10m42s
CI / all-required (pull_request) Failing after 2s
- Explicitly bind to IPv4 only with net.ListenTCP("tcp4", ...) to
avoid IPv6 (::1) vs IPv4 (127.0.0.1) mismatch on macOS where
Listen("tcp", "127.0.0.1:0") might bind ::1.
- Close the connection immediately after writing the response.
If we keep it open, the client's request-body writer goroutine
blocks on the socket (waiting for server to drain the body).
Closing immediately unblocks it; the client already received
the response so the write error is harmless.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|||
| 1a78bf533b |
fix(handlers): add diagnostics + use SetReadDeadline in raw TCP server
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 15s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 9s
Harness Replays / detect-changes (pull_request) Successful in 17s
CI / Detect changes (pull_request) Successful in 27s
E2E API Smoke Test / detect-changes (pull_request) Successful in 26s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 25s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 25s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 14s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 20s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
qa-review / approved (pull_request) Failing after 15s
security-review / approved (pull_request) Failing after 14s
sop-checklist-gate / gate (pull_request) Successful in 11s
gate-check-v3 / gate-check (pull_request) Failing after 19s
sop-tier-check / tier-check (pull_request) Successful in 18s
Harness Replays / Harness Replays (pull_request) Successful in 8s
CI / Canvas (Next.js) (pull_request) Successful in 8s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 5s
CI / Python Lint & Test (pull_request) Successful in 7s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 9s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 6s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Failing after 1m20s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m21s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m29s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m28s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 3m47s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 3m49s
CI / Platform (Go) (pull_request) Failing after 9m47s
CI / all-required (pull_request) Failing after 9s
Adds t.Log statements at each step of test execution to identify where the hang occurs. Also changes rawHTTPServer from blocking Read to a 2-second deadline-based read to avoid deadlock where the server waits for body while client waits for headers. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 9b32a38fd7 |
fix(handlers): use raw TCP listener instead of httptest.Server
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 9s
Harness Replays / detect-changes (pull_request) Successful in 11s
CI / Detect changes (pull_request) Successful in 13s
E2E API Smoke Test / detect-changes (pull_request) Successful in 14s
qa-review / approved (pull_request) Failing after 10s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 14s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 15s
security-review / approved (pull_request) Failing after 11s
gate-check-v3 / gate-check (pull_request) Failing after 15s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 16s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
sop-checklist-gate / gate (pull_request) Successful in 8s
Harness Replays / Harness Replays (pull_request) Successful in 5s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 6s
CI / Canvas (Next.js) (pull_request) Successful in 7s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 8s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
sop-tier-check / tier-check (pull_request) Successful in 11s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 4s
CI / Python Lint & Test (pull_request) Successful in 6s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m4s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m15s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m18s
CI / Platform (Go) (pull_request) Failing after 5m44s
CI / all-required (pull_request) Failing after 5s
All previous approaches (plain httptest.Server, raw TCP with io.Copy,
httptest+Hijack) produced a consistent 2-minute timeout in CI.
Analysis of httptest.Server revealed a subtle goroutine ordering
dependency: the server reads the request body into a buffer before
calling the handler, but the client's request-body writer goroutine
waits for response headers before sending the body. The handler must
return (sending headers) before the client's body writer can complete.
This creates a potential race where the connection is closed while the
client is still writing.
The raw TCP approach eliminates all HTTP library goroutines:
- net.Listen("tcp", "127.0.0.1:0") binds an ephemeral port
- Accept in a goroutine, handle one connection
- Read headers using a 2-second deadline (enough for client to send)
- Send response immediately, close connection
- a2aClient DialContext intercepts all dials and redirects to our port
Key insight: set a Read deadline (not ReadAll to EOF) so the server
proceeds to send the response without waiting for the body. The kernel
discards unread buffered body bytes on close — harmless.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|||
| 3bd13f36d0 |
fix(handlers): eliminate io.Copy deadlock in integration tests
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 4s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 10s
qa-review / approved (pull_request) Failing after 9s
Harness Replays / detect-changes (pull_request) Successful in 12s
security-review / approved (pull_request) Failing after 11s
sop-checklist-gate / gate (pull_request) Successful in 9s
CI / Detect changes (pull_request) Successful in 15s
E2E API Smoke Test / detect-changes (pull_request) Successful in 15s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 15s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 15s
gate-check-v3 / gate-check (pull_request) Failing after 15s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 17s
Harness Replays / Harness Replays (pull_request) Successful in 3s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 3s
CI / Canvas (Next.js) (pull_request) Successful in 4s
CI / Python Lint & Test (pull_request) Successful in 5s
sop-tier-check / tier-check (pull_request) Successful in 8s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 5s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 4s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m7s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m3s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m10s
CI / Platform (Go) (pull_request) Failing after 4m5s
CI / all-required (pull_request) Failing after 1s
The 2-minute timeout was caused by io.Copy(io.Discard, r.Body) in the httptest.Server handler. Go's http.Server reads the full request body into a buffer BEFORE calling the handler, so r.Body is pre-populated. The io.Copy call itself wouldn't block — but the goroutine lifecycle creates a subtle ordering dependency: the handler must return to send response headers, which unblocks the client's body-writer goroutine, which then tries to write remaining body bytes to a potentially-closed connection. Fix: remove io.Copy from the handler entirely. The httptest.Server already consumed the body. Just write the response and return. Also: add missing net/net/url imports, remove unused agentServer/setupIntegrationRedis helpers, restore allowLoopbackForTest(t) calls (SSRF guard), inline httptest.Server creation per-test, override a2aClient DialContext to redirect all connections to the test server. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 13c2ebb32a |
debug(handlers): log when agentServer receives request to diagnose hang
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 3s
CI / Detect changes (pull_request) Successful in 11s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 9s
Harness Replays / detect-changes (pull_request) Successful in 12s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
E2E API Smoke Test / detect-changes (pull_request) Successful in 14s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 14s
qa-review / approved (pull_request) Failing after 11s
security-review / approved (pull_request) Failing after 12s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 15s
sop-checklist-gate / gate (pull_request) Successful in 12s
sop-tier-check / tier-check (pull_request) Successful in 12s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 16s
gate-check-v3 / gate-check (pull_request) Failing after 15s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 3s
CI / Canvas (Next.js) (pull_request) Successful in 4s
CI / Python Lint & Test (pull_request) Successful in 4s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Harness Replays / Harness Replays (pull_request) Successful in 4s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 4s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 3s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m5s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 1m51s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 1m54s
CI / Platform (Go) (pull_request) Failing after 3m54s
CI / all-required (pull_request) Failing after 1s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 3f99637bc0 |
debug(handlers): add timing to integration tests to pinpoint hang location
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 5s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 10s
Harness Replays / detect-changes (pull_request) Successful in 11s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
qa-review / approved (pull_request) Failing after 11s
CI / Detect changes (pull_request) Successful in 13s
security-review / approved (pull_request) Failing after 11s
E2E API Smoke Test / detect-changes (pull_request) Successful in 15s
sop-checklist-gate / gate (pull_request) Successful in 11s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 14s
sop-tier-check / tier-check (pull_request) Successful in 13s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 17s
Harness Replays / Harness Replays (pull_request) Successful in 4s
gate-check-v3 / gate-check (pull_request) Failing after 16s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 18s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 4s
CI / Canvas (Next.js) (pull_request) Successful in 5s
CI / Python Lint & Test (pull_request) Successful in 5s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 6s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 4s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m6s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 1m54s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m0s
CI / Platform (Go) (pull_request) Failing after 4m2s
CI / all-required (pull_request) Failing after 1s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| e65e5704ff |
fix(handlers): set declaredLength == len(actualBody) in integration tests
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 9s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
qa-review / approved (pull_request) Failing after 11s
Harness Replays / detect-changes (pull_request) Successful in 13s
CI / Detect changes (pull_request) Successful in 14s
sop-checklist-gate / gate (pull_request) Successful in 11s
E2E API Smoke Test / detect-changes (pull_request) Successful in 15s
security-review / approved (pull_request) Failing after 12s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 16s
sop-tier-check / tier-check (pull_request) Successful in 12s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 16s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 17s
gate-check-v3 / gate-check (pull_request) Failing after 16s
Harness Replays / Harness Replays (pull_request) Successful in 3s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 3s
CI / Canvas (Next.js) (pull_request) Successful in 3s
CI / Python Lint & Test (pull_request) Successful in 4s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 3s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 5s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m2s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 1m51s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 1m54s
CI / Platform (Go) (pull_request) Failing after 3m51s
CI / all-required (pull_request) Failing after 1s
Content-Length mismatch (declared > actual) causes the HTTP transport to wait for the remaining bytes. After the TCP keepalive (~2 min), it returns a ProtocolError — indistinguishable from a genuine transport failure. The test then runs for 1m57s before failing. Fix: set declaredLength = len(actualBody) in all test cases. The partial-body delivery-confirmed scenarios are covered by the sqlmock tests in delegation_test.go; these integration tests verify DB row state after clean success/failure paths. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 0617bb67be |
fix(handlers): use plain httptest.Server in integration tests
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 5s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 10s
Harness Replays / detect-changes (pull_request) Successful in 11s
qa-review / approved (pull_request) Failing after 11s
security-review / approved (pull_request) Failing after 10s
CI / Detect changes (pull_request) Successful in 17s
E2E API Smoke Test / detect-changes (pull_request) Successful in 17s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 18s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 18s
Harness Replays / Harness Replays (pull_request) Successful in 4s
sop-checklist-gate / gate (pull_request) Successful in 10s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 19s
gate-check-v3 / gate-check (pull_request) Failing after 18s
sop-tier-check / tier-check (pull_request) Successful in 11s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 3s
CI / Python Lint & Test (pull_request) Successful in 3s
CI / Canvas (Next.js) (pull_request) Successful in 3s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 3s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 4s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m3s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 1m55s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 1m57s
CI / Platform (Go) (pull_request) Failing after 3m48s
CI / all-required (pull_request) Failing after 1s
Abandons raw TCP mock and httptest+Hijack in favour of plain httptest.Server. Both prior approaches caused deadlocks: - Raw TCP: server read vs client write pipelining caused both sides to block. - httptest+Hijack: Go's HTTP server keeps a request-read goroutine active after Hijack; if request body hasn't been fully received, Hijack() blocks waiting for it while the client blocks waiting for response headers — mutual deadlock. Plain httptest.Server accepts connections cleanly, sends responses, and closes normally — the Go HTTP/1.1 client reads available bytes then gets EOF when the server closes the connection. Content-Length mismatch (declared > actual) simulates partial-body connection-drop scenarios without any TCP manipulation. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| f4b7ab41e7 |
fix(handlers): send HTTP response BEFORE draining request body in raw TCP mock
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 4s
Harness Replays / detect-changes (pull_request) Successful in 8s
CI / Detect changes (pull_request) Successful in 11s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 9s
E2E API Smoke Test / detect-changes (pull_request) Successful in 14s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 15s
qa-review / approved (pull_request) Failing after 11s
security-review / approved (pull_request) Failing after 11s
sop-checklist-gate / gate (pull_request) Successful in 11s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 17s
Harness Replays / Harness Replays (pull_request) Successful in 6s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 16s
gate-check-v3 / gate-check (pull_request) Successful in 15s
CI / Canvas (Next.js) (pull_request) Successful in 4s
sop-tier-check / tier-check (pull_request) Successful in 10s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 4s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / Python Lint & Test (pull_request) Successful in 4s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 4s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 4s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m7s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m18s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m45s
CI / Platform (Go) (pull_request) Failing after 4m15s
CI / all-required (pull_request) Failing after 1s
Previous raw TCP approach drained the request body FIRST, then sent the response. This caused a deadlock: Server: waiting to READ request body (blocking on conn.Read) Client: waiting for RESPONSE HEADERS (blocking on conn.Read from server) Neither can proceed — the client's request-body write is blocked waiting for response headers, so the server never receives the body, so the drain never completes, so the server never sends the response. Fix: send the response FIRST. The client's response-reader unblocks (gets response), so the client's request-body writer can complete and send the body. The drain goroutine then reads whatever the client sent. The server closes the connection while the drain is in progress — fine, the drain goroutine just gets a connection-closed error and exits. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 4530b67336 |
fix(handlers): raw TCP mock server with proper request-body drain
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 10s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
qa-review / approved (pull_request) Failing after 10s
Harness Replays / detect-changes (pull_request) Successful in 12s
security-review / approved (pull_request) Failing after 10s
sop-checklist-gate / gate (pull_request) Successful in 10s
CI / Detect changes (pull_request) Successful in 15s
E2E API Smoke Test / detect-changes (pull_request) Successful in 17s
sop-tier-check / tier-check (pull_request) Successful in 11s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 17s
gate-check-v3 / gate-check (pull_request) Successful in 17s
Harness Replays / Harness Replays (pull_request) Successful in 4s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 19s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 18s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 3s
CI / Canvas (Next.js) (pull_request) Successful in 4s
CI / Python Lint & Test (pull_request) Successful in 4s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 4s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 3s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m4s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m10s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m13s
CI / Platform (Go) (pull_request) Failing after 4m6s
CI / all-required (pull_request) Failing after 1s
Abandon httptest+Hijack — it has two fundamental problems for this use case:
1. Buffered-writer loss: httptest's Hijack() discards the buffered writer,
losing any bytes written via w.WriteHeader/w.Write that weren't already
flushed to the raw conn. The HTTP client never receives response headers,
blocking on ResponseHeaderTimeout=180s (the 2m8s hang).
2. Request-read deadlock: Go's httptest server keeps a read goroutine waiting
for the request body after the handler returns. Calling Hijack() while that
goroutine is still waiting causes a deadlock with the client's request-body
writer.
Fix: use raw TCP with net.Listener directly. The server:
1. Accepts one connection.
2. Reads HTTP request headers (blank line terminates).
3. Drains Content-Length bytes from the connection (prevents broken-pipe on
client request-body writer when we close).
4. Writes raw HTTP response directly to the raw conn (no buffered writer).
5. Brief sleep so client reads headers+body before FIN fires.
6. Close() sends FIN → client Read() returns io.EOF.
Also add allowLoopbackForTest() to each test so the SSRF guard permits
127.0.0.1 mock server URLs (same pattern as a2a_proxy_test.go).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|||
| 2198b874bf |
fix(handlers): write raw HTTP response after Hijack to bypass buffered writer
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 5s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 10s
Harness Replays / detect-changes (pull_request) Successful in 11s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
qa-review / approved (pull_request) Failing after 10s
security-review / approved (pull_request) Failing after 10s
CI / Detect changes (pull_request) Successful in 16s
sop-checklist-gate / gate (pull_request) Successful in 11s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 16s
E2E API Smoke Test / detect-changes (pull_request) Successful in 16s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 16s
sop-tier-check / tier-check (pull_request) Successful in 11s
gate-check-v3 / gate-check (pull_request) Successful in 16s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 18s
Harness Replays / Harness Replays (pull_request) Successful in 4s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 4s
CI / Canvas (Next.js) (pull_request) Successful in 5s
CI / Python Lint & Test (pull_request) Successful in 4s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 5s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 3s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m3s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 1m52s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 1m55s
CI / Platform (Go) (pull_request) Failing after 3m45s
CI / all-required (pull_request) Failing after 1s
Root cause of the 2m8s hang (which matched ResponseHeaderTimeout=180s): httptest's Hijack() discards the buffered writer, losing any bytes written via w.WriteHeader/w.Write that weren't already flushed to the raw TCP conn. The HTTP client therefore never receives response headers, blocking on ResponseHeaderTimeout (3 min). Fix: write the raw HTTP response directly to the raw conn AFTER Hijack(), completely bypassing httptest's buffered writer. This ensures: - Response headers reach the client immediately (not lost to buffered writer) - Client starts reading the response body - conn.Close() fires while client is mid-read → Read() returns EOF/error - executeDelegation completes in seconds, not minutes Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 404b5482e4 |
fix(handlers): do not touch r.Body before Hijack in mockAgentWithPartialBody
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 9s
Harness Replays / detect-changes (pull_request) Successful in 15s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 9s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 25s
CI / Detect changes (pull_request) Successful in 26s
E2E API Smoke Test / detect-changes (pull_request) Successful in 27s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 30s
qa-review / approved (pull_request) Failing after 11s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 26s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
Harness Replays / Harness Replays (pull_request) Successful in 5s
security-review / approved (pull_request) Failing after 13s
gate-check-v3 / gate-check (pull_request) Successful in 19s
sop-checklist-gate / gate (pull_request) Successful in 12s
sop-tier-check / tier-check (pull_request) Successful in 10s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 5s
CI / Canvas (Next.js) (pull_request) Successful in 4s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 4s
CI / Python Lint & Test (pull_request) Successful in 4s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 4s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m10s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m5s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m8s
CI / Platform (Go) (pull_request) Failing after 4m5s
CI / all-required (pull_request) Failing after 1s
Closing r.Body triggers the Go HTTP server's pipe mechanism to signal EOF to the request-body reader. On the CLIENT side, this causes the request-body writer goroutine to fail with "read from closed pipe", which hangs the HTTP request indefinitely (until TCP-level timeouts fire). Fix: remove all r.Body access. Just Hijack() + conn.Close() and return. Matching the exact pattern from a2a_proxy_test.go TestProxyA2A_BodyReadFailure_DeliveryConfirmed. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 52227bc92d |
fix(handlers): remove r.Body drain from mockAgentWithPartialBody
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 6s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 11s
E2E API Smoke Test / detect-changes (pull_request) Successful in 15s
Harness Replays / detect-changes (pull_request) Successful in 14s
qa-review / approved (pull_request) Failing after 13s
CI / Detect changes (pull_request) Successful in 18s
security-review / approved (pull_request) Failing after 13s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 19s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 19s
gate-check-v3 / gate-check (pull_request) Successful in 20s
Harness Replays / Harness Replays (pull_request) Successful in 6s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 22s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
CI / Shellcheck (E2E scripts) (pull_request) Successful in 6s
sop-checklist-gate / gate (pull_request) Successful in 12s
CI / Canvas (Next.js) (pull_request) Successful in 7s
sop-tier-check / tier-check (pull_request) Successful in 13s
CI / Python Lint & Test (pull_request) Successful in 6s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 7s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 4s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m13s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m14s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m15s
CI / Platform (Go) (pull_request) Failing after 4m53s
CI / all-required (pull_request) Failing after 3s
The previous httptest.Server implementation called io.Copy(io.Discard, r.Body) before Hijack(), which caused a 3-minute hang: the handler blocked waiting to finish reading the request body while the HTTP client was blocked writing the body (waiting for response headers that the handler hadn't sent yet). This is a classic deadlock. Fix: match the existing a2a_proxy_test.go pattern — do NOT read r.Body before Hijack(). The HTTP parser has already consumed request headers; the body may still be in flight from the client. The server closes r.Body when the handler returns (server-managed), and conn.Close() after Hijack() fires RST/EOF to the client, which is the desired "connection drop" simulation. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 99b8763524 |
fix(handlers): replace raw TCP mock with httptest.Server+Hijack in integration tests
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 6s
Harness Replays / detect-changes (pull_request) Successful in 14s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 14s
qa-review / approved (pull_request) Failing after 13s
security-review / approved (pull_request) Failing after 11s
CI / Detect changes (pull_request) Successful in 18s
E2E API Smoke Test / detect-changes (pull_request) Successful in 20s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 21s
gate-check-v3 / gate-check (pull_request) Successful in 20s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 23s
Harness Replays / Harness Replays (pull_request) Successful in 7s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 25s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
CI / Shellcheck (E2E scripts) (pull_request) Successful in 6s
CI / Canvas (Next.js) (pull_request) Successful in 8s
sop-checklist-gate / gate (pull_request) Successful in 15s
sop-tier-check / tier-check (pull_request) Successful in 15s
CI / Python Lint & Test (pull_request) Successful in 6s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 6s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 5s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m15s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m17s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m20s
CI / Platform (Go) (pull_request) Failing after 4m33s
CI / all-required (pull_request) Failing after 1s
The raw TCP mock servers used in tests 1-3 caused 5-minute CI timeouts. The issue was two-fold: 1. defer conn.Close() fired before the kernel TCP send buffer was drained, so HTTP headers never reached the client and it blocked forever waiting. 2. Even with an explicit 200ms sleep before Close(), the CI environment under load sometimes didn't drain the buffer in time, causing the 5-minute idle timeout (A2A_IDLE_TIMEOUT_SECONDS) to fire. Switch to httptest.Server with http.Hijack(): - httptest.Server handles the HTTP listener lifecycle properly. - Hijack() gives direct access to the raw TCP connection after HTTP headers are parsed, bypassing the buffered writer. - Flush() before Hijack() ensures data reaches the kernel TCP buffer. - Immediate conn.Close() after Flush() triggers a read error on the HTTP client (connection reset / EOF) even though headers arrived. This matches the pattern already proven in a2a_proxy_test.go for similar partial-body connection-drop scenarios. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 65d1db6c5e |
fix(handlers): ensure mock TCP server transmits data before closing
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 4s
Harness Replays / detect-changes (pull_request) Successful in 7s
CI / Detect changes (pull_request) Successful in 12s
E2E API Smoke Test / detect-changes (pull_request) Successful in 12s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 13s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 14s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 11s
qa-review / approved (pull_request) Failing after 11s
security-review / approved (pull_request) Failing after 11s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
gate-check-v3 / gate-check (pull_request) Successful in 14s
Harness Replays / Harness Replays (pull_request) Successful in 4s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 15s
sop-checklist-gate / gate (pull_request) Successful in 10s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 6s
CI / Canvas (Next.js) (pull_request) Successful in 6s
CI / Python Lint & Test (pull_request) Successful in 5s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
sop-tier-check / tier-check (pull_request) Successful in 11s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 7s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 5s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m4s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m14s
CI / Platform (Go) (pull_request) Failing after 4m20s
CI / all-required (pull_request) Failing after 1s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 7m24s
Bug: raw-TCP mock servers in integration tests used `defer conn.Close()` which fires immediately after `conn.Write` (buffered in kernel send buffer). The connection closed before the kernel TCP stack finished transmitting the response, so the Go HTTP client hung waiting for response headers that never arrived. Test 1 (200 + partial body) timed out at the 5-minute idle timeout: - mock server: Accept → Read → Write(135B) → defer Close → goroutine exits - client: sent request, waited forever for response headers - isDeliveryConfirmedSuccess path never reached Tests 2-3 (500 / empty body) passed in 500ms because the 500ms test-body-timeout caught the hanging goroutine. Fix is the same for all three: write the response, sleep 200ms (kernel TCP transmits), *then* close. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 164030ed14 |
fix(handlers): pass correct mock-server URL to setupIntegrationRedis
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 4s
Harness Replays / detect-changes (pull_request) Successful in 8s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 11s
qa-review / approved (pull_request) Failing after 10s
CI / Detect changes (pull_request) Successful in 13s
E2E API Smoke Test / detect-changes (pull_request) Successful in 14s
sop-checklist-gate / gate (pull_request) Successful in 11s
security-review / approved (pull_request) Failing after 12s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 16s
Harness Replays / Harness Replays (pull_request) Successful in 4s
sop-tier-check / tier-check (pull_request) Successful in 13s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 17s
gate-check-v3 / gate-check (pull_request) Successful in 15s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 17s
CI / Canvas (Next.js) (pull_request) Successful in 3s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 3s
CI / Python Lint & Test (pull_request) Successful in 4s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 5s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 3s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m9s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m7s
CI / Platform (Go) (pull_request) Failing after 4m33s
CI / all-required (pull_request) Failing after 0s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 7m14s
Root cause of 5-minute timeout: setupIntegrationRedis seeded Redis with http://bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb (the UUID as hostname), which the Go http.Client cannot resolve. The SSRF validation passes (valid DNS hostname) but DNS resolution fails → HTTP request hangs for the client's default 60s timeout before retrying → test times out at 5m. Fix: change setupIntegrationRedis(t) → setupIntegrationRedis(t, agentURL) so each test passes the actual mock server address (http://127.0.0.1:PORT) before the function caches it. Remove the redundant db.RDB.Set override in Test1 (URL now correct from the start). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| fa2b1d78fc |
fix(handlers): initialize db.RDB before executeDelegation in integration tests
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 4s
Harness Replays / detect-changes (pull_request) Successful in 7s
E2E API Smoke Test / detect-changes (pull_request) Successful in 11s
CI / Detect changes (pull_request) Successful in 12s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 11s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 10s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
qa-review / approved (pull_request) Failing after 13s
Harness Replays / Harness Replays (pull_request) Successful in 4s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 15s
sop-checklist-gate / gate (pull_request) Successful in 12s
security-review / approved (pull_request) Failing after 12s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 17s
gate-check-v3 / gate-check (pull_request) Successful in 16s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 4s
CI / Canvas (Next.js) (pull_request) Successful in 6s
sop-tier-check / tier-check (pull_request) Successful in 11s
CI / Python Lint & Test (pull_request) Successful in 5s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 5s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 3s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m5s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m2s
CI / Platform (Go) (pull_request) Failing after 4m18s
CI / all-required (pull_request) Failing after 1s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 7m17s
RecordAndBroadcast (called by executeDelegation) calls db.RDB.Publish(), which panics when db.RDB is nil. Fix: - Add setupIntegrationRedis() helper that starts miniredis, sets db.RDB, and seeds the target workspace URL via db.CacheURL - Call setupTestRedis() directly in the Redis-down test (no URL cached, so resolveAgentURL falls back to DB which also has no URL → target unreachable) - Import db and redis packages Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| c831199562 |
fix(handlers): use valid UUIDs for workspace seeds in integration tests
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 5s
Harness Replays / detect-changes (pull_request) Successful in 8s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 9s
sop-checklist / all-items-acked (pull_request) [soft-fail tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
qa-review / approved (pull_request) Failing after 10s
security-review / approved (pull_request) Failing after 11s
CI / Detect changes (pull_request) Successful in 16s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 15s
sop-checklist-gate / gate (pull_request) Successful in 10s
E2E API Smoke Test / detect-changes (pull_request) Successful in 16s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 18s
Harness Replays / Harness Replays (pull_request) Successful in 5s
gate-check-v3 / gate-check (pull_request) Successful in 15s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 17s
sop-tier-check / tier-check (pull_request) Successful in 9s
CI / Canvas (Next.js) (pull_request) Successful in 4s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 3s
CI / Python Lint & Test (pull_request) Successful in 4s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 4s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 4s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m4s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m10s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m19s
CI / Platform (Go) (pull_request) Failing after 4m43s
CI / all-required (pull_request) Failing after 1s
workspaces.id is UUID-typed. The string IDs like "ws-source-159-integration" caused: pq: invalid input syntax for type uuid Fix: use real UUIDs (AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA / BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB) matching the pattern in delegation_ledger_integration_test.go. Also add the required 'name' column (NOT NULL) to the INSERT. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 7ae80d3ed4 |
fix(handlers): remove unused os and mdb imports in integration test
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 4s
Harness Replays / detect-changes (pull_request) Successful in 7s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
E2E API Smoke Test / detect-changes (pull_request) Successful in 14s
CI / Detect changes (pull_request) Successful in 14s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 10s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 14s
qa-review / approved (pull_request) Failing after 12s
security-review / approved (pull_request) Failing after 12s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 15s
sop-checklist-gate / gate (pull_request) Successful in 11s
sop-tier-check / tier-check (pull_request) Successful in 12s
Harness Replays / Harness Replays (pull_request) Successful in 3s
gate-check-v3 / gate-check (pull_request) Successful in 15s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 17s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 4s
CI / Canvas (Next.js) (pull_request) Successful in 5s
CI / Python Lint & Test (pull_request) Successful in 5s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 7s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 2s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m7s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m23s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m40s
CI / Platform (Go) (pull_request) Failing after 4m38s
CI / all-required (pull_request) Failing after 1s
Both packages were imported but not referenced in the file. Go build tag "integration" still compiles them — caught by CI. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| bb993ec5a8 |
test(handlers): migrate 4x executeDelegation tests to real-Postgres integration
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 5s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 2
Harness Replays / detect-changes (pull_request) Successful in 11s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 12s
sop-checklist-gate / gate (pull_request) Successful in 10s
security-review / approved (pull_request) Failing after 11s
qa-review / approved (pull_request) Failing after 12s
CI / Detect changes (pull_request) Successful in 17s
sop-tier-check / tier-check (pull_request) Successful in 10s
E2E API Smoke Test / detect-changes (pull_request) Successful in 17s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 17s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 18s
gate-check-v3 / gate-check (pull_request) Successful in 16s
Harness Replays / Harness Replays (pull_request) Successful in 5s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 19s
CI / Canvas (Next.js) (pull_request) Successful in 4s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 4s
CI / Python Lint & Test (pull_request) Successful in 3s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 5s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 6s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m17s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2m29s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Failing after 2m34s
CI / Platform (Go) (pull_request) Failing after 4m48s
CI / all-required (pull_request) Failing after 1s
mc#664 Class 1: Replace 4 sqlmock-based TestExecuteDelegation_* tests (+ 3 expectExecuteDelegation* helpers) in delegation_test.go with 5 real-Postgres integration tests in delegation_executor_integration_test.go. Deleted: - expectExecuteDelegationBase/Success/Failed helpers (sqlmock-only) - TestExecuteDelegation_DeliveryConfirmedProxyError_TreatsAsSuccess - TestExecuteDelegation_ProxyErrorNon2xx_RemainsFailed - TestExecuteDelegation_ProxyErrorEmptyBody_RemainsFailed - TestExecuteDelegation_CleanProxyResponse_Unchanged Added (delegation_executor_integration_test.go): - TestIntegration_ExecuteDelegation_DeliveryConfirmedProxyError_TreatsAsSuccess — 200 with partial body → 'completed' (isDeliveryConfirmedSuccess guard) - TestIntegration_ExecuteDelegation_ProxyErrorNon2xx_RemainsFailed — 500 with partial body → 'failed' (status>=200&&<300 guard fails) - TestIntegration_ExecuteDelegation_ProxyErrorEmptyBody_RemainsFailed — 200 with empty body → 'failed' (len(body)>0 guard fails) - TestIntegration_ExecuteDelegation_CleanProxyResponse_Unchanged — clean 200 → 'completed' (baseline) - TestIntegration_ExecuteDelegation_RedisDown_FallsBackToDB — no Redis → graceful failure (not panic) Each integration test verifies the delegations table state end-to-end, which sqlmock cannot cover (drift in last_outbound_at UPDATE, lookupDeliveryMode/Runtime SELECTs, a2a_receive INSERT, recordLedgerStatus writes — mc#664 root cause). The existing Handlers Postgres Integration CI job picks up the new TestIntegration_* tests automatically. Closes: #686 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 4dce9800a5 |
fix(handlers): OFFSEC-001 — scrub req.Method from dispatchRPC default error
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 13s
CI / Detect changes (pull_request) Successful in 27s
Harness Replays / detect-changes (pull_request) Successful in 18s
E2E API Smoke Test / detect-changes (pull_request) Successful in 44s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 51s
security-review / approved (pull_request) Failing after 18s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 59s
qa-review / approved (pull_request) Failing after 19s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 47s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 8s
CI / Canvas (Next.js) (pull_request) Successful in 10s
CI / Python Lint & Test (pull_request) Successful in 9s
Harness Replays / Harness Replays (pull_request) Successful in 9s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m28s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 10s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 6s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 4m21s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 4m43s
Secret scan / Scan diff for credential-shaped strings (pull_request) Bypassing null-state block (Gitea Actions emitter bug mc#628)
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 7
sop-checklist-gate / gate (pull_request) Successful in 7s
sop-tier-check / tier-check (pull_request) Successful in 8s
gate-check-v3 / gate-check (pull_request) Successful in 10s
CI / Platform (Go) (pull_request) Failing after 11m45s
CI / all-required (pull_request) Failing after 1s
audit-force-merge / audit (pull_request) Successful in 3s
Line 443 of mcp.go concatenated user-controlled req.Method into the
JSON-RPC -32601 error message, allowing an agent or canvas client to
inject arbitrary strings into the response via the method field.
Fix: replace "method not found: " + req.Method with the constant
"method not found" — matching the OFFSEC-001 scrub contract applied
to the InvalidParams (line 428) and UnknownTool (line 433) paths.
Test: extend TestMCPHandler_UnknownMethod_Returns32601 with two new
assertions:
1. resp.Error.Message == "method not found"
2. defence-in-depth check that the sent method name never appears
in the response (strings.Contains guard)
Issue: #684
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|||
| 57bf2eccc6 |
fix(test/delegation): add CanCommunicate mock expectations
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 17s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 15s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 19s
E2E API Smoke Test / detect-changes (pull_request) Successful in 44s
CI / Detect changes (pull_request) Successful in 53s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 48s
qa-review / approved (pull_request) Failing after 22s
gate-check-v3 / gate-check (pull_request) Successful in 36s
security-review / approved (pull_request) Failing after 19s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 47s
sop-tier-check / tier-check (pull_request) Successful in 24s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 12s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 22s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 11s
audit-force-merge / audit (pull_request) Successful in 21s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 5m15s
CI / Python Lint & Test (pull_request) Successful in 7m57s
CI / Canvas (Next.js) (pull_request) Successful in 14m49s
CI / Platform (Go) (pull_request) Failing after 16m3s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Failing after 6s
executeDelegation(sourceID, targetID) fires proxyA2ARequest which calls registry.CanCommunicate(sourceID, targetID) when source != target. Both IDs are different test fixtures (ws-source-159, ws-target-159), so the lookup fires two separate getWorkspaceRef queries: SELECT id, parent_id FROM workspaces WHERE id = $1 -- sourceID SELECT id, parent_id FROM workspaces WHERE id = $1 -- targetID expectExecuteDelegationBase only mocked the URL/status fallback query. sqlmock would fail with "unexpected query" when the CanCommunicate lookups fired — this was a silent failure because the tests never verified ExpectationWereMet on the CanCommunicate path. Fix: add two ExpectQuery rows for both parent_id lookups (both NULL, root-level siblings, allowed). Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 4c78001186 |
fix(pendinguploads): accept done channel in StartSweeperWithIntervalForTest
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 12s
CI / Detect changes (pull_request) Successful in 22s
E2E API Smoke Test / detect-changes (pull_request) Successful in 22s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 24s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 21s
Harness Replays / detect-changes (pull_request) Successful in 19s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 12s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 23s
gate-check-v3 / gate-check (pull_request) Failing after 15s
qa-review / approved (pull_request) Failing after 10s
security-review / approved (pull_request) Failing after 12s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 18s
sop-tier-check / tier-check (pull_request) Successful in 27s
CI / Canvas (Next.js) (pull_request) Successful in 21s
CI / Python Lint & Test (pull_request) Successful in 11s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 14s
Harness Replays / Harness Replays (pull_request) Successful in 12s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 12s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 3m41s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 4m4s
CI / Platform (Go) (pull_request) Failing after 7m14s
CI / all-required (pull_request) Failing after 2s
audit-force-merge / audit (pull_request) Successful in 4s
Fixes a build failure where the TickerFiresAdditionalCycles test called StartSweeperWithIntervalForTest with 5 arguments (ctx, store, ackRetention, interval, done) but the export only accepted 4. Also fixes a pre-existing vet error in org_external.go: a no-op `append(gitArgs(...))` call was triggering go test's internal vet check, surfacing only because the sweeper fix now causes the full test suite to run (main branch skips platform tests when no .go files change, completing in 10s vs 14min for the full suite). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| f0021d630a |
fix(pendinguploads): use 100ms ticker in TickerFiresAdditionalCycles test
TestStartSweeperWithInterval_TickerFiresAdditionalCycles was flaky on loaded CI runners because it called StartSweeperForTest, which passes SweepInterval (5 minutes) as the ticker interval. The test expects ≥2 cycles in a 2-second window, but a 5-minute ticker fires 0-1 times under CPU contention, causing "waited 2s for 2 sweep cycles, got 1". Fix: call StartSweeperWithIntervalForTest directly with a 100ms ticker interval, which is the intended test-harness pattern (per the export_test comment). The done-channel teardown (cancel + <-done) is preserved. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 36c0a662f0 |
fix(org): convert map[string]string to map[string]struct{} before IsSatisfied call
loadWorkspaceEnv returns map[string]string but EnvRequirement.IsSatisfied
expects map[string]struct{}. Without this conversion the Go compiler
rejects the call, causing CI / Platform (Go) to fail.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|||
| e8af1df261 |
fix(org): add per-workspace RequiredEnv preflight check (#232)
Before returning 201 on /org/import, verify that every RequiredEnv
declared at the workspace level is covered by either:
(a) a global secret key (already validated by the existing preflight)
(b) a key present in the workspace's .env files (org root .env +
per-workspace <files_dir>/.env), matching the resolution order
used by createWorkspaceTree at runtime
Previously, collectOrgEnv correctly walked all
tmpl.Workspaces[].RequiredEnv and added them to the global preflight
check, but loadConfiguredGlobalSecretKeys only checked global_secrets.
Workspace-specific .env files are injected into workspace_secrets AFTER
the 201 response, so an unsatisfied per-workspace RequiredEnv returned
201 and the workspace came up NOT CONFIGURED — breaking on every LLM
call with no signal to the operator.
Changes:
- org_import.go: add PerWorkspaceUnsatisfied struct +
collectPerWorkspaceUnsatisfied (mirrors createWorkspaceTree's
three-source .env resolution stack)
- org.go: after the global preflight block, call
collectPerWorkspaceUnsatisfied if orgBaseDir != ""; return 412
with per-workspace details before creating any workspaces
- org_workspace_required_env_test.go: 8 unit tests covering global
coverage, .env coverage, missing keys, any-of groups, nested
children, empty orgBaseDir, and multiple workspaces
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|||
| b95a20bb9e |
fix(provisioner): fix type mismatch in checkTool seam
Some checks failed
E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request) Has been skipped
publish-runtime-autobump / bump-and-tag (pull_request) Has been skipped
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 11s
Harness Replays / detect-changes (pull_request) Successful in 15s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 16s
Harness Replays / Harness Replays (pull_request) Successful in 6s
sop-tier-check / tier-check (pull_request) Successful in 16s
gate-check-v3 / gate-check (pull_request) Failing after 23s
CI / Detect changes (pull_request) Successful in 37s
E2E API Smoke Test / detect-changes (pull_request) Successful in 40s
E2E Staging SaaS (full lifecycle) / pr-validate (pull_request) Successful in 44s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 45s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 42s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 7s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 45s
CI / Canvas (Next.js) (pull_request) Successful in 7s
publish-runtime-autobump / pr-validate (pull_request) Successful in 49s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 7s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 7s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 3m8s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 2m23s
CI / Platform (Go) (pull_request) Failing after 5m38s
CI / Python Lint & Test (pull_request) Successful in 7m14s
checkToolOnPath must match the checkTool func(tool string) error signature in LocalBuildOptions — Go does not allow assigning a function with (string, error) returns to a func(string) error variable. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 6f0001d04c |
fix(provisioner): fail-fast pre-flight check for docker+git in local-build mode
Some checks failed
E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request) Has been skipped
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 13s
Harness Replays / detect-changes (pull_request) Successful in 14s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 12s
sop-tier-check / tier-check (pull_request) Successful in 14s
CI / Detect changes (pull_request) Successful in 39s
gate-check-v3 / gate-check (pull_request) Failing after 25s
E2E API Smoke Test / detect-changes (pull_request) Successful in 45s
E2E Staging SaaS (full lifecycle) / pr-validate (pull_request) Successful in 48s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 47s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 49s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 48s
Harness Replays / Harness Replays (pull_request) Successful in 7s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 8s
CI / Canvas (Next.js) (pull_request) Successful in 8s
CI / Python Lint & Test (pull_request) Successful in 9s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 9s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 8s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 9s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / Platform (Go) (pull_request) Failing after 3m21s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 3m27s
Before reaching the clone/build cold path, check that both `docker` and `git` are on PATH. Previously, a missing `docker` would produce a cryptic "exec: docker: executable file not found" from deep inside the docker-has-tag or docker-build call. Now the error surfaces immediately with: local-build: "docker" not found on PATH — local-build mode requires both docker and git; either install them, or set MOLECULE_IMAGE_REGISTRY so local-build is bypassed The check runs before the cache-hit fast path too, since docker is used for image inspect + tag even on a cache hit. Adds checkTool seam to LocalBuildOptions so tests can inject a stub (no-op in makeTestOpts; two new tests exercise the missing-tool path). Fixes issue #529 option B. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 952bfb3ca2 |
fix(workspace): replace asyncio.get_event_loop().run_until_complete with asyncio.run() (#307) (#498)
Some checks failed
Block internal-flavored paths / Block forbidden paths (push) Successful in 18s
Harness Replays / detect-changes (push) Failing after 18s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (push) Successful in 17s
Harness Replays / Harness Replays (push) Has been skipped
publish-workspace-server-image / build-and-push (push) Failing after 16s
CI / Detect changes (push) Successful in 1m26s
E2E API Smoke Test / detect-changes (push) Successful in 1m17s
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 1m19s
Handlers Postgres Integration / detect-changes (push) Successful in 1m12s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 18s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Successful in 11s
publish-runtime-autobump / autobump-and-tag (push) Failing after 1m19s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 47s
CI / Canvas (Next.js) (push) Successful in 11s
CI / Shellcheck (E2E scripts) (push) Successful in 8s
CI / Canvas Deploy Reminder (push) Has been skipped
E2E Staging External Runtime / E2E Staging External Runtime (push) Successful in 5m40s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Successful in 3m9s
E2E API Smoke Test / E2E API Smoke Test (push) Failing after 5m31s
Handlers Postgres Integration / Handlers Postgres Integration (push) Successful in 6m21s
Sweep stale e2e-* orgs (staging) / Sweep e2e orgs (push) Successful in 19s
Sweep stale Cloudflare Tunnels / Sweep CF tunnels (push) Failing after 23s
CI / Python Lint & Test (push) Failing after 7m38s
Continuous synthetic E2E (staging) / Synthetic E2E against staging (push) Failing after 4m36s
CI / Platform (Go) (push) Has been cancelled
Co-authored-by: core-be <core-be@agents.moleculesai.app> Co-committed-by: core-be <core-be@agents.moleculesai.app> |
|||
| aa49dbc728 |
fix(handlers): add rows.Err() checks after rows.Next() loops
Add deferred error checks following rows.Next() iteration in: - ListDelegations (delegation.go): log on error, continue serving results - org import reconcile orphan query (org.go): log + append to reconcileErrs Fixes the rows.Err() gap identified in the delegated rows.Err() check PR (#302, closed; replaced by this PR). Two additional files already had the check (activity.go, memories.go) — pattern applied consistently here. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 706df19b43 |
[core-be-agent] fix(security#321): CWE-22 path traversal guards in loadWorkspaceEnv
Two vulnerable call sites confirmed on origin/main: 1. org_helpers.go:loadWorkspaceEnv (line 101): filesDir from untrusted org YAML joined directly with orgBaseDir without traversal guard. A malicious filesDir like "../../../etc" escapes the org root and reads arbitrary files. 2. org_import.go:createWorkspaceTree (line 494): same pattern directly in the env-loading block — not covered by staging-targeted PR #345. Fix (both locations): call resolveInsideRoot(orgBaseDir, filesDir) before filepath.Join. On traversal detection, org_helpers.go returns an empty map (caller contract); org_import.go silently skips the workspace .env override (matches existing template-resolution pattern in the same function). Tests: org_helpers_test.go — 3 cases covering traversal rejection, workspace-override happy path, and empty filesDir edge case. Closes: molecule-core#362, molecule-core#321 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| d67c3da13e | fix(platform): A2A proxy ResponseHeaderTimeout 60s -> 180s default, env-configurable | |||
| 65f9df24b8 | Merge branch 'main' into fix/external-connection-user-facing-urls | |||
| a355b6f0ad |
fix(workspace-server): emit Gitea/PyPI URLs for external user instructions (RFC #229 P2-5)
The Molecule-AI GitHub org was suspended 2026-05-06; canonical SCM is now git.moleculesai.app. external_connection.go was still emitting github.com URLs in operator-facing copy-paste blocks, breaking external-agent onboarding silently. Per-site decisions (8 emit sites in 1 file): - L124 (channel template doc comment): swap source-of-truth comment to Gitea host. - L137 /plugin marketplace add Molecule-AI/...: swap to explicit Gitea HTTPS URL form. End-to-end-verified path per internal#37 § 1.A. - L138 /plugin install molecule@molecule-mcp-claude-channel: marketplace name is molecule-channel (per remote .claude-plugin/marketplace.json), not the repo name. Fix to molecule@molecule-channel. - L157 --channels plugin:molecule@molecule-mcp-claude-channel: same marketplace-name fix. - L179 user-facing GitHub URL: swap to Gitea. - L261 pip install git+https://github.com/Molecule-AI/molecule-sdk-python: not on PyPI; swap to git+https://git.moleculesai.app/molecule-ai/... - L310 hermes-channel doc comment: swap source-of-truth comment. - L339 pip install git+https://github.com/Molecule-AI/hermes-channel-molecule: not on PyPI; swap to Gitea. - L369 issue-tracker URL: swap to Gitea. Verification: - molecule-ai-workspace-runtime, codex-channel-molecule are on PyPI (200); no swap needed for those pip lines (they were already package-name form). - molecule-mcp-claude-channel, molecule-sdk-python, hermes-channel-molecule are NOT on PyPI; swapped to git+https://git.moleculesai.app/molecule-ai/ form. All three repos are public on Gitea (default branch main) and serve git-upload-pack unauthenticated (verified curl 200 against /info/refs?service=git-upload-pack). - Third-party github URLs (gin import, openai/codex, NousResearch/ hermes-agent upstream issue trackers, npm @openai/codex) intentionally preserved. Adds TestExternalTemplates_NoBrokenMoleculeAIGitHubURLs regression guard to prevent the same broken URLs from re-emerging on future template edits. go vet / go build / existing TestExternal* — all clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
|||
| 0846ebc1f6 |
fix(workspace-server): respect MOLECULE_IMAGE_REGISTRY in imagewatch + admin_workspace_images (RFC #229 P2-4)
Two surfaces in workspace-server hardcoded `ghcr.io` and silently bypassed
the `MOLECULE_IMAGE_REGISTRY` env override that flips every other image
operation to the configured private mirror (e.g. AWS ECR in production):
1. internal/imagewatch/watch.go — image-auto-refresh polled
`https://ghcr.io/v2/...` and `https://ghcr.io/token` directly. Post-
suspension, with the platform pointed at ECR, the watcher silently
stopped seeing digest changes (every poll either 404'd or hung on a
registry it has no business talking to).
2. internal/handlers/admin_workspace_images.go — Docker Engine auth
payload pinned `serveraddress: "ghcr.io"`, so when the operator sets
`MOLECULE_IMAGE_REGISTRY=…ecr…/molecule-ai` the engine matched the
wrong credential entry on every authenticated pull.
Fix: extract `provisioner.RegistryHost()` returning the host portion of
`RegistryPrefix()` (e.g. `ghcr.io` ← `ghcr.io/molecule-ai`, or
`004947743811.dkr.ecr.us-east-2.amazonaws.com` ← the ECR mirror prefix),
and route both surfaces through it. Default behavior is unchanged for
OSS users on GHCR.
Tests
- New `TestRegistryHost_SplitsHostFromOrgPath` and
`TestRegistryHost_NeverEmpty` pin the helper across GHCR / ECR /
self-hosted Gitea / bare-host edge cases.
- New `TestGHCRAuthHeader_RespectsRegistryEnv` asserts the Docker auth
payload's `serveraddress` follows MOLECULE_IMAGE_REGISTRY (and never
leaks the org-path suffix).
- New `TestRemoteDigest_RegistryHostFollowsEnv` stands up an httptest
server, points MOLECULE_IMAGE_REGISTRY at it, and confirms both the
token endpoint and the manifest HEAD land there — i.e. the full image-
watch loop respects the env override end-to-end.
Both new tests were verified to FAIL on the pre-fix code path before the
helper was wired in, so a future revert can't silently re-introduce the
bug.
Out of scope (followup needed)
ECR uses `aws ecr get-authorization-token` (SigV4 + basic-auth) instead
of GHCR's `/token?service=…&scope=…` flow. This PR makes the URL host-
configurable; the bearer-token negotiation in `fetchPullToken` still
speaks the GHCR flavor. On ECR with `IMAGE_AUTO_REFRESH=true`, the
watcher will now fail loudly at the token fetch (logged per tick) rather
than silently hitting ghcr.io. Operators on ECR should keep
IMAGE_AUTO_REFRESH=false until ECR auth is wired — tracked as a separate
task. Net effect of this PR alone is strictly better than pre-fix:
fail-loud > silent-broken.
Refs: RFC #229 P2-4
tier:low
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
|||
| bc555aeb45 | Merge pull request 'fix(provisioner): export MOLECULE_MODEL canonical env + read it first; drop stray brace in delegation_test.go' (#286) from fix/molecule-model-env-go into main | |||
| 9b930d8e39 |
fix(provisioner): export MOLECULE_MODEL (canonical model env) + read it first; drop stray brace in delegation_test.go
internal#226 follow-up #1. `molecule_runtime.config` resolves the picked
model as `MOLECULE_MODEL` > `MODEL` > (legacy) `MODEL_PROVIDER` (#280) —
this side of the boundary now matches:
- applyRuntimeModelEnv reads `MOLECULE_MODEL` ahead of `MODEL` /
`MODEL_PROVIDER`, and exports BOTH `MOLECULE_MODEL` and `MODEL`
(the latter kept for back-compat with everything that already reads
`os.environ["MODEL"]`). So a workspace whose secrets carry
`MOLECULE_MODEL` (the unambiguous name) is honoured, and the
`MODEL_PROVIDER` misnomer — which got set to provider slugs
("minimax") and even runtime names ("claude-code") — is the lowest-
priority fallback, exactly as on the runtime side.
- the resolution-order comment is updated to flag MODEL_PROVIDER as the
legacy-and-misleadingly-named var.
Also drops a stray trailing `}` in delegation_test.go (committed in
|
|||
| cc4d7fc2c1 | Merge branch 'main' into fix/offsec-001-error-message-scrubbing | |||
|
|
14e3956d8a | Merge branch 'main' into fix/core-248-pluginresolver-and-plgh | ||
|
|
9e3d420363 |
[core-lead-agent] fix(core#228): cascade fixes for PluginResolver — make main compile
PR #256 introduced PluginResolver to break the SourceResolver redeclaration
deadlock, but missed three downstream call-sites that left main uncompilable:
1. plugins/drift_sweeper.go: PluginResolver.Resolve was declared returning
PluginResolver (recursive). *Registry.Resolve returns the production
SourceResolver from source.go, so *Registry didn't satisfy PluginResolver.
Fix: Resolve returns SourceResolver. Add compile-time assertion that
*Registry satisfies PluginResolver so any future signature drift fails
the build instead of router wiring.
2. plugins/drift_sweeper_test.go: stubResolver was still declared with the
old SourceResolver shape AND asserted against SourceResolver — the
assertion failed because stubResolver lacks Scheme()/Fetch(). Fix: stub
is a PluginResolver; assertion targets PluginResolver. Drop the unused
"database/sql" import that fails go vet.
3. router/router.go:
- The
|
||
| 7d1a189f2e |
fix(mcp): scrub err.Error() from JSON-RPC error messages (OFFSEC-001)
Replace all three err.Error() leaks in mcp.go with constant strings, consistent with the same fix applied to 22 other files in PRs #1193/1206/1219/#168. - Call handler (line ~329): "parse error: " + err.Error() → "parse error" - dispatchRPC params unmarshal (line ~417): "invalid params: " + err.Error() → "invalid parameters" - dispatchRPC tool call (line ~422): err.Error() → "tool call failed" + log.Printf server-side for forensics Routes protected by WorkspaceAuth (C1) and MCPRateLimiter (C2) — this is defence-in-depth per OFFSEC-001 / #259. Tests added: - TestMCPHandler_Call_MalformedJSON_ReturnsConstantParseError - TestMCPHandler_dispatchRPC_InvalidParams_ReturnsConstantMessage - TestMCPHandler_dispatchRPC_UnknownTool_ReturnsConstantMessage - TestMCPHandler_dispatchRPC_InvalidParams_ArrayInsteadOfObject Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
|||
| 70f8482399 |
fix(core#248): reorder router.go plugin init before drift handler — plgh ordering fix
Plgh was referenced at line 505 before it was created at line 632, causing
"undefined: plgh" on main. Moved the entire Plugins block to before the
drift handler block. No functional change to registered routes — only
declaration order. Combined with
|