Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
0ace148
feat(cloud): add control plane and outbound runtime connections
killswitch-GUI Oct 5, 2026
70f6509
fix(cloud): verify local readiness and close terminal clients
killswitch-GUI Oct 5, 2026
6c24cb0
test(cloud): avoid keychain prompts during native cleanup
killswitch-GUI Oct 5, 2026
e6e3540
chore: integrate desktop workflow schedules
killswitch-GUI Oct 5, 2026
c46b16b
fix(cloud): scale connection UI with shared typography
killswitch-GUI Oct 5, 2026
335a9d7
chore: merge main release smoke fix
killswitch-GUI Oct 6, 2026
35b4516
feat(control-plane): add runtime operations and shared workspaces
killswitch-GUI Oct 6, 2026
dfa4cd0
feat(desktop): unify runtime controls and isolate development credent…
killswitch-GUI Oct 7, 2026
e70be74
fix(control-plane): harden sharing and development custody
killswitch-GUI Oct 7, 2026
be27c4b
fix(control-plane): avoid unchanged inventory revisions
killswitch-GUI Oct 7, 2026
ed1eb5a
security(sdk): checkpoint patched transport dependencies
killswitch-GUI Oct 7, 2026
6eaf0f3
build(sdk): complete checkpoint regeneration and dependency tidy
killswitch-GUI Oct 7, 2026
5cfc0b4
test(release): preserve public notice fixture permissions
killswitch-GUI Oct 7, 2026
7172bcd
fix(credentials): validate custody paths and Windows recovery fixtures
killswitch-GUI Oct 7, 2026
d24ee61
fix(windows): replace private files through retained handles
killswitch-GUI Oct 7, 2026
68bea65
fix(desktop): route composer models and update browser contracts
killswitch-GUI Oct 7, 2026
9f11932
fix(windows): use native directory-relative file replacement
killswitch-GUI Oct 7, 2026
6a92c31
fix(sandbox): serve both macOS proxy loopbacks
killswitch-GUI Oct 7, 2026
8b29088
fix(ci): allow cold Windows Desktop acceptance to finish
killswitch-GUI Oct 7, 2026
2f75df8
test(ci): enforce the Windows Desktop cold-build budget
killswitch-GUI Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@
.githooks/
.agents/
.codex/
.local/
.playwright-cli/

# Local runtime state and credentials must never enter the build context.
.colossus/
**/.env
**/.env.*
**/development-credentials/
**/.authority-key.env
**/.aws/
**/.ssh/
**/.git-credentials
Expand Down
110 changes: 110 additions & 0 deletions .github/workflows/control-plane-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Publish Control Plane image

on:
release:
types: [published]
workflow_dispatch:
inputs:
tag:
description: Published stable or preview release tag
required: true
type: string
pull_request:
paths:
- .github/workflows/control-plane-image.yml
- scripts/ci/*control-plane*.mjs
- scripts/ci/publish-control-plane-image.sh

permissions: {}

concurrency:
group: control-plane-image-${{ github.event.release.tag_name || inputs.tag || github.event.pull_request.number }}
cancel-in-progress: false

jobs:
publisher-revision:
name: Resolve the protected main publisher
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
outputs:
revision: ${{ steps.publisher.outputs.revision }}
steps:
- name: Use proposed code for tests or protected main for publication
id: publisher
env:
GH_TOKEN: ${{ github.token }}
EVENT_NAME: ${{ github.event_name }}
shell: bash
run: |
set -euo pipefail
if [[ "$EVENT_NAME" == pull_request ]]; then
revision="$GITHUB_SHA"
else
revision=$(gh api repos/obscuritylabs/Colossus/git/ref/heads/main --jq .object.sha)
fi
[[ "$revision" =~ ^[0-9a-f]{40}$ ]]
printf 'revision=%s\n' "$revision" >> "$GITHUB_OUTPUT"

contracts:
needs: publisher-revision
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ needs.publisher-revision.outputs.revision }}
persist-credentials: false
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 22.18.0
- run: node --test scripts/ci/control-plane-assets.test.mjs
- run: bash -n scripts/ci/publish-control-plane-image.sh

publish:
name: Publish the exact tested multi-platform server
needs: [publisher-revision, contracts]
if: >-
github.repository == 'obscuritylabs/Colossus' &&
((github.event_name == 'release' && github.event.release.draft == false) ||
(github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main'))
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
actions: read
contents: read
packages: write
steps:
- name: Use the same protected publisher revision that passed contracts
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ needs.publisher-revision.outputs.revision }}
fetch-depth: 0
persist-credentials: false
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 22.18.0
- name: Authenticate with a job-scoped registry token
env:
GHCR_TOKEN: ${{ github.token }}
GHCR_USER: ${{ github.actor }}
run: printf '%s' "$GHCR_TOKEN" | docker login ghcr.io --username "$GHCR_USER" --password-stdin
- name: Verify release bytes against trusted tag artifacts and publish
env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: ${{ github.event.release.tag_name || inputs.tag }}
run: bash scripts/ci/publish-control-plane-image.sh
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: colossus-control-plane-publication
path: |
${{ runner.temp }}/control-plane-image/publication.json
${{ runner.temp }}/control-plane-image/assets.json
if-no-files-found: error
retention-days: 30
- name: Remove the job-scoped registry session
if: always()
run: docker logout ghcr.io
123 changes: 123 additions & 0 deletions .github/workflows/documentation-candidate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
name: Documentation image candidate

on:
push:
tags: ["v*"]
pull_request:
paths:
- .github/workflows/documentation-candidate.yml
- .github/workflows/documentation-image.yml
- .dockerignore
- deploy/documentation/**
- docs/**
- documentation/legacy-routes.tsv
- scripts/docs-site
- scripts/generate-doc-redirects
- scripts/ci/documentation-*.mjs
- scripts/ci/publish-documentation-image.sh
- scripts/ci/verify-control-plane-assets.mjs
- zensical.toml

permissions: {}

concurrency:
group: documentation-candidate-${{ github.ref }}
cancel-in-progress: false

jobs:
source:
name: Verify documentation candidate source
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
outputs:
tag: ${{ steps.source.outputs.tag }}
commit: ${{ steps.source.outputs.commit }}
epoch: ${{ steps.source.outputs.epoch }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
persist-credentials: false
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 22.18.0
- name: Bind the annotated release tag to protected main
id: source
env:
EVENT_NAME: ${{ github.event_name }}
SOURCE_TAG: ${{ github.ref_name }}
shell: bash
run: |
set -euo pipefail
commit=$(git rev-parse HEAD)
tag=v0.0.0-preview.1
if [[ "$EVENT_NAME" == push ]]; then
tag="$SOURCE_TAG"
node --input-type=module - "$tag" "$commit" <<'JS'
import { validateRequest } from './scripts/ci/verify-control-plane-assets.mjs';
validateRequest(process.argv[2], process.argv[3]);
JS
git fetch origin refs/heads/main:refs/remotes/origin/main "refs/tags/$tag:refs/tags/$tag"
test "$(git cat-file -t "$tag")" = tag
test "$(git rev-parse "$tag^{commit}")" = "$commit"
git merge-base --is-ancestor "$commit" origin/main
fi
printf 'tag=%s\ncommit=%s\nepoch=%s\n' "$tag" "$commit" "$(git show -s --format=%ct "$commit")" >> "$GITHUB_OUTPUT"
- run: node --test scripts/ci/documentation-candidate.test.mjs
- run: bash -n scripts/ci/publish-documentation-image.sh

candidate:
name: Build and smoke linux/${{ matrix.arch }} documentation
needs: source
strategy:
fail-fast: false
matrix:
include:
- arch: amd64
runner: ubuntu-24.04
- arch: arm64
runner: ubuntu-24.04-arm
runs-on: ${{ matrix.runner }}
timeout-minutes: 20
permissions:
contents: read
env:
SOURCE_TAG: ${{ needs.source.outputs.tag }}
SOURCE_COMMIT: ${{ needs.source.outputs.commit }}
SOURCE_DATE_EPOCH: ${{ needs.source.outputs.epoch }}
IMAGE_ARCH: ${{ matrix.arch }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ needs.source.outputs.commit }}
persist-credentials: false
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 22.18.0
- name: Build exact-source documentation without registry credentials
run: |
docker build --platform "linux/$IMAGE_ARCH" \
--build-arg "COLOSSUS_VERSION=$SOURCE_TAG" \
--build-arg "COLOSSUS_REVISION=$SOURCE_COMMIT" \
--build-arg "SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH" \
--tag colossus-documentation:candidate \
--file deploy/documentation/Dockerfile .
- name: Test browse, search, portable links, and hardened runtime
run: node deploy/documentation/smoke.mjs colossus-documentation:candidate
- name: Retain only the actual tested image and source-bound candidate
shell: bash
run: |
set -euo pipefail
candidate_output="$RUNNER_TEMP/documentation-candidate"
mkdir -p "$candidate_output"
docker save colossus-documentation:candidate | gzip -n > "$candidate_output/Colossus-Documentation-${SOURCE_TAG}-linux-${IMAGE_ARCH}.docker.tar.gz"
node scripts/ci/documentation-candidate.mjs create "$candidate_output" "$SOURCE_TAG" "$SOURCE_COMMIT" "$IMAGE_ARCH"
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: github.event_name == 'push'
with:
name: colossus-documentation-${{ matrix.arch }}
path: ${{ runner.temp }}/documentation-candidate/*
if-no-files-found: error
retention-days: 30
112 changes: 112 additions & 0 deletions .github/workflows/documentation-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
name: Publish Documentation image

on:
release:
types: [published]
workflow_dispatch:
inputs:
tag:
description: Published stable or preview release tag
required: true
type: string
pull_request:
paths:
- .github/workflows/documentation-image.yml
- scripts/ci/documentation-*.mjs
- scripts/ci/publish-documentation-image.sh

permissions: {}

concurrency:
group: documentation-image-${{ github.event.release.tag_name || inputs.tag || github.event.pull_request.number }}
cancel-in-progress: false

jobs:
publisher-revision:
name: Resolve the protected main publisher
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
outputs:
revision: ${{ steps.publisher.outputs.revision }}
steps:
- name: Use proposed code for tests or protected main for publication
id: publisher
env:
GH_TOKEN: ${{ github.token }}
EVENT_NAME: ${{ github.event_name }}
shell: bash
run: |
set -euo pipefail
if [[ "$EVENT_NAME" == pull_request ]]; then
revision="$GITHUB_SHA"
else
revision=$(gh api repos/obscuritylabs/Colossus/git/ref/heads/main --jq .object.sha)
fi
[[ "$revision" =~ ^[0-9a-f]{40}$ ]]
printf 'revision=%s\n' "$revision" >> "$GITHUB_OUTPUT"

contracts:
name: Verify immutable documentation publication contracts
needs: publisher-revision
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ needs.publisher-revision.outputs.revision }}
persist-credentials: false
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 22.18.0
- run: node --test scripts/ci/documentation-candidate.test.mjs
- run: bash -n scripts/ci/publish-documentation-image.sh

publish:
name: Publish the tested documentation platform index
needs: [publisher-revision, contracts]
if: >-
github.repository == 'obscuritylabs/Colossus' &&
((github.event_name == 'release' && github.event.release.draft == false) ||
(github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main'))
runs-on: ubuntu-latest
timeout-minutes: 20
permissions:
actions: read
contents: read
packages: write
steps:
- name: Use the same protected publisher revision that passed contracts
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ needs.publisher-revision.outputs.revision }}
fetch-depth: 0
persist-credentials: false
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 22.18.0
- name: Authenticate with a job-scoped package token
env:
GHCR_TOKEN: ${{ github.token }}
GHCR_USER: ${{ github.actor }}
run: printf '%s' "$GHCR_TOKEN" | docker login ghcr.io --username "$GHCR_USER" --password-stdin
- name: Verify release provenance, retained tested candidates, and immutable publication
env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: ${{ github.event.release.tag_name || inputs.tag }}
run: bash scripts/ci/publish-documentation-image.sh
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: colossus-documentation-publication-${{ github.event.release.tag_name || inputs.tag }}
path: |
${{ runner.temp }}/documentation-image/publication.json
${{ runner.temp }}/documentation-image/provenance.json
${{ runner.temp }}/documentation-image/trusted/*.json
if-no-files-found: error
retention-days: 30
- name: Remove the job-scoped registry session
if: always()
run: docker logout ghcr.io
Loading
Loading