Skip to content

Commit abbe7bc

Browse files
authored
Merge pull request #43 from A3S-Lab/release/web-office-0.9.9-20260722
release: publish Web Office in a3s 0.9.9
2 parents 25675be + 24754b9 commit abbe7bc

3 files changed

Lines changed: 58 additions & 21 deletions

File tree

.github/workflows/release.yml

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ concurrency:
1515
cancel-in-progress: false
1616
env:
1717
# Immutable commit in A3S-Lab/a3s containing the Web workspace sources.
18-
A3S_WEB_SOURCE_REF: 898f6a55554cf566e81903847c17651250d9c444
18+
A3S_WEB_SOURCE_REF: 4ba68fde4c2a80afb84cc09636f3408a5d457699
1919
# Exact companion prerequisite; preflight rejects an absent or incomplete release.
20-
A3S_WEBVIEW_VERSION: 0.1.2
21-
A3S_CODE_CORE_VERSION: 6.1.0
20+
A3S_WEBVIEW_VERSION: 0.1.5
21+
A3S_CODE_CORE_VERSION: 6.3.0
2222
A3S_SEARCH_VERSION: 2.0.0
2323
A3S_TUI_VERSION: 0.1.13
2424
jobs:
@@ -126,7 +126,7 @@ jobs:
126126
"a3s-search $A3S_SEARCH_VERSION"
127127
"a3s-acl 0.2.2"
128128
"a3s-updater 0.3.0"
129-
"a3s-use-extension 0.1.2"
129+
"a3s-use-extension 0.1.3"
130130
)
131131
for requirement in "${required_crates[@]}"; do
132132
read -r crate dependency_version <<<"$requirement"
@@ -624,8 +624,7 @@ jobs:
624624
shell: bash
625625
run: |
626626
set -euo pipefail
627-
cp .release-manifest/Cargo.toml Cargo.toml
628-
cp .release-manifest/Cargo.lock Cargo.lock
627+
bash .github/scripts/use-published-a3s-crates.sh
629628
cargo metadata --locked --no-deps --format-version 1 >/dev/null
630629
- name: Download Web workspace
631630
uses: actions/download-artifact@v4
@@ -839,18 +838,24 @@ jobs:
839838
run: |
840839
set -euo pipefail
841840
tag="$GITHUB_REF_NAME"
842-
for target in \
843-
aarch64-apple-darwin \
844-
x86_64-apple-darwin \
845-
x86_64-unknown-linux-gnu \
846-
aarch64-unknown-linux-gnu \
847-
x86_64-pc-windows-msvc; do
848-
base="a3s-${tag}-${target}"
849-
printf '%s\n' "${base}.tar.gz" "${base}.sha256"
850-
if [[ "$target" == x86_64-pc-windows-msvc ]]; then
851-
printf '%s\n' "${base}.zip"
852-
fi
853-
done | sort > expected-assets.txt
841+
version="${tag#v}"
842+
{
843+
for target in \
844+
aarch64-apple-darwin \
845+
x86_64-apple-darwin \
846+
x86_64-unknown-linux-gnu \
847+
aarch64-unknown-linux-gnu \
848+
x86_64-pc-windows-msvc; do
849+
base="a3s-${tag}-${target}"
850+
printf '%s\n' "${base}.tar.gz" "${base}.sha256"
851+
if [[ "$target" == x86_64-pc-windows-msvc ]]; then
852+
printf '%s\n' "${base}.zip"
853+
fi
854+
done
855+
printf '%s\n' \
856+
"a3s-web-v${version}.tar.gz" \
857+
"a3s-web-v${version}.tar.gz.sha256"
858+
} | sort > expected-assets.txt
854859
gh release view "$tag" --json assets \
855860
--jq '.assets[].name' | sort > actual-assets.txt
856861
if ! diff -u expected-assets.txt actual-assets.txt; then
@@ -897,6 +902,29 @@ jobs:
897902
done
898903
done
899904
905+
web_archive="a3s-web-v${version}.tar.gz"
906+
web_checksum="release-assets/${web_archive}.sha256"
907+
web_checksum_lines="$(awk 'END { print NR }' "$web_checksum")"
908+
web_checksum_entries="$(awk 'NF == 2 { count += 1 } END { print count + 0 }' "$web_checksum")"
909+
if [[ "$web_checksum_lines" -ne 1 || "$web_checksum_entries" -ne 1 ]]; then
910+
echo "::error::${web_archive}.sha256 must contain exactly one checksum entry"
911+
exit 1
912+
fi
913+
expected_web_digest="$(awk -v asset="$web_archive" \
914+
'($2 == asset || $2 == "*" asset) \
915+
&& length($1) == 64 && $1 !~ /[^0-9a-f]/ \
916+
{ digest = $1; count += 1 } \
917+
END { if (count == 1) print digest }' "$web_checksum")"
918+
actual_web_digest="$(sha256sum "release-assets/${web_archive}" | awk '{ print $1 }')"
919+
if [[ -z "$expected_web_digest" || "$actual_web_digest" != "$expected_web_digest" ]]; then
920+
echo "::error::SHA-256 mismatch for ${web_archive}"
921+
exit 1
922+
fi
923+
if ! tar -tzf "release-assets/${web_archive}" | grep -Fx 'web/index.html' >/dev/null; then
924+
echo "::error::${web_archive} does not contain web/index.html"
925+
exit 1
926+
fi
927+
900928
git fetch --force origin "refs/tags/${tag}:refs/tags/${tag}"
901929
current_tag_sha="$(git rev-list -n 1 "refs/tags/${tag}")"
902930
if [[ -z "$RELEASE_SHA" || "$current_tag_sha" != "$RELEASE_SHA" ]]; then

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10-
## [0.9.9] - 2026-07-21
10+
## [0.9.9] - 2026-07-22
1111

1212
### Added
1313

@@ -23,6 +23,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2323

2424
- Preserved streamed file response bodies in the Web API gateway instead of
2525
interpreting PDF and other ordinary binary streams as server-sent events.
26+
- Bundled A3S WebView 0.1.5 so Agent Island keeps notch-safe placement, native
27+
dragging, and the user's chosen position through expand and collapse.
28+
- Made release archives resolve their standalone dependency graph directly
29+
from published A3S crates instead of reading a missing transient manifest.
2630

2731
## [0.9.8] - 2026-07-21
2832

src/tui/deep_research/inquiry_runtime/process_resume_tests.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -942,16 +942,21 @@ async fn run_process_resume_scenario(scenario: Scenario, function: &str) {
942942
match scenario {
943943
Scenario::Planner => {
944944
let marker = workspace.path().join(EFFECT_COMPLETED_MARKER);
945+
let bootstrap_journal = workspace
946+
.path()
947+
.join(".a3s/workflow")
948+
.join(format!("{run_id}-bootstrap.jsonl"));
945949
wait_for_condition(
946-
"completed durable generation before Inquiry acknowledgement",
950+
"completed durable planner and concurrent bootstrap before Inquiry acknowledgement",
947951
Duration::from_secs(60),
948-
|| marker.is_file(),
952+
|| marker.is_file() && event_count(&bootstrap_journal, "run_completed", None) == 1,
949953
)
950954
.await;
951955
let journal =
952956
flow_journal_with_prefix(workspace.path(), &format!("{run_id}-planner-outline-"))
953957
.expect("durable planner-outline Flow journal");
954958
assert_eq!(event_count(&journal, "run_completed", None), 1);
959+
assert_eq!(event_count(&bootstrap_journal, "run_completed", None), 1);
955960
}
956961
Scenario::Resolution => {
957962
let marker = workspace.path().join(EFFECT_COMPLETED_MARKER);

0 commit comments

Comments
 (0)