Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
00b8dc5
feat(playerbots): provision supported bot profiles
Sep 8, 2026
cefca46
refactor(playerbots): remove eager kit lookup
Sep 8, 2026
c741131
test(playerbots): expose missing profile spells
Sep 8, 2026
234672a
test(playerbots): type the missing spell index key
Sep 8, 2026
bb0ec82
fix(playerbots): stage bounded profile cases
Sep 8, 2026
c4113c7
test(playerbots): preserve seeded item template
Sep 8, 2026
2a77ff7
test(playerbots): stage partial talent catalog
Sep 8, 2026
a659204
test(playerbots): park explicit runner passes
Sep 8, 2026
99fff1e
ci(playerbots): run provisioning durability checks
Sep 8, 2026
04edb9b
ci(playerbots): follow corrected core head
Sep 8, 2026
0becf40
test(playerbots): cover skill and bank admission
Sep 8, 2026
2120594
fix(playerbots): share the profile skill identity
Sep 8, 2026
d776ab1
test(playerbots): reserve skill fixture rows
Sep 8, 2026
3e30489
ci(playerbots): pin the final skill fixture
Sep 8, 2026
681e318
fix(playerbots): use the exported skill fixture type
Sep 8, 2026
8f0df40
ci(playerbots): pin skill stop acceptance
Sep 8, 2026
d9019bc
ci(playerbots): pin owning refusal coverage
Sep 8, 2026
7602059
test(playerbots): park initial selection and keep build outputs outsi…
Sep 8, 2026
812221c
ci(playerbots): pin rebased provisioning core
Sep 8, 2026
9a8932b
ci(playerbots): pin bounded follow coverage
Sep 8, 2026
dff71c9
ci(playerbots): pin deterministic postcast coverage
Sep 8, 2026
f48b4ee
ci(playerbots): pin explicit cancellation proof
Sep 8, 2026
3274f2e
test(playerbots): park provisioning fixtures
Sep 8, 2026
172a781
ci(playerbots): pin reviewed Actor docs
Sep 8, 2026
0ef3465
ci(playerbots): track merged core
Sep 8, 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
6 changes: 4 additions & 2 deletions .github/workflows/core-tip.yml
Original file line number Diff line number Diff line change
Expand Up @@ -267,13 +267,14 @@ jobs:
manifest_path.write_text(json.dumps(manifest, indent=2) + "\n")
PY
echo "PLAYERBOTS_COMPANION_PRECEDING_WASM=$RUNNER_TEMP/playerbots-pb002-preceding.wasm" >> "$GITHUB_ENV"
echo "PLAYERBOTS_PB002_WASM=$RUNNER_TEMP/playerbots-pb002-preceding.wasm" >> "$GITHUB_ENV"
echo "PLAYERBOTS_COMPANION_PRECEDING_MANIFEST=$RUNNER_TEMP/playerbots-pb002-preceding-inputs.json" >> "$GITHUB_ENV"
echo "PLAYERBOTS_COMPANION_PRECEDING_CORE=$GITHUB_WORKSPACE/preceding-pb002-core" >> "$GITHUB_ENV"
echo "PLAYERBOTS_COMPANION_PRECEDING_COLLECTION=$GITHUB_WORKSPACE/preceding-pb002-collection" >> "$GITHUB_ENV"
- name: Run the real Module and Package action fixture
- name: Build the current Wasm and run the durable fixtures
working-directory: lyracore
env:
CARGO_TARGET_DIR: ${{ github.workspace }}/lyracore/target
CARGO_TARGET_DIR: ${{ runner.temp }}/playerbots-current-target
run: |
cargo clean --manifest-path "$GITHUB_WORKSPACE/lyracore/Cargo.toml" -p lyracore-module
"$GITHUB_WORKSPACE/collection/.github/check-core-tip.sh" "$GITHUB_WORKSPACE/lyracore" \
Expand All @@ -283,6 +284,7 @@ jobs:
-p lyracore-module --features=debug_reducers
cargo test --manifest-path "$GITHUB_WORKSPACE/lyracore/Cargo.toml" \
-p lyracore-module --test playerbots_rewrite --test playerbots_companion \
--test playerbots_provisioning \
--no-fail-fast -- --ignored --test-threads=1
'
- name: Upload fixture inputs and Standalone logs
Expand Down
28 changes: 28 additions & 0 deletions playerbots/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,34 @@ one class, three roles, three different rotations, no code that knows the differ
A `(class, role)` pair with no kit rows is a pairing this Package cannot fill, and the spawn verb
refuses it by name. Adding kit rows for a new pairing makes it legal.

## Provisioning

Spawn and level-up arm a class-and-role profile. They do not grant anything. The next admitted
`Cohort` runner pass reconciles one missing entry through the core Actor API. Survival, usable
recovery, and defense keep their higher priority. `Legacy`, `RecordOnly`, `Frozen`, a current Account
owner, and a current World Session block every provisioning gameplay write.

Profiles make training and their bounded item grants free. They cover the configured kit, one class
weapon skill, vanilla talents, gear, four bags, food, drink, potions, ammunition or class reagents,
bandages, and a Hearthstone. Reconciliation only adds profile entries. It never raises level, awards
experience or quest credit, removes quest items, or replaces equal or stronger equipped gear.
One profile accepts at most 12 kit spell rows, 16 tabs at one tree position, and 64 talents in one
tab. Trainer admission reads at most 16 exact offerings, 16 reverse wrapper effects, and three
effects per candidate wrapper. Each limit reads one extra row to detect overflow. A larger catalogue
records a typed profile-limit outcome when that bounded prefix cannot decide admission. An eligible
offering completes admission without reading later duplicates.

`pkg_playerbots_provisioning` records the profile, revision, free-grant policy, current cursor, next
repair time, and the last 32 typed decisions. A full inventory, missing catalogue row, death, or
combat records one explanation and backs off. Periodic repair then checks the same bounded profile
without duplicating grants or costs.

The default Warrior tank profile names Sunder Armor (7386). Today's seed-only Shard has no spell
header for it. The core Gate returns `MissingResource`, provisioning leaves the spellbook unchanged,
continues with later profile entries, and checks the spell again during periodic repair. Imported
content, or the supported role capability catalogue, must supply the real spell definition before
the profile can learn it.

`pkg_playerbots_personality` holds the part of a fight the rotation leaves open: where a bot breaks
off, and where a healer places a heal. Two bots on one rotation at the same health diverge on those
alone. The row is the floor; a Runtime Script can answer for either of them instead.
Expand Down
1 change: 1 addition & 0 deletions playerbots/src/decision.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ pub enum Reason {
CastingPosition,
Resurrection,
PartyUnavailable,
Provisioning,
}

#[derive(spacetimedb::SpacetimeType, Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
Expand Down
Loading
Loading