Commit Graph

4721 Commits

Author SHA1 Message Date
devops-engineer
419c109f1d chore: sync main → staging (auto-resolved workflow conflicts via main-wins)
Conflicted files in .github/workflows/ taken from main:
  .github/workflows/ci.yml
  .github/workflows/e2e-staging-canvas.yml
  .github/workflows/retarget-main-to-staging.yml

Conflicts arose from main advancing through PR #66/#79/#89 (CI workflow rewrites)
while staging hadn't picked up the changes yet. Main is the source of truth for
CI workflows; staging is downstream.

Co-authored-by: Claude (orchestrator)
2026-05-08 01:00:48 +00:00
97c042f666 Merge branch 'main' into fix/hermes-agent-doc-gitea-migration 2026-05-08 00:54:30 +00:00
3d6303afcc fix(ci): rewrite retarget-main-to-staging for Gitea REST API (#79)
Closes #74. Approved by security-auditor.
2026-05-08 00:26:27 +00:00
3fcaa1fcc5 Merge branch 'main' into fix/hermes-agent-doc-gitea-migration 2026-05-08 00:21:17 +00:00
7f61206a18 Merge branch 'staging' into fix/saas-plugin-install-eic 2026-05-08 00:21:10 +00:00
6c823cf673 Merge branch 'main' into fix/196-retarget-main-to-staging-gitea-rest 2026-05-08 00:20:49 +00:00
12ff797d12 fix(ci): close 3 chronic Gitea-Actions workflow flakes (#92)
Closes #88. Bundles localhost→127.0.0.1 + 2 other Gitea-act_runner flakes per feedback_gitea_actions_migration_audit_pattern. Approved by security-auditor.
2026-05-08 00:20:42 +00:00
4193d54852 fix(ci): pin actions/upload-artifact + download-artifact to @v3 (#89)
Closes #210. Unblocks 5 stuck PRs (#53/#54/#69/#71/#76/#81). Approved by security-auditor.
2026-05-08 00:20:00 +00:00
7eb348536b fix(harness): bake cf-proxy nginx.conf at build time, not via configs:
The previous configs:-based fix (87b971a2) didn't actually fix the DinD
issue — Compose v2 falls back to bind mounts for `configs:` when swarm
mode is not active, so the resulting runc invocation still tries to
mount /workspace/.../cf-proxy/nginx.conf from the OUTER host filesystem
that the act_runner-vs-host-docker socket-mount can't see. Same
"not a directory" error returned.

Switch to a thin Dockerfile (cf-proxy/Dockerfile) that COPYs nginx.conf
into nginx:1.27-alpine. The build context is uploaded to the daemon as
a tarball, not bind-mounted from the host filesystem, so the path
translation gap doesn't apply. Verified locally: `docker build` +
`docker run cf-proxy nginx -T` reproduces the baked config end-to-end.

Trade-off: ~2-3s build cost on every harness up. Acceptable for the
Gitea CI gate; local-dev re-builds the image only when nginx.conf
changes (Docker layer cache).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 17:09:08 -07:00
87b971a292 fix(ci): close 3 chronic Gitea-Actions workflow flakes (closes #88)
Three workflows have been failing on every push to this Gitea repo for
GitHub-shaped reasons that don't translate to act_runner. Surfaced
while landing #84; bundled per `feedback_gitea_actions_migration_audit_pattern`
("bundle per-repo, not per-finding") instead of three separate PRs.

1) handlers-postgres-integration: localhost → 127.0.0.1
   - lib/pq tries to dial localhost → ::1 first; the postgres service
     container only listens on IPv4 → ECONNREFUSED → all
     TestIntegration_* fail. Pin IPv4 to make the job deterministic.

2) pr-guards / disable-auto-merge-on-push: Gitea no-op
   - The previous reusable-workflow caller invoked `gh pr merge
     --disable-auto`, which calls GitHub's GraphQL API. Gitea returns
     HTTP 405 on /api/graphql → step always fails. Inline the step so
     it can detect Gitea (GITEA_ACTIONS=true OR repo url under
     moleculesai.app) and no-op with a notice. Auto-merge gating is
     moot on Gitea anyway: there's no `--auto` primitive being
     touched. Job stays ALWAYS-RUN so branch protection's required
     check still lands SUCCESS (avoids the SKIPPED-in-set trap from
     `feedback_branch_protection_check_name_parity`).

3) Harness Replays: cf-proxy nginx.conf via docker `configs:` (not bind)
   - act_runner runs the workflow inside a runner container; runc in
     the docker daemon below resolves bind-mount source paths on the
     OUTER host, not inside the runner. The path
     `/workspace/.../cf-proxy/nginx.conf` is invisible there → "not a
     directory" runc error. Switching to compose `configs:` packages
     the file as content rather than a host bind, sidestepping the
     DinD path-translation gap.

Local validation:
  - YAML parsed clean for all 3 files.
  - cf-proxy nginx.conf: standalone `docker compose run cf-proxy
    nginx -T` reproduced the configs: mount end-to-end and dumped the
    config correctly. The full harness compose still renders via
    `docker compose config`.

Real-CI verification will land on this branch's first push.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 17:06:09 -07:00
devops-engineer
0bcf195fbc docs(hermes): hermes-agent fork moved to Gitea (post-suspension)
The `HongmingWang-Rabbit/hermes-agent` fork is no longer reachable on
github.com (account suspended 2026-05-06). The patched fork now lives
at https://git.moleculesai.app/molecule-ai/hermes-agent. Same SHAs,
same branches — pure URL flip.

See molecule-ai/internal#72 for the github.com fork shell decision.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 16:57:57 -07:00
8885f7cd12 fix(ci): pin actions/upload-artifact + download-artifact to @v3 for Gitea compatibility
actions/upload-artifact@v4+ and download-artifact@v4+ use the GHES 3.10+
artifact protocol that Gitea Actions (act_runner v0.6 / Gitea 1.22.x)
does NOT implement. Failure cite from PR #54 run 1325 jobs/2:

  ::error::@actions/artifact v2.0.0+, upload-artifact@v4+ and
  download-artifact@v4+ are not currently supported on GHES.

Pinned all 3 references to v3.2.2 (latest v3) at SHA-pinned form for
supply-chain hygiene, matching the existing `uses:` style in this repo.
Affected workflows:
  - ci.yml (Canvas Next.js coverage upload, blocks `CI / Canvas (Next.js)`
    required check on every PR — was the merge-queue blocker for #53,
    #54, #69, #71, #76, #81)
  - e2e-staging-canvas.yml (Playwright report + screenshots on failure)

No download-artifact callers in the repo, so v3-pin doesn't compose-break
anywhere. Drop these pins post-Gitea-1.23+ when the v4 artifact protocol
ships, or migrate to a Gitea-native action.

Closes #210.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 16:54:44 -07:00
0c7f3c8909 chore: sync main → staging (auto, cdbf28fd) 2026-05-07 23:45:36 +00:00
cdbf28fd76 ci(canary): synthetic-check cron for AUTO_SYNC_TOKEN rotation drift (#77)
6h cron probes auth + scope + git-push --dry-run. Closes #72. Approved by security-auditor.
2026-05-07 23:45:25 +00:00
3f9ba90672 chore: sync main → staging (auto, 07bd91e4) 2026-05-07 23:44:31 +00:00
4b82db72a7 Merge branch 'main' into fix/issue-72-auto-sync-token-canary-v2 2026-05-07 23:44:22 +00:00
07bd91e436 fix(ci): replace gh run list with Gitea commit-status query (#83)
Class F of #75 sweep. /commits/{sha}/statuses replaces unavailable workflow-runs API. 4 mapping buckets verified against synthetic+real Gitea data. Approved by security-auditor.
2026-05-07 23:44:21 +00:00
ed0874504e Merge branch 'main' into fix/issue75-class-F-gh-run-list-to-statuses 2026-05-07 23:44:00 +00:00
6656862870 chore: sync main → staging (auto, e39fc920) 2026-05-07 23:39:46 +00:00
e39fc92074 fix(ci): replace gh pr CLI with Gitea v1 REST in workflows + scripts (#80)
Class A of #75 sweep. 23 bash + 9 python tests pass. Live-integration verified against prod Gitea. Approved by security-auditor.
2026-05-07 23:39:22 +00:00
6d7554d282 chore: sync main → staging (auto, d84d88ad) 2026-05-07 23:38:08 +00:00
1819ac21f4 Merge branch 'main' into fix/issue75-class-A-gh-pr-to-gitea-rest 2026-05-07 23:37:57 +00:00
d84d88ad70 feat(workspace-server): local-dev provisioner builds from Gitea source (#70)
Hongming-locked Option C: MOLECULE_IMAGE_REGISTRY presence as mode marker. ADR-002 captures rationale. 30 new tests + 64 existing preserved. Hostile-review weakest 3 filed as #204/#205/#206 follow-ups. Closes #63 (Task #194). Approved by security-auditor.
2026-05-07 23:37:56 +00:00
ae49b184f6 chore: sync main → staging (auto, 1f1ead18) 2026-05-07 23:33:25 +00:00
6bb272360d Merge branch 'main' into feat/issue-63-local-build-from-gitea-v2 2026-05-07 23:33:03 +00:00
1f1ead1833 fix(ci): rewrite auto-promote-staging for Gitea (#78)
Removes ~60 lines polling+dispatch (Gitea fires on:push naturally on token-merge). Uses Gitea merge_when_checks_succeed; preserves required_approvals=1 on main. Closes #73. Approved by security-auditor.
2026-05-07 23:32:58 +00:00
c5f40de585 Merge branch 'main' into fix/195-auto-promote-staging-gitea-rest 2026-05-07 23:30:09 +00:00
a234ed5c51 chore: sync main → staging (auto, 330a5842) 2026-05-07 23:29:14 +00:00
330a5842ab Merge pull request 'feat(canvas): ActivityTab → ACTIVITY_LOGGED subscriber (#61 stage 3, final)' (#76) from feat/canvas-activity-tab-ws-subscribe into main 2026-05-07 23:27:32 +00:00
cd55ce10d2 chore: sync main → staging (auto, 502aa082) 2026-05-07 23:25:49 +00:00
2505b36a2c Merge branch 'main' into fix/195-auto-promote-staging-gitea-rest 2026-05-07 23:22:24 +00:00
security-auditor
e0feae18f4 Merge remote-tracking branch 'origin/main' into feat/canvas-activity-tab-ws-subscribe 2026-05-07 16:18:34 -07:00
502aa082bc Merge pull request 'feat(canvas): A2ATopologyOverlay → ACTIVITY_LOGGED subscriber (#61 stage 2)' (#71) from feat/canvas-topology-overlay-ws-subscribe into main 2026-05-07 23:18:24 +00:00
739c7f1141 chore: sync main → staging (auto, 33327cf0) 2026-05-07 23:16:03 +00:00
security-auditor
8f732511b1 Merge remote-tracking branch 'origin/main' into feat/canvas-activity-tab-ws-subscribe 2026-05-07 16:04:39 -07:00
security-auditor
7d0df65474 Merge remote-tracking branch 'origin/main' into feat/canvas-topology-overlay-ws-subscribe 2026-05-07 16:04:29 -07:00
33327cf077 Merge pull request 'feat(canvas): CommunicationOverlay → ACTIVITY_LOGGED subscriber (#61 stage 1)' (#69) from feat/canvas-comm-overlay-ws-subscribe into main 2026-05-07 23:04:18 +00:00
fa27611e9c Merge branch 'main' into fix/196-retarget-main-to-staging-gitea-rest 2026-05-07 23:02:10 +00:00
b664691051 fix(eic-tunnel-pool): capture poolJanitorInterval at pool construction
Closes the chronic -race flake on TestPooledWithEICTunnel_PanicPoisonsEntry
and the handlers package as a whole (CI / Platform (Go) was intermittent
on staging, ~50% red on workspace-server-touching commits since 2026-04).

The race: tests swap the package-level poolJanitorInterval via t.Cleanup
(eic_tunnel_pool_test.go:61) AFTER an earlier test caused the global pool's
janitor goroutine to start. The janitor loops on time.NewTicker(poolJanitorInterval)
on every tick — so the cleanup write races the goroutine read for the rest
of the process. Caught locally + on PR #84's CI run on Gitea.

Fix: capture the interval as a field on eicTunnelPool at newEICTunnelPool().
The janitor now reads p.janitorInterval, which never changes after construction.
Tests that override poolJanitorInterval before freshPool() still get the new
value (they set the package var before construction). The global pool's
janitor — created lazily once via sync.Once on first getEICTunnelPool() —
is now immune to t.Cleanup-driven swaps from later tests.

Surfaced while verifying #84 (SaaS plugin install via EIC SSH); folded
into this PR per the "fix root not symptom" rule rather than merging
around a chronic-red CI signal.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 16:01:11 -07:00
7e2cca7fad chore: sync main → staging (auto, e7660618) 2026-05-07 23:00:21 +00:00
security-auditor
865a366573 Merge remote-tracking branch 'origin/main' into feat/canvas-activity-tab-ws-subscribe 2026-05-07 15:56:56 -07:00
security-auditor
b73f599184 Merge remote-tracking branch 'origin/main' into feat/canvas-topology-overlay-ws-subscribe 2026-05-07 15:56:52 -07:00
security-auditor
5855be50b4 Merge remote-tracking branch 'origin/main' into feat/canvas-comm-overlay-ws-subscribe 2026-05-07 15:56:49 -07:00
e766061800 Merge pull request 'fix(ratelimit): tenant-aware bucket keying — close canvas 429 storm (#59)' (#60) from fix/canvas-429-tenant-aware-ratelimit into main 2026-05-07 22:56:38 +00:00
792bfdf8fd chore: sync main → staging (auto, 0be89053) 2026-05-07 22:55:22 +00:00
ca644134f2 Merge branch 'main' into fix/196-retarget-main-to-staging-gitea-rest 2026-05-07 22:54:31 +00:00
security-auditor
e909417224 Merge remote-tracking branch 'origin/main' into feat/canvas-activity-tab-ws-subscribe 2026-05-07 15:54:06 -07:00
security-auditor
9bb4bbdff7 Merge remote-tracking branch 'origin/main' into feat/canvas-topology-overlay-ws-subscribe 2026-05-07 15:54:03 -07:00
security-auditor
bec1cb3786 Merge remote-tracking branch 'origin/main' into feat/canvas-comm-overlay-ws-subscribe 2026-05-07 15:54:00 -07:00
security-auditor
1d6b09f2bd Merge remote-tracking branch 'origin/main' into fix/canvas-429-tenant-aware-ratelimit 2026-05-07 15:53:57 -07:00