Skip to content

Commit 75f76c1

Browse files
committed
Merge branch 'Dev' into Beta
2 parents a18c790 + 28f1729 commit 75f76c1

99 files changed

Lines changed: 4168 additions & 2504 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/beta.yml

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ on:
66
branches: [ Beta ]
77
workflow_dispatch:
88

9+
concurrency:
10+
group: openvcs-beta
11+
cancel-in-progress: true
12+
913
permissions:
1014
contents: write
1115
actions: write
@@ -17,8 +21,31 @@ env:
1721
SCCACHE_CACHE_SIZE: ${{ vars.SSCCACHE_SIZE }}
1822

1923
jobs:
24+
prepare-release:
25+
name: Clean existing rolling release
26+
runs-on: ubuntu-22.04
27+
permissions:
28+
contents: write
29+
steps:
30+
- name: Remove existing 'openvcs-beta' release & tag
31+
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
32+
with:
33+
script: |
34+
const owner = context.repo.owner;
35+
const repo = context.repo.repo;
36+
const tag = 'openvcs-beta';
37+
const releases = await github.paginate(github.rest.repos.listReleases, { owner, repo, per_page: 100 });
38+
const rel = releases.find(r => r.tag_name === tag);
39+
if (rel) await github.rest.repos.deleteRelease({ owner, repo, release_id: rel.id });
40+
try {
41+
await github.rest.git.deleteRef({ owner, repo, ref: `tags/${tag}` });
42+
} catch (e) {
43+
if (e.status !== 422) throw e;
44+
}
45+
2046
beta:
2147
name: Build & publish Beta
48+
needs: prepare-release
2249
strategy:
2350
fail-fast: false
2451
matrix:
@@ -73,7 +100,7 @@ jobs:
73100
components: rustfmt, clippy
74101

75102
- name: Setup sccache
76-
uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
103+
uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
77104

78105
- name: Install Linux deps
79106
if: matrix.platform == 'ubuntu-24.04'
@@ -94,21 +121,8 @@ jobs:
94121
- name: Cargo clippy
95122
run: cargo clippy --all-targets -- -D warnings
96123

97-
- name: Remove existing 'openvcs-beta' release & tag
98-
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
99-
with:
100-
script: |
101-
const owner = context.repo.owner;
102-
const repo = context.repo.repo;
103-
const tag = 'openvcs-beta';
104-
const releases = await github.paginate(github.rest.repos.listReleases, { owner, repo, per_page: 100 });
105-
const rel = releases.find(r => r.tag_name === tag);
106-
if (rel) await github.rest.repos.deleteRelease({ owner, repo, release_id: rel.id });
107-
try {
108-
await github.rest.git.deleteRef({ owner, repo, ref: `tags/${tag}` });
109-
} catch (e) {
110-
if (e.status !== 422) throw e;
111-
}
124+
- name: Patch version for beta prerelease
125+
run: node scripts/bump-tauri-version.js beta
112126

113127
- name: Write channel Tauri config override
114128
env:
@@ -134,6 +148,6 @@ jobs:
134148
Date (UTC): ${{ steps.meta.outputs.date }}
135149
Commit: ${{ github.sha }} (${{ env.TARGET_REF }}@${{ steps.meta.outputs.short_sha }})
136150
Runner: ${{ runner.os }} • Run #${{ github.run_number }}
137-
releaseDraft: true
151+
releaseDraft: false
138152
prerelease: true
139153
args: ${{ format('{0} --config {1}/tauri.channel.conf.json', matrix.args || '', runner.temp) }}

.github/workflows/codeql.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ jobs:
5353
fetch-depth: 0
5454

5555
- name: Initialize CodeQL
56-
uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3
56+
uses: github/codeql-action/init@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v3
5757
with:
5858
languages: ${{ matrix.language }}
5959
build-mode: ${{ matrix.build-mode }}
@@ -64,9 +64,9 @@ jobs:
6464

6565
- name: Autobuild
6666
if: matrix.build-mode == 'autobuild'
67-
uses: github/codeql-action/autobuild@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3
67+
uses: github/codeql-action/autobuild@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v3
6868

6969
- name: Perform CodeQL Analysis
70-
uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3
70+
uses: github/codeql-action/analyze@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v3
7171
with:
7272
category: "/language:${{ matrix.language }}"

.github/workflows/development.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ jobs:
8585
components: rustfmt, clippy
8686

8787
- name: Setup sccache
88-
uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
88+
uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
8989

9090
- name: Install Linux build deps
9191
if: runner.os == 'Linux'

.github/workflows/nightly.yml

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ on:
1313
required: false
1414
default: false
1515

16+
concurrency:
17+
group: openvcs-nightly
18+
cancel-in-progress: true
19+
1620
# Default to least privilege; override per-job as needed
1721
permissions:
1822
contents: read
@@ -71,9 +75,33 @@ jobs:
7175
echo "ahead_count=$AHEAD" >> "$GITHUB_OUTPUT"
7276
fi
7377
78+
prepare-release:
79+
name: Clean existing rolling release
80+
needs: check-changes
81+
if: needs.check-changes.outputs.changed == 'true' || (github.event_name == 'workflow_dispatch' && (inputs.force == true || github.event.inputs.force == 'true'))
82+
runs-on: ubuntu-22.04
83+
permissions:
84+
contents: write
85+
steps:
86+
- name: Remove existing 'openvcs-nightly' release & tag
87+
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
88+
with:
89+
script: |
90+
const owner = context.repo.owner;
91+
const repo = context.repo.repo;
92+
const tag = 'openvcs-nightly';
93+
const releases = await github.paginate(github.rest.repos.listReleases, { owner, repo, per_page: 100 });
94+
const rel = releases.find(r => r.tag_name === tag);
95+
if (rel) await github.rest.repos.deleteRelease({ owner, repo, release_id: rel.id });
96+
try {
97+
await github.rest.git.deleteRef({ owner, repo, ref: `tags/${tag}` });
98+
} catch (e) {
99+
if (e.status !== 422) throw e;
100+
}
101+
74102
nightly:
75103
name: Build & publish Nightly (only if changed)
76-
needs: check-changes
104+
needs: [check-changes, prepare-release]
77105
if: needs.check-changes.outputs.changed == 'true' || (github.event_name == 'workflow_dispatch' && (inputs.force == true || github.event.inputs.force == 'true'))
78106
permissions:
79107
contents: write # create/delete release + tag
@@ -179,7 +207,7 @@ jobs:
179207
components: rustfmt, clippy
180208

181209
- name: Setup sccache
182-
uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
210+
uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
183211

184212
- name: Install Linux deps
185213
if: matrix.platform == 'ubuntu-24.04'
@@ -202,21 +230,8 @@ jobs:
202230
run: cargo clippy --all-targets -- -D warnings
203231

204232
# ---------- Reset rolling tag (optional but keeps things tidy) ----------
205-
- name: Remove existing 'openvcs-nightly' release & tag (if any)
206-
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
207-
with:
208-
script: |
209-
const owner = context.repo.owner;
210-
const repo = context.repo.repo;
211-
const tag = 'openvcs-nightly';
212-
const releases = await github.paginate(github.rest.repos.listReleases, { owner, repo, per_page: 100 });
213-
const rel = releases.find(r => r.tag_name === tag);
214-
if (rel) await github.rest.repos.deleteRelease({ owner, repo, release_id: rel.id });
215-
try {
216-
await github.rest.git.deleteRef({ owner, repo, ref: `tags/${tag}` });
217-
} catch (e) {
218-
if (e.status !== 422) throw e;
219-
}
233+
- name: Patch version for nightly prerelease
234+
run: node scripts/bump-tauri-version.js nightly
220235

221236
- name: Write channel Tauri config override
222237
env:

.github/workflows/opencode-review.yml

Lines changed: 152 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ jobs:
88
review:
99
if: github.event.pull_request.user.login == 'Jordonbc'
1010
runs-on: ubuntu-latest
11+
1112
permissions:
12-
id-token: write
13-
contents: write
13+
contents: read
1414
pull-requests: write
1515
issues: write
1616

@@ -27,16 +27,85 @@ jobs:
2727
OPENCODE_API_KEY: ${{ secrets.ZEN_API_KEY }}
2828
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
2929
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
30+
OPENCODE_PERMISSION: '{"edit":"deny","write":"deny","patch":"deny"}'
3031
with:
3132
model: ${{ vars.OPENCODE_REVIEW_MODEL }}
3233
use_github_token: true
3334
prompt: |
34-
Before anything else, read and follow AGENTS.md for this repository and module.
35-
Review this pull request:
36-
- Check for code quality issues
37-
- Look for potential bugs
38-
- Suggest improvements
39-
- If you make any code edits, run 'cd Client && just test' to verify they compile and pass tests before committing.
35+
Before doing anything else, read and follow AGENTS.md for this repository and for any affected module.
36+
37+
You are reviewing this pull request only. Do not edit files, do not commit changes, and do not attempt to rewrite the PR.
38+
39+
Review only the changes introduced by this pull request, using surrounding repository context only when needed to understand correctness.
40+
41+
Focus on:
42+
- Correctness bugs
43+
- Regressions
44+
- Unsafe assumptions
45+
- Error handling problems
46+
- API misuse
47+
- Race conditions, lifetime issues, ownership issues, or resource leaks
48+
- Test coverage gaps where the changed behaviour is not adequately covered
49+
- Maintainability issues that would realistically matter in this codebase
50+
51+
Do not comment on:
52+
- Pure style preferences unless AGENTS.md or existing repository conventions clearly require them
53+
- Hypothetical rewrites
54+
- Broad architecture advice unrelated to this PR
55+
- Trivial naming or formatting issues unless they obscure correctness
56+
- Missing tests for code that has no meaningful behavioural change
57+
58+
Output requirements:
59+
- Start with review findings, not process narration
60+
- Do not describe which files you read or how you investigated
61+
- Every comment must be either a concrete finding or an explicit no-issues verdict
62+
- If you found no blocking or important issues, say exactly that and stop
63+
64+
For every finding:
65+
- Cite the specific file and changed line/range when possible
66+
- Explain why it is a real issue
67+
- Explain the likely impact
68+
- Suggest the smallest reasonable fix
69+
- State confidence as High, Medium, or Low
70+
71+
Use this severity scale:
72+
- Blocking: correctness, data loss, security, build failure, test failure, serious regression
73+
- Important: likely bug, maintainability risk, missing validation, meaningful test gap, or unproven cross-layer behaviour
74+
- Minor: small cleanup with clear value
75+
76+
Prefer fewer, higher-confidence comments over many speculative comments.
77+
78+
Pay special attention to semantic mismatches:
79+
- Comments that do not match the code behaviour
80+
- Variable names that imply different behaviour than the implementation
81+
- Function names that imply different behaviour than the implementation
82+
- Frontend/backend/plugin contract mismatches
83+
- Changed values passed across process, IPC, API, or plugin boundaries
84+
- Sentinel values such as 0, -1, null, undefined, empty strings, and empty arrays
85+
- Type-safe code that may still be behaviourally wrong
86+
87+
When reviewing sentinel values:
88+
- Do not assume 0 means "unlimited", "default", "disabled", or "empty" unless the implementation explicitly proves it
89+
- Do not assume null, undefined, empty strings, or empty arrays preserve existing/default behaviour unless the implementation explicitly proves it
90+
- Trace the changed value through every visible layer before deciding it is safe
91+
- If a changed value crosses frontend/backend/plugin boundaries and its final meaning is not explicitly proven, flag it as an Important finding
92+
- If behaviour depends on a downstream plugin, backend, external command, or runtime convention that is not visible in the PR, flag the assumption instead of treating it as safe
93+
- Treat contradictions between comments and runtime behaviour as review-worthy
94+
95+
Treat contradictory intent as a real bug:
96+
- If a comment, variable name, function name, or PR intent says the code should do one thing, but the implementation appears to do another, flag it as an Important finding
97+
- Do not rationalise contradictions as intentional unless the implementation explicitly proves that interpretation
98+
- Do not describe contradictory behaviour as correct
99+
- Example: if code claims to load "full history" but passes `limit: 0`, and the visible backend preserves `0` as `0`, you must flag that as a potential bug unless another visible layer explicitly maps `0` to unlimited
100+
101+
Before concluding that there are no substantive issues:
102+
- Re-check any finding where the code behaviour appears to contradict a comment, variable name, function name, or stated intent
103+
- Re-check every changed sentinel value that crosses a frontend/backend/plugin boundary
104+
- Do not treat "the code compiles" as evidence that behaviour is correct
105+
- Do not infer intended behaviour from comments alone
106+
- If you are relying on an assumption about downstream behaviour, say so explicitly and treat it as a review concern
107+
108+
If there are no substantive issues, say that no blocking or important issues were found. Do not invent issues to appear useful. Do not mention the review process, file reads, or search steps in the final output.
40109
41110
- name: fallback
42111
if: ${{ steps.review_primary.outcome == 'failure' }}
@@ -45,13 +114,82 @@ jobs:
45114
OPENCODE_API_KEY: ${{ secrets.ZEN_API_KEY }}
46115
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
47116
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
117+
OPENCODE_PERMISSION: '{"edit":"deny","write":"deny","patch":"deny"}'
48118
with:
49119
model: ${{ vars.OPENCODE_REVIEW_MODEL_FALLBACK }}
50120
use_github_token: true
51121
prompt: |
52-
Before anything else, read and follow AGENTS.md for this repository and module.
53-
Review this pull request:
54-
- Check for code quality issues
55-
- Look for potential bugs
56-
- Suggest improvements
57-
- If you make any code edits, run 'cd Client && just test' to verify they compile and pass tests before committing.
122+
Before doing anything else, read and follow AGENTS.md for this repository and for any affected module.
123+
124+
You are reviewing this pull request only. Do not edit files, do not commit changes, and do not attempt to rewrite the PR.
125+
126+
Review only the changes introduced by this pull request, using surrounding repository context only when needed to understand correctness.
127+
128+
Focus on:
129+
- Correctness bugs
130+
- Regressions
131+
- Unsafe assumptions
132+
- Error handling problems
133+
- API misuse
134+
- Race conditions, lifetime issues, ownership issues, or resource leaks
135+
- Test coverage gaps where the changed behaviour is not adequately covered
136+
- Maintainability issues that would realistically matter in this codebase
137+
138+
Do not comment on:
139+
- Pure style preferences unless AGENTS.md or existing repository conventions clearly require them
140+
- Hypothetical rewrites
141+
- Broad architecture advice unrelated to this PR
142+
- Trivial naming or formatting issues unless they obscure correctness
143+
- Missing tests for code that has no meaningful behavioural change
144+
145+
Output requirements:
146+
- Start with review findings, not process narration
147+
- Do not describe which files you read or how you investigated
148+
- Every comment must be either a concrete finding or an explicit no-issues verdict
149+
- If you found no blocking or important issues, say exactly that and stop
150+
151+
For every finding:
152+
- Cite the specific file and changed line/range when possible
153+
- Explain why it is a real issue
154+
- Explain the likely impact
155+
- Suggest the smallest reasonable fix
156+
- State confidence as High, Medium, or Low
157+
158+
Use this severity scale:
159+
- Blocking: correctness, data loss, security, build failure, test failure, serious regression
160+
- Important: likely bug, maintainability risk, missing validation, meaningful test gap, or unproven cross-layer behaviour
161+
- Minor: small cleanup with clear value
162+
163+
Prefer fewer, higher-confidence comments over many speculative comments.
164+
165+
Pay special attention to semantic mismatches:
166+
- Comments that do not match the code behaviour
167+
- Variable names that imply different behaviour than the implementation
168+
- Function names that imply different behaviour than the implementation
169+
- Frontend/backend/plugin contract mismatches
170+
- Changed values passed across process, IPC, API, or plugin boundaries
171+
- Sentinel values such as 0, -1, null, undefined, empty strings, and empty arrays
172+
- Type-safe code that may still be behaviourally wrong
173+
174+
When reviewing sentinel values:
175+
- Do not assume 0 means "unlimited", "default", "disabled", or "empty" unless the implementation explicitly proves it
176+
- Do not assume null, undefined, empty strings, or empty arrays preserve existing/default behaviour unless the implementation explicitly proves it
177+
- Trace the changed value through every visible layer before deciding it is safe
178+
- If a changed value crosses frontend/backend/plugin boundaries and its final meaning is not explicitly proven, flag it as an Important finding
179+
- If behaviour depends on a downstream plugin, backend, external command, or runtime convention that is not visible in the PR, flag the assumption instead of treating it as safe
180+
- Treat contradictions between comments and runtime behaviour as review-worthy
181+
182+
Treat contradictory intent as a real bug:
183+
- If a comment, variable name, function name, or PR intent says the code should do one thing, but the implementation appears to do another, flag it as an Important finding
184+
- Do not rationalise contradictions as intentional unless the implementation explicitly proves that interpretation
185+
- Do not describe contradictory behaviour as correct
186+
- Example: if code claims to load "full history" but passes `limit: 0`, and the visible backend preserves `0` as `0`, you must flag that as a potential bug unless another visible layer explicitly maps `0` to unlimited
187+
188+
Before concluding that there are no substantive issues:
189+
- Re-check any finding where the code behaviour appears to contradict a comment, variable name, function name, or stated intent
190+
- Re-check every changed sentinel value that crosses a frontend/backend/plugin boundary
191+
- Do not treat "the code compiles" as evidence that behaviour is correct
192+
- Do not infer intended behaviour from comments alone
193+
- If you are relying on an assumption about downstream behaviour, say so explicitly and treat it as a review concern
194+
195+
If there are no substantive issues, say that no blocking or important issues were found. Do not invent issues to appear useful. Do not mention the review process, file reads, or search steps in the final output.

0 commit comments

Comments
 (0)