Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
105 commits
Select commit Hold shift + click to select a range
0c7ff83
test(cluster): define operator and chart contracts
Jul 20, 2026
ad237e3
test(cluster): define default-off operator client contracts
Jul 20, 2026
89f3798
test(cluster): define CI and proof contracts
Jul 20, 2026
92a0cd1
test(cluster): define operator gateway contracts
Jul 20, 2026
889a807
fix(ci): make cluster test pipeline self-contained
Jul 20, 2026
99fa275
fix(ci): run cluster contracts before implementation gates
Jul 20, 2026
d06b1bb
feat(cluster): add portable Kubernetes operator
Jul 20, 2026
94bd99b
ci(cluster): implement image and live proof harness
Jul 20, 2026
4a11683
ci(cluster): reuse bounded Harbor registry auth
Jul 20, 2026
844b8d9
feat(cluster): add default-off operator client
Jul 20, 2026
a2a6c5d
ci(cluster): hand chart contracts to Helm stage
Jul 20, 2026
bb5b0d3
feat(cluster): add stateless cluster gateway
Jul 20, 2026
03da5ec
fix(cluster): close server integration gaps
Jul 20, 2026
0bbe04c
fix(cluster): align gateway resources with CRDs
Jul 20, 2026
6b45535
fix(operator): wait for sessions before workspace deletion
Jul 20, 2026
b8bd3c0
Replace cluster static auth with TokenReview identity
Jul 20, 2026
c99df7d
test(cluster): cover integration safety gaps
Jul 20, 2026
d222c0b
fix(cluster): harden portable runtime reconciliation
Jul 20, 2026
b11370c
test(cluster): require rotating CI identity
Jul 20, 2026
b5cb895
feat(cluster): support projected CI identity
Jul 20, 2026
a1e8e75
fix(cluster): separate CI API and web endpoints
Jul 20, 2026
7e78dd9
fix(cluster): harden session state and replay boundaries
Jul 20, 2026
1a7487a
fix(cluster): secure HA projections and idempotency
Jul 20, 2026
539b8f6
fix(cluster): harden portable operator packaging
Jul 20, 2026
8e1ba92
fix(ci): bind cluster proof and image evidence
Jul 20, 2026
81add12
fix(cluster): enforce negotiated client projections
Jul 20, 2026
560882f
test(ci): assert truthful signer rejection
Jul 20, 2026
3dc4098
fix(ci): run cluster gates on compatible runtimes
Jul 20, 2026
3c3e457
test(ci): require Bun for cluster protocol gates
Jul 20, 2026
90331ac
fix(ci): satisfy release lint and Bun execution
Jul 20, 2026
ad111ef
fix(ci): align cluster Bun verification
Jul 20, 2026
acc5f85
fix(ci): type cluster verification fixtures
Jul 20, 2026
88928e1
fix(ci): resolve client contracts and CA path
Jul 20, 2026
44b04bb
test(cluster): align negotiated projection fixtures
Jul 20, 2026
208ba84
fix(cluster): align web projection contracts
Jul 20, 2026
300e49c
fix(ci): provision pinned Bun for upstream tests
Jul 20, 2026
7666bfc
test(wire): cover cluster command ownership
Jul 20, 2026
7bb73cb
test(protocol): preserve additive cluster provenance
Jul 20, 2026
b30533c
fix(projection): preserve ordered inventory semantics
Jul 20, 2026
471377a
fix(cluster): require Bun for server tests
Jul 20, 2026
446b95b
test(desktop): assert cluster capability default off
Jul 20, 2026
5160bbb
test: advance projection fixture cursors
Jul 20, 2026
c93c8f8
test: resolve protocol source in playwright
Jul 20, 2026
d4c8fcc
ci: install playwright in e2e container
Jul 20, 2026
b3c6c76
test: answer preview state recovery
Jul 20, 2026
4da6e39
test: isolate preview response values
Jul 20, 2026
068dd3e
test: assert workspace metadata row
Jul 20, 2026
f579e20
test: dismiss mobile session drawer
Jul 20, 2026
98f14c4
test: target preview selector exactly
Jul 20, 2026
fd11c05
test: normalize reduced motion duration
Jul 20, 2026
f8a20e4
test: scope preview lease fixture identity
Jul 20, 2026
eea72b7
fix: omit empty preview type selector
Jul 20, 2026
f5a1d8b
ci: run wire tests with git available
Jul 20, 2026
d2deda7
test: require Git-capable wire runner
Jul 20, 2026
9a895f0
ci: install jq for tooling contracts
Jul 20, 2026
b6f75c9
fix(ci): make checksum parsing portable to POSIX awk
Jul 20, 2026
bf126e5
fix(ci): run image evidence in portable shells
Jul 20, 2026
90366df
fix(ci): preserve multi-arch evidence identity
Jul 20, 2026
3f45cc5
fix(cluster): align live proof and bounded metrics
Jul 20, 2026
6a9351a
fix(ci): parse structured Loki errors
Jul 20, 2026
dd7f9c7
test(web): inspect disabled attribute exactly
Jul 20, 2026
2ac57e3
fix(cluster): configure pinned OMP session runtime
Jul 20, 2026
0382a79
fix(cluster): align OMP authority child home
Jul 20, 2026
583033c
Fix OMP profile config convergence
Jul 20, 2026
0ccfca9
Harden cluster runtime configuration
Jul 20, 2026
ecd5195
Fail closed on OMP runtime revocation
Jul 20, 2026
7190af1
Harden maintainer integration timeout
Jul 21, 2026
3e98efe
Make speech concurrency test event-driven
Jul 21, 2026
5a84ae3
Preserve speech replacement assertions
Jul 21, 2026
65f3978
Bound upstream CI test concurrency
Jul 21, 2026
3c05f51
Align bounded test concurrency contract
Jul 21, 2026
01398bd
test(desktop): require cluster operator opt-in wiring
Jul 21, 2026
d2c6424
fix(desktop): wire cluster operator opt-in
Jul 21, 2026
6eb1fd5
fix(desktop): keep feature flag construction direct
Jul 21, 2026
f25ac55
build(operator): lock Go module checksums
Jul 21, 2026
d009fd5
ci(cluster): isolate wire contract tests
Jul 21, 2026
d8c4086
fix(desktop): normalize gated pairing capabilities
Jul 21, 2026
bb872a2
test(desktop): align effective pairing grant
Jul 21, 2026
b472dd8
feat(desktop): request cluster endpoint permissions
Jul 21, 2026
358a166
fix(operator): use persistent claim phase type
Jul 21, 2026
8d38db1
Merge remote-tracking branch 'origin/main' into maint/pr115-main-inte…
iarbpairs Jul 21, 2026
f46b937
fix(operator): make workspace retention immutable
Jul 21, 2026
39d69c0
fix(client): suppress unauthorized cluster workspace events
Jul 21, 2026
7721042
fix(cluster): accept Kubernetes host subdomains
Jul 21, 2026
58efdae
fix(ci): bind images to canonical source
Jul 21, 2026
6bfc45a
fix(operator): revoke invalid session runtimes
Jul 21, 2026
b8a43c7
fix(chart): enforce portable resource contracts
Jul 21, 2026
fad9bb9
fix(cluster): relist after host authority invalidation
Jul 21, 2026
1b5c5f6
fix(operator): watch retained workspace storage
Jul 21, 2026
d49669e
fix(cluster): reload projected Kubernetes tokens
Jul 21, 2026
19fbdb3
fix(client): gate cluster session metadata
Jul 21, 2026
e6f101f
fix(cluster): stabilize PR 115 integration
iarbpairs Jul 21, 2026
b9d2001
Merge remote-tracking branch 'origin/main' into maint/pr115-main-inte…
iarbpairs Jul 21, 2026
eaeef3c
fix(ci): make image promotion write-once
Jul 21, 2026
db01132
style(operator): format reconciliation changes
Jul 21, 2026
3226c42
fix(cluster): revalidate routes before dispatch
Jul 21, 2026
14a92f8
Merge remote-tracking branch 'roy/agent/t4-cluster-operator' into age…
Jul 21, 2026
10b3901
fix(client): keep cluster negotiation default-off
iarbpairs Jul 21, 2026
65cce6d
Merge remote-tracking branch 'refs/remotes/roy/agent/t4-cluster-opera…
iarbpairs Jul 21, 2026
0b24612
fix(cluster): stabilize concurrent authority tests
iarbpairs Jul 21, 2026
9e00c37
Merge remote-tracking branch 'origin/main' into maint/pr115-main-inte…
iarbpairs Jul 21, 2026
aff0ca3
fix(ci): mirror upstream Flutter gate split
Jul 21, 2026
cf80439
Merge remote-tracking branch 'roy/agent/t4-cluster-operator' into age…
Jul 21, 2026
e7c0316
fix(test): observe automatic restart reattach
iarbpairs Jul 21, 2026
24909b3
Merge remote-tracking branch 'refs/remotes/roy/agent/t4-cluster-opera…
iarbpairs Jul 21, 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
16 changes: 16 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
.git
.gitignore
.cluster-ci
.cluster-ci/registry-auth
**/.cluster-ci/registry-auth
artifacts
**/artifacts
node_modules
**/node_modules
.env
.env.*
*.log
coverage
**/coverage
test-results
playwright-report
69 changes: 68 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ jobs:
timeout-minutes: 5
outputs:
continuity: ${{ steps.classify.outputs.continuity }}
cluster: ${{ steps.classify.outputs.cluster }}
tooling: ${{ steps.classify.outputs.tooling }}
android_debug: ${{ steps.classify.outputs.android_debug }}
flutter: ${{ steps.classify.outputs.flutter }}
Expand Down Expand Up @@ -173,6 +174,70 @@ jobs:
if-no-files-found: error
retention-days: 14

cluster:
needs: changes
if: ${{ github.event_name != 'pull_request' || needs.changes.outputs.cluster == 'true' }}
runs-on: ubuntu-24.04
timeout-minutes: 25
steps:
- name: Check out source
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Install pnpm
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
with:
version: 11.10.0

- name: Install Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 24.13.1
cache: pnpm

- name: Install Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: 1.3.14

- name: Install Go
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
go-version: "1.25.5"
cache-dependency-path: packages/cluster-operator/go.sum

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Install pinned Helm
shell: bash
run: |
set -euo pipefail
curl -fsSLo /tmp/helm.tar.gz https://get.helm.sh/helm-v3.19.0-linux-amd64.tar.gz
echo "a7f81ce08007091b86d8bd696eb4d86b8d0f2e1b9f6c714be62f82f96a594496 /tmp/helm.tar.gz" | sha256sum -c -
tar -xzf /tmp/helm.tar.gz -C /tmp
sudo install -m 0755 /tmp/linux-amd64/helm /usr/local/bin/helm

- name: Run cluster CI proof contracts
run: pnpm test:cluster:ci

- name: Run cluster server tests
run: pnpm --filter @t4-code/cluster-server test

- name: Typecheck cluster server
run: pnpm --filter @t4-code/cluster-server typecheck

- name: Run cluster protocol contracts
run: |
pnpm --filter @t4-code/host-wire exec bun test test/cluster-operator.test.ts
pnpm --filter @t4-code/host-service exec bun test test/cluster-default-off.test.ts

- name: Run operator tests
working-directory: packages/cluster-operator
run: go test ./...

- name: Lint cluster chart
run: helm lint deploy/charts/t4-cluster

tooling:
needs: changes
if: ${{ github.event_name != 'pull_request' || needs.changes.outputs.tooling == 'true' }}
Expand Down Expand Up @@ -395,7 +460,7 @@ jobs:
verify:
name: verify
if: ${{ always() }}
needs: [changes, core, legacy-bridge-continuity, tooling, android-debug, flutter, flutter-android, flutter-apple]
needs: [changes, core, legacy-bridge-continuity, cluster, tooling, android-debug, flutter, flutter-android, flutter-apple]
runs-on: ubuntu-24.04
timeout-minutes: 5
steps:
Expand All @@ -405,6 +470,7 @@ jobs:
CHANGES_RESULT: ${{ needs.changes.result }}
CORE_RESULT: ${{ needs.core.result }}
CONTINUITY_RESULT: ${{ needs.legacy-bridge-continuity.result }}
CLUSTER_RESULT: ${{ needs.cluster.result }}
TOOLING_RESULT: ${{ needs.tooling.result }}
ANDROID_RESULT: ${{ needs.android-debug.result }}
FLUTTER_RESULT: ${{ needs.flutter.result }}
Expand All @@ -416,6 +482,7 @@ jobs:
test "$CORE_RESULT" = success
for result in \
"$CONTINUITY_RESULT" \
"$CLUSTER_RESULT" \
"$TOOLING_RESULT" \
"$ANDROID_RESULT" \
"$FLUTTER_RESULT" \
Expand Down
Loading
Loading