Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
d2279cf
feat: consolidate pending storage, search, and session changes
ScriptedAlchemy Nov 4, 2026
e5e3291
test(storage): bypass ownership guard only in corruption fixture
ScriptedAlchemy Nov 4, 2026
0d513e4
chore(release): release 1.0.0-beta.97
ScriptedAlchemy Nov 4, 2026
9415db3
chore(release): update generated metadata
github-actions[bot] Nov 4, 2026
04b2fdd
Merge latest master into consolidated changes
ScriptedAlchemy Nov 4, 2026
08dce8a
Merge regenerated release metadata into consolidated changes
ScriptedAlchemy Nov 4, 2026
0b93806
fix(release): exclude unapproved beta.97 from consolidation
ScriptedAlchemy Nov 4, 2026
f2f111f
fix(lcm): retain short data URI replay representations
ScriptedAlchemy Nov 4, 2026
06653e6
test(lcm): exercise retention budgets with valid large payloads
ScriptedAlchemy Nov 4, 2026
9f2ae73
chore(sessions): trace Codex per-rollout store latency
ScriptedAlchemy Nov 4, 2026
317f03c
fix(sqlite): release lost-file pins during health observation
ScriptedAlchemy Nov 4, 2026
7a9f535
chore(sessions): consolidate Codex rollout tracing
ScriptedAlchemy Nov 4, 2026
5cc5e87
test(sessions): keep quarantined legacy source outside canonical body GC
ScriptedAlchemy Nov 4, 2026
eca0329
test(git): verify preflight leaves exact object bytes untouched
ScriptedAlchemy Nov 4, 2026
0343b7c
fix(lcm): stop idle scoped retention from requeuing itself
ScriptedAlchemy Nov 4, 2026
50fbef3
fix(sessions): retry temporal publication before summary admission
ScriptedAlchemy Nov 4, 2026
84302c4
test(skills): assert unavailable use evidence in MCP journeys
ScriptedAlchemy Nov 4, 2026
e71ed2d
fix(storage): refuse drifted observations before GC trigger repair
ScriptedAlchemy Nov 4, 2026
0e2cac2
style(storage): format observation schema admission validator
ScriptedAlchemy Nov 4, 2026
b707d39
style(ci): apply Bazel rustfmt to retention and Git preflight tests
ScriptedAlchemy Nov 4, 2026
10fbc92
fix(ci): reduce Bazel runner disk usage across workflows
ScriptedAlchemy Nov 4, 2026
468b03c
fix(ci): repair composite action metadata after runner changes
ScriptedAlchemy Nov 4, 2026
3fa508f
fix(global-db): classify drifted observation attachments before GC
ScriptedAlchemy Nov 4, 2026
c2c045c
test(retention): compare equal streamed work after backlog drains
ScriptedAlchemy Nov 4, 2026
b484bc8
fix(code-index): bound callable graph rewarm waits
ScriptedAlchemy Nov 4, 2026
e28de39
fix(retention): publish durable sources for comparable read probes
ScriptedAlchemy Nov 4, 2026
590208a
fix(accounting): persist savings after baseline read failure
ScriptedAlchemy Nov 4, 2026
54867dd
test(accounting): cover durable deltas without a display baseline
ScriptedAlchemy Nov 4, 2026
0a9801f
fix(accounting): distinguish display read failure from write admission
ScriptedAlchemy Nov 4, 2026
76e784c
fix(graph): keep rewarm probes off async workers
ScriptedAlchemy Nov 4, 2026
0d28b76
fix(accounting): integrate durable baseline recovery
ScriptedAlchemy Nov 4, 2026
fc1c028
test(daemon): stabilize canonical broker contention regression
ScriptedAlchemy Nov 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
1 change: 1 addition & 0 deletions .github/actions/build-cli/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ runs:
id: bazel
if: inputs.prepared-build != 'true'
with:
remote-download-outputs: toplevel
cache-key: ${{ inputs.cache-key }}
tailscale-client-id: ${{ inputs.tailscale-client-id }}

Expand Down
83 changes: 70 additions & 13 deletions .github/actions/setup-bazel/action.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
name: Set up Bazel
description: >
Installs Bazel through the pinned bazelisk with its repository cache, and a
disk cache named by `cache-key` that only master saves automatically: PRs
disk cache for hosted-only execution named by `cache-key`. Only master saves
automatically: PRs
restore master's entry; explicit native Windows dispatches may also prime
their branch's cache. Jobs with the same configuration and
runner image share a restore prefix; master callers save fresh
Expand All @@ -18,6 +19,9 @@ inputs:
prefix misses. Use when two jobs share rustc flags and runner image so
Clippy can reuse Test Linux action outputs.
default: ""
remote-download-outputs:
description: Remote outputs to materialize; packaging jobs require toplevel.
default: "minimal"
cache-save:
description: Whether this setup may save Bazelisk and repository caches.
default: "true"
Expand All @@ -42,6 +46,53 @@ outputs:
runs:
using: composite
steps:
- name: Free runner disk space
if: runner.os == 'Linux' && runner.environment == 'github-hosted'
shell: bash
run: |
set -euo pipefail
df -h /
status=0
sudo rm -rf /usr/local/lib/android &
p1=$!
sudo rm -rf /usr/share/dotnet &
p2=$!
sudo rm -rf /opt/ghc &
p3=$!
sudo rm -rf /opt/hostedtoolcache/CodeQL &
p4=$!
for pid in "$p1" "$p2" "$p3" "$p4"; do
wait "$pid" || status=1
done
df -h /
exit "$status"

- name: Remove inactive Xcode installations
if: runner.os == 'macOS' && runner.environment == 'github-hosted'
shell: bash
run: |
df -h /
python3 - <<'PYTHON'
import pathlib
import subprocess

applications = pathlib.Path("/Applications")
selected = pathlib.Path(subprocess.check_output(["xcode-select", "-p"], text=True).strip()).resolve(strict=True)
active = next((path for path in selected.parents if path.suffix == ".app"), None)
if active is None:
raise SystemExit(f"Selected developer directory is not an Xcode application: {selected}")
print(f"Selected Xcode before cleanup: {active}", flush=True)
inactive = [path for path in applications.glob("Xcode*.app") if path.resolve() != active]
for path in inactive:
print(f"Removing inactive Xcode: {path}", flush=True)
subprocess.run(["sudo", "rm", "-rf", "--", str(path)], check=True)
after = pathlib.Path(subprocess.check_output(["xcode-select", "-p"], text=True).strip()).resolve(strict=True)
if after != selected:
raise SystemExit(f"Selected developer directory changed: {selected} -> {after}")
print(f"Selected Xcode after cleanup: {active}", flush=True)
PYTHON
df -h /

- name: Verify Windows build runner configuration
if: runner.os == 'Windows' && runner.environment == 'github-hosted'
shell: pwsh
Expand Down Expand Up @@ -104,18 +155,6 @@ runs:
);
JS

- uses: bazel-contrib/setup-bazel@104e3eea9447cdaa4b00d0fb46191a3985d26ab3 # 0.19.1
with:
bazelisk-cache: true
repository-cache: true
disk-cache: false
bazelrc: >-
build --disk_cache=${{ steps.disk-cache-config.outputs.path }}
cache-save: ${{ github.ref == 'refs/heads/master' && inputs.cache-save == 'true' }}
# Windows build-script runfiles nest each vendored crate's sources
# under its repository name twice; keep the output base short.
output-base: ${{ steps.disk-cache-config.outputs.output-base }}

- name: Preserve the runner network environment for Tailscale
if: runner.os == 'Linux' && inputs.tailscale-client-id != ''
shell: bash
Expand Down Expand Up @@ -153,6 +192,7 @@ runs:
shell: bash
env:
TAILSCALE_OUTCOME: ${{ steps.tailscale.outcome }}
REMOTE_DOWNLOAD_OUTPUTS: ${{ inputs.remote-download-outputs }}
run: |
if [[ "$TAILSCALE_OUTCOME" == success ]]; then
# Resolve the peer through the local API without changing runner DNS.
Expand All @@ -168,6 +208,18 @@ runs:
fi
python3 "$GITHUB_ACTION_PATH/configure_fleet.py"

- uses: bazel-contrib/setup-bazel@104e3eea9447cdaa4b00d0fb46191a3985d26ab3 # 0.19.1
with:
bazelisk-cache: true
repository-cache: true
disk-cache: false
bazelrc: >-
build --disk_cache=${{ steps.fleet.outputs.enabled != 'true' && steps.disk-cache-config.outputs.path || '' }}
cache-save: ${{ github.ref == 'refs/heads/master' && inputs.cache-save == 'true' }}
# Windows build-script runfiles nest each vendored crate's sources
# under its repository name twice; keep the output base short.
output-base: ${{ steps.disk-cache-config.outputs.output-base }}

- name: Map the shared Windows compiler path
if: steps.fleet.outputs.enabled == 'true' && runner.os == 'Windows'
shell: pwsh
Expand Down Expand Up @@ -207,3 +259,8 @@ runs:
path: ${{ steps.disk-cache-config.outputs.path }}
key: ${{ steps.disk-cache-config.outputs.prefix }}run-${{ github.run_id }}-${{ github.run_attempt }}-${{ github.job }}
restore-keys: ${{ steps.disk-cache-config.outputs.restore-keys }}

- name: Report available build storage
continue-on-error: true
shell: bash
run: bash "$GITHUB_ACTION_PATH/report_disk.sh"
6 changes: 5 additions & 1 deletion .github/actions/setup-bazel/configure_fleet.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ def configure_fleet(
runner_arch: str,
host: str = "ubuntu-main",
port: int = 50051,
remote_download_outputs: str = "minimal",
) -> bool:
if remote_download_outputs not in {"minimal", "toplevel", "all"}:
raise ValueError(f"Invalid remote output mode: {remote_download_outputs}")
profile = {
("Linux", "X64"): "rbe-linux",
("macOS", "ARM64"): "rbe-macos",
Expand Down Expand Up @@ -77,7 +80,7 @@ def configure_fleet(
build --remote_timeout=600
# Survive brief coordinator restarts; five retries expire in about 3s.
build --remote_retries=10
build --remote_download_outputs=toplevel
build --remote_download_outputs={remote_download_outputs}
build --jobs={16 if windows else 40}
# Leave room for Bazel analysis and downloads while large Rust actions compile.
build --local_resources=cpu=2
Expand Down Expand Up @@ -108,4 +111,5 @@ def configure_fleet(
os.environ["RUNNER_OS"],
os.environ["RUNNER_ARCH"],
host=os.environ.get("BAZEL_FLEET_HOST", "ubuntu-main"),
remote_download_outputs=os.environ.get("REMOTE_DOWNLOAD_OUTPUTS", "minimal"),
)
14 changes: 14 additions & 0 deletions .github/actions/setup-bazel/report_disk.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail

echo '::group::Build filesystem capacity'
df -h "$GITHUB_WORKSPACE" "$HOME" "$RUNNER_TEMP"
df -i "$GITHUB_WORKSPACE"
echo '::endgroup::'
echo '::group::Build outputs, caches, and temporary files'
for path in "$GITHUB_WORKSPACE/bazel-out/" "$HOME/.cache" "$RUNNER_TEMP"; do
if [[ -d "$path" ]]; then
du -sh "$path"
fi
done
echo '::endgroup::'
110 changes: 56 additions & 54 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,13 @@ jobs:
if-no-files-found: error
retention-days: 1

- name: Report final build disk usage
if: ${{ always() && hashFiles('.github/actions/setup-bazel/report_disk.sh') != '' }}
continue-on-error: true
timeout-minutes: 2
shell: bash
run: bash .github/actions/setup-bazel/report_disk.sh

benchmark-harness:
name: Benchmark harness self-tests
runs-on: ubuntu-latest
Expand Down Expand Up @@ -324,6 +331,13 @@ jobs:
- name: Check rusqlite stays inside storage owners
run: python3 scripts/check-rusqlite-storage-boundary.py

- name: Report final build disk usage
if: ${{ always() && hashFiles('.github/actions/setup-bazel/report_disk.sh') != '' }}
continue-on-error: true
timeout-minutes: 2
shell: bash
run: bash .github/actions/setup-bazel/report_disk.sh

# The macOS and Windows lanes run the same Bazel workspace the Linux
# authority does, on demand: they exercise target-specific behavior the
# Linux lane cannot prove.
Expand All @@ -343,31 +357,6 @@ jobs:
with:
fetch-depth: 0

- name: Remove inactive Xcode installations
shell: bash
run: |
df -h /
python3 - <<'PYTHON'
import pathlib
import subprocess

applications = pathlib.Path("/Applications")
selected = pathlib.Path(subprocess.check_output(["xcode-select", "-p"], text=True).strip()).resolve(strict=True)
active = next((path for path in selected.parents if path.suffix == ".app"), None)
if active is None:
raise SystemExit(f"Selected developer directory is not an Xcode application: {selected}")
print(f"Selected Xcode before cleanup: {active}", flush=True)
inactive = [path for path in applications.glob("Xcode*.app") if path.resolve() != active]
for path in inactive:
print(f"Removing inactive Xcode: {path}", flush=True)
subprocess.run(["sudo", "rm", "-rf", "--", str(path)], check=True)
after = pathlib.Path(subprocess.check_output(["xcode-select", "-p"], text=True).strip()).resolve(strict=True)
if after != selected:
raise SystemExit(f"Selected developer directory changed: {selected} -> {after}")
print(f"Selected Xcode after cleanup: {active}", flush=True)
PYTHON
df -h /

- uses: ./.github/actions/setup-bazel
id: bazel
with:
Expand Down Expand Up @@ -418,6 +407,13 @@ jobs:
path: ${{ steps.bazel.outputs.disk-cache-path }}
key: ${{ steps.bazel.outputs.disk-cache-key }}

- name: Report final build disk usage
if: ${{ always() && hashFiles('.github/actions/setup-bazel/report_disk.sh') != '' }}
continue-on-error: true
timeout-minutes: 2
shell: bash
run: bash .github/actions/setup-bazel/report_disk.sh

# A trusted fleet run submits the whole workspace from one hosted runner.
# Hosted-only runs retain their shards so local CPU and disk limits do not
# serialize the entire workspace. Both routes feed the Test Linux check.
Expand Down Expand Up @@ -461,29 +457,6 @@ jobs:
|| (github.actor_id == '158243242' && vars.TS_BAZEL_BOT_CLIENT_ID)
|| (github.actor_id == '29139614' && vars.TS_BAZEL_RENOVATE_CLIENT_ID)) || '' }}

# Fleet measurements leave about 46 GiB free without deleting SDKs.
# Keep cleanup for unmeasured hosted shards and fleet fallback, where
# local builds have previously exhausted the runner disk.
- name: Free runner disk space
if: matrix.shard != 'fleet' || steps.bazel.outputs.fleet-enabled != 'true'
run: |
set -euo pipefail
df -h /
status=0
sudo rm -rf /usr/local/lib/android &
p1=$!
sudo rm -rf /usr/share/dotnet &
p2=$!
sudo rm -rf /opt/ghc &
p3=$!
sudo rm -rf /opt/hostedtoolcache/CodeQL &
p4=$!
for pid in "$p1" "$p2" "$p3" "$p4"; do
wait "$pid" || status=1
done
df -h /
exit "$status"

- name: Select Linux test targets
id: targets
env:
Expand Down Expand Up @@ -605,11 +578,6 @@ jobs:
prebuild=false
fi
fi
if [[ $SHARD == fleet ]]; then
# Keep test binaries and intermediate outputs in the remote CAS.
# Bazel still downloads test logs and XML for failure diagnostics.
echo 'build --remote_download_outputs=minimal' >> .bazelrc.local
fi
{
echo "patterns=${targets[*]}"
echo "prebuild=$prebuild"
Expand Down Expand Up @@ -647,6 +615,13 @@ jobs:
path: ${{ steps.bazel.outputs.disk-cache-path }}
key: ${{ steps.bazel.outputs.disk-cache-key }}

- name: Report final build disk usage
if: ${{ always() && hashFiles('.github/actions/setup-bazel/report_disk.sh') != '' }}
continue-on-error: true
timeout-minutes: 2
shell: bash
run: bash .github/actions/setup-bazel/report_disk.sh

# Preserves the "Test Linux" check name for branch protection.
linux-test-result:
name: Test Linux
Expand Down Expand Up @@ -795,6 +770,13 @@ jobs:
exit 1
fi

- name: Report final build disk usage
if: ${{ always() && hashFiles('.github/actions/setup-bazel/report_disk.sh') != '' }}
continue-on-error: true
timeout-minutes: 2
shell: bash
run: bash .github/actions/setup-bazel/report_disk.sh

# Blocking Clippy policy over every Bazel Rust target, the
# `cargo clippy --workspace --all-targets -D warnings` equivalent.
clippy:
Expand Down Expand Up @@ -838,6 +820,13 @@ jobs:
path: ${{ steps.bazel.outputs.disk-cache-path }}
key: ${{ steps.bazel.outputs.disk-cache-key }}

- name: Report final build disk usage
if: ${{ always() && hashFiles('.github/actions/setup-bazel/report_disk.sh') != '' }}
continue-on-error: true
timeout-minutes: 2
shell: bash
run: bash .github/actions/setup-bazel/report_disk.sh

# Branch protection requires this check name. The generator feature policy
# test (`//scripts:gen_builds_test`) runs inside Repository gates, whose
# Bazel analysis it shares; on its own runner it paid 52 s of Bazel setup
Expand Down Expand Up @@ -914,6 +903,13 @@ jobs:
TRACEDECAY_BIN="$binary" bazel run //scripts:mcp-conformance-smoke.sh
bazel run //scripts:packaged_lsp_bridge -- "$binary" "$smoke_work/lsp"

- name: Report final build disk usage
if: ${{ always() && hashFiles('.github/actions/setup-bazel/report_disk.sh') != '' }}
continue-on-error: true
timeout-minutes: 2
shell: bash
run: bash .github/actions/setup-bazel/report_disk.sh

# Frontend checks require no Rust compilation and must also validate drafts.
# Do not serialize them behind repository-wide Rust formatting and gates.
dashboard:
Expand Down Expand Up @@ -985,6 +981,13 @@ jobs:
path: ${{ steps.bazel.outputs.disk-cache-path }}
key: ${{ steps.bazel.outputs.disk-cache-key }}

- name: Report final build disk usage
if: ${{ always() && hashFiles('.github/actions/setup-bazel/report_disk.sh') != '' }}
continue-on-error: true
timeout-minutes: 2
shell: bash
run: bash .github/actions/setup-bazel/report_disk.sh

hermes-integration:
name: Hermes integration (stock)
needs: debug-cli
Expand Down Expand Up @@ -1081,4 +1084,3 @@ jobs:
env:
TRACEDECAY_BIN: ${{ github.workspace }}/target/debug/tracedecay
run: scripts/opencode_stock_integration.sh

7 changes: 7 additions & 0 deletions .github/workflows/hermetic-evals.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,10 @@ jobs:
--test_output=errors
- name: Execute stock-edit oracle regressions
run: python3 evals/agent_adoption/stock_check_selftest.py

- name: Report final build disk usage
if: ${{ always() && hashFiles('.github/actions/setup-bazel/report_disk.sh') != '' }}
continue-on-error: true
timeout-minutes: 2
shell: bash
run: bash .github/actions/setup-bazel/report_disk.sh
Loading
Loading