Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
77001c2
fix: preserve cloud sync concurrency invariants
SunkenInTime Sep 4, 2026
8e92fa8
fix: make cloud sync exits and media durable
SunkenInTime Sep 4, 2026
8c82877
Enforce cloud strategy edit permissions
SunkenInTime Sep 4, 2026
e2ab2fc
fix: preserve real sync attention offline
SunkenInTime Sep 4, 2026
c6fa786
fix: retain delete successors after local adds
SunkenInTime Sep 4, 2026
0c8fa6b
test: prove cloud durability boundaries
SunkenInTime Sep 4, 2026
c5d7802
fix: promote accepted add successors as patches
SunkenInTime Sep 4, 2026
eb573b8
fix: keep rejected successors in attention
SunkenInTime Sep 4, 2026
972c4c3
fix: retain queued adds across page restart
SunkenInTime Sep 4, 2026
ba327d6
fix(release): fail closed on production publishing
SunkenInTime Sep 4, 2026
189993c
fix: gate media uploads on durable references
SunkenInTime Sep 4, 2026
75660c1
fix(release): guard full Pages publishes
SunkenInTime Sep 4, 2026
9e27e71
fix: surface restored media sync state
SunkenInTime Sep 4, 2026
ac4c281
fix(ci): treat deploy confirmation as data
SunkenInTime Sep 4, 2026
d9200fa
fix(release): require canonical Convex production URL
SunkenInTime Sep 4, 2026
e4b388b
fix: add explicit cloud conflict resolution
SunkenInTime Sep 4, 2026
bd402cc
fix: scope durable media to cloud accounts
SunkenInTime Sep 4, 2026
e6de852
fix(release): guard overlapping Pages paths
SunkenInTime Sep 4, 2026
239e328
merge: combine accepted cloud sync invariants
SunkenInTime Sep 4, 2026
8df0e4f
fix: bound cloud mutation payloads
SunkenInTime Sep 4, 2026
01e79d4
fix: mark durable write failures unreliable
SunkenInTime Sep 4, 2026
5bf2fc5
fix: surface and drain account cloud outboxes
SunkenInTime Sep 4, 2026
f2d38a7
fix: park oversized work without overwrite
SunkenInTime Sep 4, 2026
680819a
Protect image asset cleanup lifecycle
SunkenInTime Sep 4, 2026
eed4ce2
Merge accepted PR #153 account cloud outboxes
SunkenInTime Sep 4, 2026
da9a2f2
Merge accepted PR #152 payload protocol limits
SunkenInTime Sep 4, 2026
a221051
Merge accepted PR #146 cloud edit permissions
SunkenInTime Sep 4, 2026
ffb2c95
Merge accepted PR #151 release protections
SunkenInTime Sep 4, 2026
df39cff
Merge accepted PR #154 asset deletion lifecycle
SunkenInTime Sep 4, 2026
9666755
fix: surface cloud library action failures
SunkenInTime Sep 4, 2026
993187c
test: preserve protocol gates across merged suites
SunkenInTime Sep 4, 2026
b0bc2ae
Merge accepted PR #155 library action failures
SunkenInTime Sep 4, 2026
e79e9a1
Fix cloud readiness review findings
SunkenInTime Sep 4, 2026
8e971d1
Preserve cloud work across recovery paths
SunkenInTime Sep 4, 2026
27d9065
Gate public image writes by protocol
SunkenInTime Sep 4, 2026
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
10 changes: 7 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ jobs:
# Fetch all branch history so that ref exists on PR and push runs.
fetch-depth: 0

- name: Test Release Safety Policy
shell: pwsh
run: powershell -ExecutionPolicy Bypass -File scripts/test_release_safety.ps1

- uses: actions/setup-node@v4
with:
node-version: 22
Expand Down Expand Up @@ -158,7 +162,7 @@ jobs:
run: fvm flutter analyze --no-fatal-infos
- name: Build Web Client
shell: pwsh
run: fvm flutter build web --no-wasm-dry-run --no-tree-shake-icons
run: fvm flutter build web --no-wasm-dry-run --no-tree-shake-icons --dart-define=ICARUS_CLOUD_ENVIRONMENT=development
- name: Run Tests
shell: pwsh
run: fvm flutter test
Expand All @@ -170,7 +174,7 @@ jobs:
cargo test --manifest-path third_party/convex_rs/Cargo.toml
- name: Build Windows Client
shell: pwsh
run: fvm flutter build windows --no-tree-shake-icons
run: fvm flutter build windows --no-tree-shake-icons --dart-define=ICARUS_CLOUD_ENVIRONMENT=development

- name: Build Windows Installer
shell: pwsh
Expand Down Expand Up @@ -278,4 +282,4 @@ jobs:
cargo test --manifest-path third_party/convex_rs/Cargo.toml

- name: Build Linux Client
run: fvm flutter build linux --no-tree-shake-icons
run: fvm flutter build linux --no-tree-shake-icons --dart-define=ICARUS_CLOUD_ENVIRONMENT=development
68 changes: 68 additions & 0 deletions .github/workflows/deploy-convex-production.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Deploy Convex Production

on:
workflow_dispatch:
inputs:
confirmation:
description: Type deploy-production to confirm this production backend deploy.
type: string
required: true

permissions:
contents: read

jobs:
deploy:
runs-on: ubuntu-latest
environment: Production

steps:
- name: Guard Production Deploy
shell: bash
env:
CONFIRMATION: ${{ inputs.confirmation }}
run: |
if [[ "$GITHUB_REF" != "refs/heads/main" ]]; then
echo "The production Convex backend can only deploy from branch main. Current ref: $GITHUB_REF"
exit 1
fi
if [[ "$CONFIRMATION" != "deploy-production" ]]; then
echo "Confirmation must be exactly: deploy-production"
exit 1
fi

- name: Checkout Production Source
uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm

- name: Require Production Convex Deploy Key
shell: bash
env:
CONVEX_DEPLOY_KEY: ${{ secrets.CONVEX_PRODUCTION_DEPLOY_KEY }}
run: |
if [[ -z "$CONVEX_DEPLOY_KEY" ]]; then
echo "Add CONVEX_PRODUCTION_DEPLOY_KEY to the GitHub Production environment."
exit 1
fi
if [[ "$CONVEX_DEPLOY_KEY" != prod:* ]]; then
echo "CONVEX_PRODUCTION_DEPLOY_KEY must be a production deploy key with the prod: prefix."
exit 1
fi

- name: Install Convex Dependencies
run: npm ci

- name: Check Convex Types
run: npx tsc --noEmit

- name: Run Convex Tests
run: npm run test:convex

- name: Deploy Convex Production Backend
env:
CONVEX_DEPLOY_KEY: ${{ secrets.CONVEX_PRODUCTION_DEPLOY_KEY }}
run: npx convex deploy --typecheck enable --message "GitHub Actions $GITHUB_SHA"
34 changes: 34 additions & 0 deletions .github/workflows/release-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,46 @@ permissions:
contents: write

jobs:
production-approval:
if: ${{ inputs.channel == 'stable' }}
runs-on: ubuntu-latest
environment: Production

steps:
- name: Guard Stable Desktop Release
shell: bash
env:
PRODUCTION_CONVEX_DEPLOYMENT_URL: ${{ vars.ICARUS_PRODUCTION_CONVEX_DEPLOYMENT_URL }}
PRODUCTION_CONVEX_CLIENT_ID: ${{ vars.ICARUS_PRODUCTION_CONVEX_CLIENT_ID }}
run: |
if [[ "$GITHUB_REF" != "refs/heads/main" ]]; then
echo "Stable desktop releases can only run from branch main. Current ref: $GITHUB_REF"
exit 1
fi
if [[ -z "$PRODUCTION_CONVEX_DEPLOYMENT_URL" || -z "$PRODUCTION_CONVEX_CLIENT_ID" ]]; then
echo "Set ICARUS_PRODUCTION_CONVEX_DEPLOYMENT_URL and ICARUS_PRODUCTION_CONVEX_CLIENT_ID before releasing stable."
exit 1
fi

build:
needs: production-approval
if: ${{ always() && (inputs.channel == 'prerelease' || needs.production-approval.result == 'success') }}
runs-on: windows-latest

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Run Release Preflight
shell: pwsh
env:
ICARUS_PRODUCTION_CONVEX_DEPLOYMENT_URL: ${{ vars.ICARUS_PRODUCTION_CONVEX_DEPLOYMENT_URL }}
ICARUS_PRODUCTION_CONVEX_CLIENT_ID: ${{ vars.ICARUS_PRODUCTION_CONVEX_CLIENT_ID }}
run: >-
powershell -ExecutionPolicy Bypass -File scripts/assert_release_preflight.ps1
-ReleaseTarget "${{ inputs.channel == 'stable' && 'stable-desktop' || 'prerelease-desktop' }}"

- uses: dart-lang/setup-dart@v1

- name: Add Pub Cache To PATH
Expand All @@ -76,6 +108,8 @@ jobs:
RELEASE_TITLE: ${{ inputs.release_title }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
POSTHOG_PROJECT_TOKEN: ${{ secrets.POSTHOG_PROJECT_TOKEN }}
ICARUS_PRODUCTION_CONVEX_DEPLOYMENT_URL: ${{ vars.ICARUS_PRODUCTION_CONVEX_DEPLOYMENT_URL }}
ICARUS_PRODUCTION_CONVEX_CLIENT_ID: ${{ vars.ICARUS_PRODUCTION_CONVEX_CLIENT_ID }}
run: |
$args = @(
"-ExecutionPolicy", "Bypass",
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/release-store.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,20 @@ permissions:
jobs:
build:
runs-on: windows-latest
environment: Production

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Run Store Release Preflight
shell: pwsh
env:
ICARUS_PRODUCTION_CONVEX_DEPLOYMENT_URL: ${{ vars.ICARUS_PRODUCTION_CONVEX_DEPLOYMENT_URL }}
ICARUS_PRODUCTION_CONVEX_CLIENT_ID: ${{ vars.ICARUS_PRODUCTION_CONVEX_CLIENT_ID }}
run: powershell -ExecutionPolicy Bypass -File scripts/assert_release_preflight.ps1 -ReleaseTarget store

- uses: dart-lang/setup-dart@v1

- name: Add Pub Cache To PATH
Expand All @@ -55,6 +63,8 @@ jobs:
shell: pwsh
env:
POSTHOG_PROJECT_TOKEN: ${{ secrets.POSTHOG_PROJECT_TOKEN }}
ICARUS_PRODUCTION_CONVEX_DEPLOYMENT_URL: ${{ vars.ICARUS_PRODUCTION_CONVEX_DEPLOYMENT_URL }}
ICARUS_PRODUCTION_CONVEX_CLIENT_ID: ${{ vars.ICARUS_PRODUCTION_CONVEX_CLIENT_ID }}
run: powershell -ExecutionPolicy Bypass -File scripts/build_store_release.ps1

- name: Upload Store Artifacts
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,13 @@ back to the installed build.
## Build

```bash
flutter build <platform>
flutter build <platform> --dart-define=ICARUS_CLOUD_ENVIRONMENT=development
```

That command makes an internal build against the named development Convex
deployment. Use the release scripts in `docs/release_process.md` for stable or
Store artifacts. They require explicit production cloud configuration.

## Versioning (Windows MSIX)

There is a helper script for bumping versions across `pubspec.yaml` and `lib/const/settings.dart`.
Expand Down
Loading
Loading