fix(gitlab): ship canonical helper paths and accept Relay 15.1 peers
GitLab helpers encoded a project such as acme/platform/web as one path segment, while Relayfile mounts preserve the project hierarchy. Update the SDK to adapter-core 0.8.5 and relay-helpers 0.6.1 so the shipped helper factory reads and writes the canonical mounted path. Allow the validated Relay 15.1 peer series alongside Relay 12; keep the SDK pin exact in consumers.
Regenerate the adapter-owned catalogs and authoring docs. Their additive Bitbucket namespace remains unavailable for helper writeback. Refresh the sandbox's exact provider-catalog checksum after reviewing those generated bytes; isolation and byte-tampering checks remain unchanged. The narrow SDK development override aligns the currently published Surface peer until the standard all-package release advances SDK and Surface together.
The full Linux check exposed a nondeterministic existing resume fixture: distinct follow-up commands inherited model-result arrival order, which serial replay correctly refuses (documented contract). Join the same concurrent model/agent/dispatch calls before issuing those commands. Every crash/resume, request-count, exact-effect and serial-mode assertion is unchanged. The separate replay-refusal suite is unchanged.
Clean-install, type and documentation checks ran at 00e3ae46362d65ac77dcc0782892defe2b4b1653. Production source and package manifests are unchanged by the final fixture-only commit; the fixture/refusal checks below ran against the current fixture bytes (04d43b6f5917cb5d7dbd0f9a79a554f54a816e20).
npm ci --prefix packages/sdk --ignore-scripts
npm run typecheck --prefix packages/sdk
npm run build --prefix packages/sdk
npm run typecheck:tests --prefix packages/sdk
npm run check:docs --prefix packages/surface
Captured SDK output (/tmp/flows-gitlab-rebase-sdk-check.log):
> @relayflows/sdk@2.0.59 typecheck
> tsc --noEmit && tsc -p tsconfig.type-tests.json
> @relayflows/sdk@2.0.59 build
> tsc && node scripts/make-cli-executable.mjs
> @relayflows/sdk@2.0.59 typecheck:tests
> tsc -p tsconfig.tests.json
Docs output (/tmp/flows-gitlab-rebase-docs.log): pass 27, fail 0. Frozen Bun installation also succeeds; clean lock regeneration produces no changes.
cd packages/sdk
RELAYFLOWD_BIN=/tmp/flows-gitlab-kernel-2.0.59/package/bin/relayflowd \
/Users/khaliqgant/.local/share/mise/installs/node/22.23.2/bin/node \
node_modules/vitest/vitest.mjs run tests/authored-parallel-run-live.test.ts \
-t 'resumes.*branches without replaying completed effects'
Captured before/after output:
# Before: /tmp/flows-gitlab-replay-fixtures-before.log
Tests 1 failed | 2 passed | 39 skipped (42)
# Failure: run_admission_conflict for a reordered follow-up command.
# After: /tmp/flows-gitlab-replay-fixtures-after.log
Tests 3 passed | 39 skipped (42)
The 39 cases are excluded by the local name filter; no test definitions were skipped or weakened.
RELAYFLOWD_BIN=/tmp/flows-gitlab-kernel-2.0.59/package/bin/relayflowd \
/Users/khaliqgant/.local/share/mise/installs/node/22.23.2/bin/node \
node_modules/vitest/vitest.mjs run tests/serial-replay-identity.test.ts
Captured output (/tmp/flows-gitlab-refusal-guards.log):
Test Files 1 passed (1)
Tests 13 passed | 1 skipped (14)
The skip is the existing previous-CLI compatibility case. The combined GitLab helper/classifier checks ran at the same production-source revision:
RELAYFLOWD_BIN=/tmp/flows-gitlab-kernel-2.0.59/package/bin/relayflowd \
./node_modules/.bin/vitest run tests/gitlab-helper-path.test.ts \
tests/hosted-extension-routing.test.ts tests/authored-classify.test.ts \
tests/jev-client.test.ts tests/review-depth-example.test.ts
Captured output (/tmp/flows-gitlab-rebase-focused-with-daemon.log): Test Files 5 passed (5), Tests 57 passed (57).
Full Linux validation at 04d43b6 reached 4,906 passing, one failing, 14 existing skips (run); the failure was the authority fixture's five-second timeout. Its dispatch already used a 30-second lease, but ownership renewal immediately replaced it with the fake peer's 30-millisecond default. Align only that fixture's renewal with its existing dispatch duration. No production lease checks, assertions, CI settings or case timeouts changed.
Reproduce with the first case's temporary body async f => { const until = Date.now() + 75; while (Date.now() < until) {} f.done('success'); } to model a CI event-loop pause. The diagnostic input was restored after each run. The literal test command, from packages/sdk, was:
RELAYFLOWD_BIN=/tmp/flows-gitlab-kernel-2.0.59/package/bin/relayflowd \
/Users/khaliqgant/.local/share/mise/installs/node/22.23.2/bin/node \
node_modules/vitest/vitest.mjs run tests/authored-root.test.ts \
-t 'journals exact source and Surface authority'
Captured output:
# /tmp/flows-gitlab-root-lease-before.log
Error: Test timed out in 5000ms.
Tests 1 failed | 48 skipped (49)
# /tmp/flows-gitlab-root-lease-after.log
Tests 1 passed | 48 skipped (49)
The name filter excludes the other 48 cases only in this diagnostic. After restoring the normal body:
RELAYFLOWD_BIN=/tmp/flows-gitlab-kernel-2.0.59/package/bin/relayflowd \
/Users/khaliqgant/.local/share/mise/installs/node/22.23.2/bin/node \
node_modules/vitest/vitest.mjs run tests/authored-root.test.ts \
tests/serial-replay-identity.test.ts tests/worker-lease.test.ts \
tests/gitlab-helper-path.test.ts
Captured output (/tmp/flows-gitlab-root-renewal-regression.log):
Test Files 4 passed (4)
Tests 71 passed | 1 skipped (72)
The skip is the existing previous-CLI compatibility case.
The all-package release dry run at 04d43b6 passed Linux and native macOS package/runtime smoke tests (run). The final commit changes only the authority-test fixture. The full current-head Linux check succeeded at 879be752cbbe00d61d39fe21ceee0def30a34ad6, with no unresolved review threads. The exact-head 21-file Veto code/security/secrets review passed before merge. Package versions remain 2.0.59 here; the standard release workflow advances all packages together.
gh run view 41636998780 --repo AgentWorkforce/flows --log \
> /tmp/flows-gitlab-full-ci-879be-success.log
Captured full-suite output:
Test Files 312 passed | 3 skipped (315)
Tests 4907 passed | 14 skipped (4921)
The separate watch check passed 11 tests; the final packed-CLI gate passed its one test. Kernel tests and artifact assembly/verifier checks also succeeded. Merged as 37700fbd3daf480ea79ec92d857fb5836082e508; the normal all-package patch release is underway.