Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 3 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ endif ()
set(CMAKE_CXX_STANDARD 20)

option(HIGHBAR_STOCK_RECOIL
"Build the stock Recoil 2025.06.19 tactical profile without appended callbacks" OFF)
"Build the stock Recoil 2026.07.04 tactical profile without appended callbacks" OFF)
if (HIGHBAR_STOCK_RECOIL AND HIGHBAR_FACTORY_REPLACEMENT_V1)
message(FATAL_ERROR
"HIGHBAR_STOCK_RECOIL cannot be combined with the custom factory replacement extension")
Expand Down Expand Up @@ -342,9 +342,9 @@ if (BUILD_Cpp_AIWRAPPER)
string(REGEX MATCH "sha256[ \t]*=[ \t]*\"([^\"]+)\"" _ "${_highbar_pin_content}")
set(HIGHBAR_ENGINE_SHA256 "${CMAKE_MATCH_1}")
if (HIGHBAR_STOCK_RECOIL)
set(HIGHBAR_ENGINE_RELEASE_ID "2025.06.19")
set(HIGHBAR_ENGINE_RELEASE_ID "2026.07.04")
set(HIGHBAR_ENGINE_SHA256
"e4f63c1a391f9ddfbb4d1da225d9533b1d56c65133687d036422a7380c84e833")
"651d6dca67ad99fde1a593d57eede0dfee167e200558988f154ad2bac1cfce21")
endif ()
if (NOT HIGHBAR_ENGINE_RELEASE_ID OR NOT HIGHBAR_ENGINE_SHA256)
message(FATAL_ERROR
Expand Down
6 changes: 3 additions & 3 deletions contracts/barc-stock-queue-v1/contract.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
"owner": "FS-GG/HighBarV3",
"consumer": "FS-GG/FSBarV2",
"stockEngine": {
"sourceCommit": "2639eedac7d1fd67d793ec93ebd27f014f336a14",
"headlessSha256": "e4f63c1a391f9ddfbb4d1da225d9533b1d56c65133687d036422a7380c84e833",
"release": "2025.06.19"
"sourceCommit": "de69361239d8c8b1012dba3f5aa3122954ea4da3",
"headlessSha256": "651d6dca67ad99fde1a593d57eede0dfee167e200558988f154ad2bac1cfce21",
"release": "2026.07.04"
},
"profiles": {
"legacy": {
Expand Down
8 changes: 4 additions & 4 deletions data/config/spring-headless.pin
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[engine]
release_id = "recoil_2025.06.19"
sha256 = "e4f63c1a391f9ddfbb4d1da225d9533b1d56c65133687d036422a7380c84e833"
acquisition_url = "https://github.com/beyond-all-reason/RecoilEngine/releases/download/2025.06.19/recoil_2025.06.19_amd64-linux.7z"
install_path_relative = "Beyond All Reason/engine/recoil_2025.06.19"
release_id = "recoil_2026.07.04"
sha256 = "651d6dca67ad99fde1a593d57eede0dfee167e200558988f154ad2bac1cfce21"
acquisition_url = "https://github.com/beyond-all-reason/RecoilEngine/releases/download/2026.07.04/recoil_2026.07.04_amd64-linux.7z"
install_path_relative = "Beyond All Reason/engine/recoil_2026.07.04"
8 changes: 4 additions & 4 deletions docs/compilation.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,13 @@ setting up a new machine. The practical requirements are:
The currently pinned runtime is:

```text
recoil_2025.06.19
recoil_2026.07.04
```

The reference engine binary path used by the test harness is:

```text
$HOME/.local/state/Beyond All Reason/engine/recoil_2025.06.19/spring-headless
$HOME/.local/state/Beyond All Reason/engine/recoil_2026.07.04/spring-headless
```

## Source Layout
Expand Down Expand Up @@ -184,7 +184,7 @@ make test
The runtime install directory is:

```text
$BAR_DATA/engine/recoil_2025.06.19/AI/Skirmish/highBar/stable/
$BAR_DATA/engine/recoil_2026.07.04/AI/Skirmish/highBar/stable/
```

On the reference Linux setup, `$BAR_DATA` is:
Expand All @@ -207,7 +207,7 @@ Example:

```bash
BAR_DATA="$HOME/.local/state/Beyond All Reason"
ENGINE_RELEASE="recoil_2025.06.19"
ENGINE_RELEASE="recoil_2026.07.04"
HIGHBAR_DIR="$BAR_DATA/engine/$ENGINE_RELEASE/AI/Skirmish/highBar/stable"

mkdir -p "$HIGHBAR_DIR/config" "$HIGHBAR_DIR/script"
Expand Down
2 changes: 1 addition & 1 deletion docs/local-env.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Spring Headless

- `SPRING_HEADLESS=/home/developer/.local/state/Beyond All Reason/engine/recoil_2025.06.19/spring-headless`
- `SPRING_HEADLESS=/home/developer/.local/state/Beyond All Reason/engine/recoil_2026.07.04/spring-headless`
- Persisted for login shells in `/home/developer/.bash_profile`

## BAR Graphical Client
Expand Down
26 changes: 26 additions & 0 deletions docs/roadmaps/barc-01-native-asset-proof.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
# BARC-01 native asset and correlated result proof

## Selected current stock engine — 2026-10-02

The next product candidate uses the official Recoil **2026.07.04** release,
source `de69361239d8c8b1012dba3f5aa3122954ea4da3`, tree
`081bfe95b4e76e3212afa5805ab5a82e474c0b47`. Downloaded amd64 Linux archive
SHA-256 is `9824c2c38124e4b90a9b5f7c4e7200c3ea6503c0bd4bff0e0ff46212ec29dcab`,
matching GitHub's published asset digest. Extracted headless SHA-256 is
`651d6dca67ad99fde1a593d57eede0dfee167e200558988f154ad2bac1cfce21`;
actual version readback is `spring-headless version 2026.07.04 (Headless)`.

The selected stock build pin, generated engine identity, closed release-tuple
admission, trace admission and producer/consumer contract agree on this release.
The Lua observer's exact source check follows the new source; wire revision,
queue behavior and historical algorithm vectors are unchanged. The older
profile's release tuple is refused by the new stock admission.

The official engine remains unmodified. Its
[upstream headless atlas guard](https://github.com/beyond-all-reason/RecoilEngine/blob/de69361239d8c8b1012dba3f5aa3122954ea4da3/rts/Rendering/Textures/TextureRenderAtlas.cpp#L389)
is a source-grounded repair candidate, with local startup effect still unproved.
Existing runtime/evidence directories were preserved; the new engine is acquired
in a separate candidate installation. Plugin build checks are recorded with the
owning PR. Count1 and all six useful-play journeys remain unaccepted.

The remaining sections retain the historical 2025.06.19 asset proof and its
attempt-scoped identities. They do not describe the new candidate's acceptance.

This records a reproducible local asset set and the limit of native evidence as
of 2026-09-28. It proves one live MoveUnit engine effect but does not qualify
the full BARC-01.2 command/result contract.
Expand Down
8 changes: 4 additions & 4 deletions scripts/build-barc-stock-plugin.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ fi
recoil_source=$(realpath "$1")
highbar_source=$(realpath "$2")
build_dir=$(realpath -m "$3")
expected_recoil_commit=2639eedac7d1fd67d793ec93ebd27f014f336a14
expected_recoil_tree=94c1d8ad62b20285b19c1b5f3360a81fbbc54468
expected_contract_sha=28afbc6703843a617db5e3f59a5fcf55a671c993f0585766f1ab2f71218333dc
expected_recoil_commit=de69361239d8c8b1012dba3f5aa3122954ea4da3
expected_recoil_tree=081bfe95b4e76e3212afa5805ab5a82e474c0b47
expected_contract_sha=ac0c94390a1b5da600e49e2d00d9a36d4782964a33603ddbc2c4bafbd3db8c28
cmake_bin=${BARC_CMAKE_BIN:-cmake}
sysroot=${BARC_SYSROOT:-/tmp/barc-native-assets/sysroot/usr}
jobs=${BARC_BUILD_JOBS:-4}
Expand All @@ -22,7 +22,7 @@ if (( jobs < 1 || jobs > 8 )); then
fi
if [[ $(git -C "${recoil_source}" rev-parse HEAD) != "${expected_recoil_commit}" \
|| $(git -C "${recoil_source}" rev-parse HEAD^{tree}) != "${expected_recoil_tree}" ]]; then
echo "Recoil source is not the admitted stock 2639 commit/tree" >&2
echo "Recoil source is not the admitted stock 2026.07.04 commit/tree" >&2
exit 1
fi
if [[ -n $(git -C "${recoil_source}" status --porcelain --untracked-files=no --ignore-submodules=all) ]]; then
Expand Down
2 changes: 1 addition & 1 deletion src/circuit/grpc/StockQueueTrace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ bool Valid(const StockQueueTraceRecord& r) {
if (c.profile != kStockTacticalProfile || c.revision != kStockTacticalRevision
|| c.evidence_scheme != QueueEvidenceScheme::StockLuaSupportedFieldsV1
|| c.catalogue_id.size() != 16 || c.catalogue_revision == 0
|| c.engine_version != "2025.06.19" || !BoundedText(c.game_name)
|| c.engine_version != "2026.07.04" || !BoundedText(c.game_name)
|| !BoundedText(c.game_version) || c.game_content_sha256.size() != 32
|| c.actor_id > 31999 || c.actor_lifetime == 0
|| (c.domain != "production" && c.domain != "rally")) return false;
Expand Down
12 changes: 6 additions & 6 deletions src/circuit/grpc/TacticalNativeState.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -221,14 +221,14 @@ bool SupportsStockRecoilProfile(const char* major, const char* minor,
&& additional != nullptr
&& normal != nullptr && sync != nullptr && full != nullptr
&& is_release
&& std::strcmp(major, "2025") == 0
&& std::strcmp(minor, "06") == 0
&& std::strcmp(patchset, "19") == 0
&& std::strcmp(major, "2026") == 0
&& std::strcmp(minor, "07") == 0
&& std::strcmp(patchset, "04") == 0
&& commits[0] == '\0' && hash[0] == '\0' && branch[0] == '\0'
&& std::strcmp(additional, "Headless") == 0
&& std::strcmp(normal, "2025.06.19") == 0
&& std::strcmp(sync, "2025.06.19") == 0
&& std::strcmp(full, "2025.06.19 (Headless)") == 0;
&& std::strcmp(normal, "2026.07.04") == 0
&& std::strcmp(sync, "2026.07.04") == 0
&& std::strcmp(full, "2026.07.04 (Headless)") == 0;
}

std::optional<std::uint32_t> NativeBuildDefinitionId(
Expand Down
2 changes: 1 addition & 1 deletion tests/stock-observer/run_stock_lua51_float_abi.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import subprocess
import tempfile

EXPECTED_RECOIL = "2639eedac7d1fd67d793ec93ebd27f014f336a14"
EXPECTED_RECOIL = "de69361239d8c8b1012dba3f5aa3122954ea4da3"
ROOT = pathlib.Path(__file__).resolve().parents[2]


Expand Down
12 changes: 11 additions & 1 deletion tests/unit/stock_queue_trace_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ StockQueueTraceRecord Record(bool final_read = false) {
value.context.profile = kStockTacticalProfile; value.context.revision = kStockTacticalRevision;
value.context.evidence_scheme = QueueEvidenceScheme::StockLuaSupportedFieldsV1;
value.context.catalogue_id = std::string(16, 'c'); value.context.catalogue_revision = 8;
value.context.engine_version = "2025.06.19"; value.context.game_name = "BAR";
value.context.engine_version = "2026.07.04"; value.context.game_name = "BAR";
value.context.game_version = "test"; value.context.game_content_sha256 = std::string(32, 'h');
value.context.actor_id = 0; value.context.actor_lifetime = 7; value.context.domain = "production";
value.read.status = StockQueueReadStatus::Complete; value.read.domain = StockQueueDomain::Production;
Expand Down Expand Up @@ -98,6 +98,16 @@ TEST(StockQueueTrace, WritesClosedSampleAndFinalIdentityWithSignedZeroBits) {
::close(fd); ::unlink(path);
}

TEST(StockQueueTrace, RefusesHistoricalEngineIdentity) {
char path[] = "/tmp/highbar-stock-engine-test-XXXXXX";
const int fd = ::mkstemp(path); ASSERT_GE(fd, 0);
auto sink = StockQueueTraceSink::CreateForTest(fd, "run"); ASSERT_TRUE(sink);
auto record = Record(); record.context.engine_version = "2025.06.19";
record.computed_revision = ComputeStockQueueRevision(record.context, record.read.entries);
EXPECT_FALSE(sink->Record(record)); EXPECT_EQ(sink->records_written(), 0u);
sink.reset(); ::unlink(path);
}

TEST(StockQueueTrace, PartialWritesCompleteButZeroWriteLatchesFailure) {
char path[] = "/tmp/highbar-stock-trace-write-XXXXXX"; const int fd = ::mkstemp(path); ASSERT_GE(fd, 0);
auto partial = StockQueueTraceSink::CreateForTest(fd, "run", [](int descriptor, const void* data, std::size_t size) {
Expand Down
24 changes: 13 additions & 11 deletions tests/unit/tactical_native_state_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -128,20 +128,22 @@ TEST(TacticalNativeState, StockProfileRequiresClosedReleaseTuple) {
return SupportsStockRecoilProfile(major, minor, patchset, "", hash, branch,
additional, normal, sync, full, is_release);
};
EXPECT_TRUE(supports("2025", "06", "19", "", "", "Headless",
EXPECT_TRUE(supports("2026", "07", "04", "", "", "Headless",
"2026.07.04", "2026.07.04", "2026.07.04 (Headless)"));
EXPECT_FALSE(supports("2025", "06", "19", "", "", "Headless",
"2025.06.19", "2025.06.19", "2025.06.19 (Headless)"));
EXPECT_FALSE(supports("2025", "06", "20", "", "", "Headless",
"2025.06.20", "2025.06.20", "2025.06.20 (Headless)"));
EXPECT_FALSE(supports("2025", "06", "19", "", "", "",
"2025.06.19", "2025.06.19", "2025.06.19"));
EXPECT_FALSE(supports("2025", "06", "19", "", "", "Headless Debug",
"2025.06.19", "2025.06.19", "2025.06.19 (Headless Debug)"));
EXPECT_FALSE(supports("2025", "06", "19", "custom", "", "Headless",
"2025.06.19", "2025.06.19", "2025.06.19 (Headless)"));
EXPECT_FALSE(supports("2025", "06", "19", "", "", "Headless",
"2025.06.19", "2025.06.19", "2025.06.19 (Headless)", false));
EXPECT_FALSE(supports(nullptr, "06", "19", "", "", "Headless",
"2025.06.19", "2025.06.19", "2025.06.19 (Headless)"));
EXPECT_FALSE(supports("2026", "07", "04", "", "", "",
"2026.07.04", "2026.07.04", "2026.07.04"));
EXPECT_FALSE(supports("2026", "07", "04", "", "", "Headless Debug",
"2026.07.04", "2026.07.04", "2026.07.04 (Headless Debug)"));
EXPECT_FALSE(supports("2026", "07", "04", "custom", "", "Headless",
"2026.07.04", "2026.07.04", "2026.07.04 (Headless)"));
EXPECT_FALSE(supports("2026", "07", "04", "", "", "Headless",
"2026.07.04", "2026.07.04", "2026.07.04 (Headless)", false));
EXPECT_FALSE(supports(nullptr, "07", "04", "", "", "Headless",
"2026.07.04", "2026.07.04", "2026.07.04 (Headless)"));
}

TEST(TacticalNativeState, BuildDefinitionProjectionCoversSignedMinimum) {
Expand Down
Loading