Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .github/workflows/goal-coexistence-canary.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Dedicated Goal Coexistence

on:
pull_request:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: goal-coexistence-${{ github.ref }}
cancel-in-progress: true

jobs:
current-releases:
name: Loop 0.5.35 + Goal 1.3.27 (${{ matrix.os }})
timeout-minutes: 12
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v6
with:
persist-credentials: false

- uses: actions/setup-node@v6
with:
node-version: "24"
cache: npm

- uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- run: npm ci

- name: Install current OpenCode and released Goal
run: npm install --no-save --package-lock=false opencode-ai@latest @bybrawe/opencode-goal@1.3.27

- name: Show integration versions
run: |
node -p "require('./package.json').version"
npx --no-install opencode --version
node -p "require('./node_modules/@bybrawe/opencode-goal/package.json').version"

- name: Check coexistence canary syntax
run: node --check scripts/host-goal-coexistence-canary.mjs

- name: Require one autonomous owner
run: node scripts/host-goal-coexistence-canary.mjs
env:
OPENCODE_PRINT_LOGS: "1"
OPENCODE_LOG_LEVEL: DEBUG
24 changes: 24 additions & 0 deletions docs/CURRENT-COEXISTENCE-CANARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Current Loop + Goal coexistence canary

This branch keeps the dedicated-Goal overlap scenario pinned to a known released pair:

- OpenCode Loop 0.5.35
- OpenCode Goal 1.3.27
- current OpenCode CLI from npm

The historical canary first ran with pre-0.5.35 Loop code and Goal 1.3.25, so that output is not used as current-release evidence.

A clean follow-up run with Loop 0.5.35 + Goal 1.3.26 on OpenCode 1.18.21 reproduced the real collision on both Ubuntu and Windows: Loop correctly emitted `goal-overlap-blocked` and persisted no job, but the host slash-command bridge could cancel the in-flight Goal turn and Goal could repin its executor to the Loop command's local agent.

Goal 1.3.27 fixes that command-ownership boundary. This canary installs the published 1.3.27 package from npm and repeats the same real-host overlap scenario. It requires:

- the dedicated Goal to remain active;
- Loop to emit `goal-overlap-blocked`;
- no Loop prompt job to be persisted;
- no autonomous Loop provider request to start;
- no command bridge request to leak to the model;
- Goal execution ownership to remain with the dedicated Goal workflow.

The test is intentionally pinned to an exact companion release so unrelated future Goal releases cannot make ordinary Loop pull requests nondeterministic. Moving-`latest` compatibility belongs in a separate scheduled canary.

This is a regression probe, not a production Loop behavior change.
Loading