molecule-core/workspace-server/internal
Molecule AI Core-BE 0c152a24d2
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 15s
CI / Detect changes (pull_request) Successful in 46s
E2E API Smoke Test / detect-changes (pull_request) Successful in 49s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 48s
Harness Replays / detect-changes (pull_request) Successful in 16s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 34s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 15s
gate-check-v3 / gate-check (pull_request) Successful in 10s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m21s
qa-review / approved (pull_request) Successful in 14s
security-review / approved (pull_request) Successful in 14s
sop-checklist / all-items-acked (pull_request) Successful in 17s
sop-tier-check / tier-check (pull_request) Successful in 12s
CI / Canvas (Next.js) (pull_request) Successful in 24s
CI / all-required (pull_request) Blocked by required conditions
Harness Replays / Harness Replays (pull_request) Successful in 9s
audit-force-merge / audit (pull_request) Successful in 29s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 11s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m25s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 5m35s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / Platform (Go) (pull_request) Failing after 14m30s
CI / Shellcheck (E2E scripts) (pull_request) Failing after 13m54s
CI / Python Lint & Test (pull_request) Failing after 13m49s
fix(handlers): restore CWE-78 guard — partial refs like \$HOME/path stay literal
Replaces the os.Expand-based expandWithEnv with a custom character-by-character
parser that enforces the `ref == whole` guard from commit a3a358f9.

os.Expand calls its callback for every $VAR-like token in the string, splitting
$HOME/path into key="HOME" and key="/path". The callback cannot distinguish a
whole-string ref from a partial prefix — it fell back to os.Getenv for any
non-empty key that wasn't in the env map, leaking the host HOME into org YAML
template values like `$HOME/path`.

Fix: walk the string ourselves. Only call os.Getenv when the matched reference
IS the entire input string (ref == whole). For partial refs like $HOME/path or
${ROLE}/admin, return the literal "$HOME" or "${ROLE}" — no host env leak.

Tests:
- Add 14 regression tests in org_helpers_security_test.go covering
  $HOME/path, ${ROLE}/admin, prefix$ROLE/suffix, mixed partial+whole, etc.
- Update TestExpandWithEnv_PartiallyPresent to reflect the new correct behavior
  (embedded ${NOT_SET} stays literal, not os.Getenv fallback).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 20:49:33 +00:00
..
artifacts
buildinfo feat(deploy): verify each tenant /buildinfo matches published SHA after redeploy 2026-04-30 10:55:08 -07:00
bundle fix(staging): resolve 3 go vet failures 2026-05-13 09:50:45 +00:00
channels channels: add SendAdapter injection + handler test coverage for Test and Send 2026-05-14 09:30:11 +00:00
crypto
db fix(bundle): markFailed sets last_sample_error + AST gate 2026-05-04 21:08:08 -07:00
envx
events fix(platform): clear golangci-lint findings 2026-05-12 22:53:22 -07:00
handlers fix(handlers): restore CWE-78 guard — partial refs like \$HOME/path stay literal 2026-05-14 20:49:33 +00:00
imagewatch fix(workspace-server): respect MOLECULE_IMAGE_REGISTRY in imagewatch + admin_workspace_images (RFC #229 P2-4) 2026-05-10 04:21:27 -07:00
memory fix(go): remove ineffectual pgplugin index increment 2026-05-13 14:32:41 -07:00
messagestore feat(canvas/chat-server): canvas consumes /chat-history + server-side row-aware reverse (RFC #2945 PR-C-2) 2026-05-06 16:55:00 -07:00
metrics feat(rfc): poll-mode chat upload — phase 3 GC sweep + observability 2026-05-05 05:00:13 -07:00
middleware fix(platform): clear golangci-lint findings 2026-05-12 22:53:22 -07:00
models test(models+handlers): add delivery mode + workspace status coverage 2026-05-13 16:14:09 +00:00
orgtoken
pendinguploads fix(pendinguploads): accept done channel in StartSweeperWithIntervalForTest 2026-05-11 21:15:49 +00:00
plugins fix(platform): clear golangci-lint findings 2026-05-12 22:53:22 -07:00
provisioner fix(provisioner): inject ADMIN_TOKEN into workspace container env (core#831) 2026-05-13 21:05:02 +00:00
provlog feat(workspace-server): structured logging at provisioning boundaries 2026-05-05 12:30:11 -07:00
registry chore: reconcile main → staging post-suspension divergence 2026-05-07 14:24:37 -07:00
router [core-lead-agent] fix(core#228): cascade fixes for PluginResolver — make main compile 2026-05-10 09:46:35 +00:00
scheduler fix(textutil): SSOT for rune-safe string truncation, fix 3 audit-gap bugs 2026-05-05 23:01:21 -07:00
supervised
textutil fix(textutil): SSOT for rune-safe string truncation, fix 3 audit-gap bugs 2026-05-05 23:01:21 -07:00
ws chore: drop org_layout_test, hub.go, hub_test.go (already in staging with better coverage) 2026-05-13 18:04:00 +00:00
wsauth perf(wsauth): in-process cache for platform_inbound_secret reads 2026-05-03 00:04:38 -07:00