Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
296 commits
Select commit Hold shift + click to select a range
9df820f
fix: use native villager bounds for placement
codex Oct 17, 2026
3528f9f
fix: ignore legacy item drops during placement
codex Oct 17, 2026
35a18f7
docs: record entity placement verification
codex Oct 17, 2026
6332647
fix: keep entity tracking within the AOT size budget
codex Oct 17, 2026
6c121a2
fix: preserve placement swings around 1.11 entities
codex Oct 17, 2026
2e29d89
docs: record the AOT and 1.11 placement checks
codex Oct 17, 2026
d93d069
fix: apply native entity rules through 1.13.2
codex Oct 17, 2026
55b354d
docs: record legacy entity placement verification
codex Oct 17, 2026
995b11b
fix: apply native entity rules to 1.9 clients
codex Oct 17, 2026
c5feac3
fix: retry dropped RCON authentication
codex Oct 17, 2026
c35ba3e
docs: record 1.9 entity placement checks
codex Oct 17, 2026
6d65cf1
fix: apply native entity rules to early 1.14 clients
codex Oct 17, 2026
3fbce47
fix: preserve placement swings around cats and golems
codex Oct 17, 2026
a9d03fc
fix: apply native horse bounds during placement
codex Oct 17, 2026
74542dc
docs: record early 1.14 entity placement checks
codex Oct 17, 2026
d626a69
feat: support 26.1 patch release names
codex Oct 17, 2026
a8a4ab9
fix: apply native cat and golem bounds through 26.3
codex Oct 17, 2026
5c8e466
test: resolve command suggestion release aliases
codex Oct 17, 2026
bd003cf
fix: apply native horse and cow placement bounds
codex Oct 17, 2026
eb52b8d
test: compare planner views with a fixed clock
codex Oct 17, 2026
c374711
docs: record mapped entity placement verification
codex Oct 17, 2026
82a8d9f
fix: honor native world tick control
codex Oct 17, 2026
f901b54
docs: record native tick and mining verification
codex Oct 17, 2026
ce87aa2
fix: apply classic villager dimensions on living ticks
codex Oct 17, 2026
cf3bf34
fix: keep classic item drops from suppressing placement swings
codex Oct 17, 2026
1aff689
docs: record classic placement verification
codex Oct 17, 2026
fa9ac8b
fix: add classic farm animal placement bounds
codex Oct 17, 2026
014294b
docs: record classic farm placement verification
codex Oct 17, 2026
f021075
fix: add legacy farm animal placement bounds
codex Oct 17, 2026
3fdf5bd
docs: record legacy farm placement verification
codex Oct 17, 2026
703400f
fix: add farm placement bounds for early 1.14
codex Oct 17, 2026
cc468cc
docs: record early 1.14 placement verification
codex Oct 17, 2026
6098caa
fix: add mapped farm placement geometry
codex Oct 17, 2026
77506fd
docs: record mapped farm placement checks
codex Oct 17, 2026
32f4ac1
fix: use native shulker bounds for placement
codex Oct 17, 2026
b023ee0
fix: check vanilla citation coverage across libraries
codex Oct 17, 2026
b868251
docs: record shulker consumer and live checks
codex Oct 17, 2026
d81adc8
fix: use native player bounds for placement
codex Oct 17, 2026
eac3d6e
docs: record live player placement checks
codex Oct 17, 2026
adc0185
fix: match native player-info lifetimes for placement
codex Oct 18, 2026
e65ae12
docs: record player-info placement checks
codex Oct 18, 2026
53df881
fix: add native player bounds for early 1.14
codex Oct 18, 2026
415a44b
docs: record early 1.14 placement checks
codex Oct 18, 2026
7b30b50
fix: preserve early voxel collision boundaries
codex Oct 18, 2026
1958673
test: cover legacy collision profiles in planning
codex Oct 18, 2026
a586533
docs: record legacy resize collision checks
codex Oct 18, 2026
ea8ea06
feat: model legacy player lifecycle geometry
codex Oct 18, 2026
a0499ba
docs: record legacy player lifecycle checks
codex Oct 18, 2026
03419bf
feat: add native legacy bed facings
codex Oct 18, 2026
e9036d7
docs: record native bed-facing validation
codex Oct 18, 2026
9295d40
feat: match legacy bed wake geometry
codex Oct 18, 2026
b14bd9b
docs: record legacy intact-bed wake checks
codex Oct 18, 2026
fc14396
feat: add native legacy bed exit cell rules
codex Oct 18, 2026
2562e1e
test: await movement ticks and wire delivery
codex Oct 18, 2026
dd14241
feat: evaluate legacy bed exit cells in native order
codex Oct 18, 2026
20e7947
docs: record bed query consumer and AOT checks
codex Oct 19, 2026
9d08f91
docs: track remaining interaction acceptance
codex Oct 19, 2026
310af8b
feat: own legacy player lifecycle geometry
codex Oct 19, 2026
15c3b00
feat: tick legacy players with native chunk membership
codex Oct 19, 2026
17eb849
fix: keep bed runtime data within the AOT size budget
codex Oct 19, 2026
188b995
test: await profile-key cancellation observation
codex Oct 19, 2026
1c83e6e
fix: honor bounded legacy sleep and wake callbacks
codex Oct 19, 2026
0930233
test: replay native legacy spawn and metadata listeners
codex Oct 19, 2026
d7ecd27
fix: apply native legacy player death effects
codex Oct 19, 2026
5f9454e
test: synchronize concurrent section worker startup
codex Oct 19, 2026
60d5410
docs: record verified legacy death callback acceptance
codex Oct 19, 2026
d06b4f3
fix: match legacy player world lifetime on session ticks
codex Oct 19, 2026
d49fd69
docs: record verified legacy death lifetime acceptance
codex Oct 19, 2026
3d1129b
test: make native session clock timing deterministic
codex Oct 19, 2026
064d07a
docs: record verified native clock correction acceptance
codex Oct 19, 2026
e31133a
fix: use received terrain for legacy player geometry
codex Oct 19, 2026
ddcf01a
docs: record verified legacy block context acceptance
codex Oct 19, 2026
3166151
fix: track shared legacy empty chunk writes
codex Oct 19, 2026
46d6ff8
docs: record verified shared chunk context acceptance
codex Oct 19, 2026
e92cacd
docs: record passing native clock correction CI
codex Oct 19, 2026
97c8133
fix: preserve native legacy chunk payload ownership
codex Oct 19, 2026
677ca1a
docs: record verified legacy chunk payload acceptance
codex Oct 19, 2026
e3feea1
fix: preserve native mining target identity
codex Oct 19, 2026
4a97625
fix: match vanilla mining equipment and water rules
codex Oct 19, 2026
3b977e7
fix: predict native block activation and swings
codex Oct 19, 2026
6299aad
feat: honor legacy Adventure mining permissions
codex Oct 19, 2026
4f2aa42
docs: correct supported release coverage
codex Oct 19, 2026
621f3d5
docs: record direct interaction checkpoint
codex Oct 19, 2026
315e153
fix: stop view mining when an entity intervenes
codex Oct 19, 2026
8551778
fix: keep picking within the Native AOT budget
codex Oct 19, 2026
375ec75
feat: honor bounded flattened Adventure permissions
codex Oct 19, 2026
765a275
test: add direct survival interaction acceptance
codex Oct 19, 2026
658024a
docs: record validated interaction runtime checkpoint
codex Oct 19, 2026
2da7161
feat: predict native hoe block interactions
codex Oct 19, 2026
412e29d
chore: apply solution import ordering
codex Oct 19, 2026
a72c573
fix: require received terrain for hoe prediction
codex Oct 21, 2026
296cba6
docs: record immutable hoe checkpoint validation
codex Oct 21, 2026
3132e99
feat: extend native hoe use to legacy clients
codex Oct 21, 2026
299df53
fix: forward queued vanilla console commands
codex Oct 21, 2026
56b287f
feat: track native 1.9 falling-block motion
codex Oct 21, 2026
fb3a8e4
docs: record legacy hoe checkpoint acceptance
codex Oct 21, 2026
9fc047d
fix: expire native item cooldowns on player ticks
codex Oct 21, 2026
709718a
feat: predict native shovel block interactions
codex Oct 21, 2026
3f4bcb8
fix: retain falling-block bounds beside native liquids
codex Oct 21, 2026
e65329e
docs: index combined interaction runtime evidence
codex Oct 21, 2026
53c6f97
docs: record combined interaction checkpoint validation
codex Oct 21, 2026
a643098
fix: charge attacks on eligible player ticks
codex Oct 22, 2026
d7ba0c9
feat: connect modern remote-player motion
codex Oct 22, 2026
03fabff
fix: track protocol-47 falling blocks for placement
codex Oct 22, 2026
e8e7f7c
feat: predict native axe use and feature permissions
codex Oct 22, 2026
5481118
test: add native axe and player-motion acceptance legs
codex Oct 22, 2026
f0a84e3
docs: record native interaction boundary checkpoint
codex Oct 22, 2026
6ba71b4
test: match native legacy block-check responses
codex Oct 22, 2026
b261a02
docs: record native 26.2 piston comparison
codex Oct 22, 2026
193178f
feat: apply native living scale through owned geometry
codex Oct 22, 2026
36c4bce
fix: preserve native creative mining continuation
codex Oct 22, 2026
0c0fbfb
docs: record scale and creative mining runtime evidence
codex Oct 22, 2026
ddacb73
docs: record combined scale and mining acceptance
codex Oct 22, 2026
074bf8c
fix: predict native menu activation results
codex Oct 22, 2026
27f3641
fix: ignore native nonpickable entities in view mining
codex Oct 22, 2026
8bc65cf
docs: list all supported aliases in the live matrix
codex Oct 22, 2026
dbde50c
test: verify native menu activation and refusal
codex Oct 22, 2026
4719b8e
docs: record menu picking and native motion progress
codex Oct 22, 2026
e60c360
test: use native menu assertion predicate overloads
codex Oct 22, 2026
93c6726
docs: record verified menu and targeting checkpoint
codex Oct 22, 2026
b46b6d7
test: accept native bulk terrain in menu scenarios
codex Oct 22, 2026
b912205
test: distinguish wire and installed terrain bounds
codex Oct 22, 2026
ec4cf08
test: use native era slot names in menu setup
codex Oct 22, 2026
af78f4d
test: match native counted storage feedback
codex Oct 22, 2026
7ace569
fix: preserve legacy local player body and eye state
codex Oct 22, 2026
68db928
test: replay native menu interaction frames explicitly
codex Oct 22, 2026
64d2af5
test: control cron reconnect timing with the shared clock
codex Oct 22, 2026
8eefba5
docs: record local body and native menu acceptance
codex Oct 22, 2026
2bd92c4
fix: track cow motion for mining and placement queries
codex Oct 22, 2026
5699999
fix: honor component adventure mining permissions
codex Oct 22, 2026
6ea3a9f
fix: retain mining progress for equal predicate components
codex Oct 22, 2026
ebbf545
docs: record component mining and moving obstruction proof
codex Oct 22, 2026
ad5cbc4
test: support explicit flat terrain in the native harness
codex Oct 22, 2026
2c40210
docs: record verified mining runtime and native motion control
codex Oct 22, 2026
b4b060e
docs: record four native motion acceptance boundaries
codex Oct 22, 2026
266c9b2
docs: bound the remaining entity interaction decisions
codex Oct 22, 2026
3b8c9e8
docs: record complete bounded motion acceptance
codex Oct 22, 2026
be08d17
test: retain complete native motion packet sequences
codex Oct 22, 2026
f61679a
docs: classify the remaining block-use families
codex Oct 22, 2026
327bb03
test: retain native Adventure mining acceptance
codex Oct 22, 2026
9b035c4
docs: record the published motion fixture checks
codex Oct 22, 2026
c06dc8f
fix: forward configuration enabled features
codex Oct 22, 2026
486683b
fix: predict native door activation results
codex Oct 22, 2026
a64a0ba
fix: track fixed crystal interaction bounds
codex Oct 22, 2026
651ddcb
docs: record combined door and crystal runtime
codex Oct 22, 2026
e5dae4d
docs: record the tested door and crystal checkpoint
codex Oct 22, 2026
4aa0368
docs: correct supported version and corpus counts
codex Oct 22, 2026
efad22a
fix: predict vanilla trapdoor and gate activation
codex Oct 22, 2026
2925b51
docs: record native crystal acceptance and current status
codex Oct 22, 2026
8be23e3
docs: record current interaction acceptance and checkpoint
codex Oct 23, 2026
1548788
test: maintain native crystal acceptance fixture
codex Oct 23, 2026
5fd6b08
fix: reject blocked legacy placement before sending
codex Oct 23, 2026
e6e755d
fix: restore native collision shapes for new slabs
codex Oct 23, 2026
6365be9
docs: record slab and legacy placement checkpoint
codex Oct 23, 2026
e3849e2
feat: predict native slab placement and merging
codex Oct 23, 2026
e6f5f9d
test: prepare native slab placement acceptance
codex Oct 23, 2026
7957be8
fix: track native 1.11 ambient placement bounds
codex Oct 23, 2026
c8492cb
feat: support exact Adventure mining properties
codex Oct 23, 2026
8b86c3c
chore: serialize PR test project execution
codex Oct 23, 2026
43ae3f9
docs: record the combined interaction checkpoint
codex Oct 23, 2026
94208f4
feat: position tracked legacy remote player riders
codex Oct 24, 2026
cd69215
feat: predict native campfire and candle ignition
codex Oct 24, 2026
c977ff3
fix: exclude proven spectators from placement obstruction
codex Oct 24, 2026
883dac6
docs: record integrated interaction runtime checks
codex Oct 24, 2026
a932873
fix: select compatible flat worlds for slab acceptance
codex Oct 24, 2026
5294f78
fix: accept inclusive current-value mining ranges
codex Oct 24, 2026
d819139
fix: predict honeycomb use on original copper blocks
codex Oct 24, 2026
ddda514
fix: preserve the native section-update light flag
codex Oct 24, 2026
b83db40
docs: record mining and placement validation progress
codex Oct 24, 2026
2ed5514
fix: seed verified native worlds for slab acceptance
codex Oct 24, 2026
19594f2
refactor: share modern section-update wire loops
codex Oct 24, 2026
8efa26f
fix: predict native menu block activation
codex Oct 24, 2026
9ed269c
docs: record verified published interaction checkpoint
codex Oct 24, 2026
93f32b3
docs: record five-version native slab acceptance
codex Oct 24, 2026
84fba53
test: cover additional menus in vanilla sessions
codex Oct 24, 2026
1a9be0d
fix: predict filled lectern activation
codex Oct 24, 2026
5c8e817
refactor: compact modern hard collision classification
codex Oct 24, 2026
dc2c953
feat: track seven living families in block interactions
codex Oct 24, 2026
5c17868
docs: correct version catalog property counts
codex Oct 24, 2026
39f0ef1
test: verify seven native lectern interaction boundaries
codex Oct 24, 2026
bfffe9e
feat: predict filled jukebox use and local clearing
codex Oct 24, 2026
392b107
feat: match legacy lever and button use
codex Oct 24, 2026
6d30e0b
docs: record block prediction acknowledgment regressions
codex Oct 24, 2026
d5ca0f9
fix: preserve 1.11 ambient bounds around passive peers
codex Oct 24, 2026
3dae40c
docs: record native block prediction comparisons
codex Oct 24, 2026
e59fb37
docs: record block prediction and ambient validation
codex Oct 24, 2026
7ff6044
fix: connect sequenced block prediction and native targeting
codex Oct 25, 2026
4e1dede
chore: favor native code size in MinimalBot
codex Oct 25, 2026
2a661f8
test: sort prediction test imports
codex Oct 25, 2026
6f94b84
docs: record source integration and CI checks
codex Oct 25, 2026
8bc91ed
docs: record passing published prediction checks
codex Oct 25, 2026
7e579dd
fix: decode legacy mob types as VarInts from 1.11
codex Oct 25, 2026
347246f
fix: preserve legacy XP identity and placement eligibility
codex Oct 25, 2026
e6b03e8
fix: preserve legacy ambient bounds during placement
codex Oct 25, 2026
53cb2cd
docs: record XP and ambient placement checkpoint
codex Oct 25, 2026
c258677
fix: preserve legacy XP nonparticipation in view mining
codex Oct 25, 2026
d9f8297
fix: apply Shulker opening pushes through session motion
codex Oct 25, 2026
5143a5c
fix: predict vanilla end-crystal item use
codex Oct 25, 2026
780d2b4
docs: record interaction runtime and published CI results
codex Oct 25, 2026
3b78093
test: align interaction fixtures with session readiness
codex Oct 25, 2026
92e8e70
fix: exclude distant 1.11 wolves from placement candidates
codex Oct 25, 2026
9134891
docs: record live placement and corrected CI acceptance
codex Oct 25, 2026
0fa673b
fix: correct legacy wolf block entity context flags
codex Oct 26, 2026
a614513
feat: predict native cake use and local consumption
codex Oct 28, 2026
8372003
docs: record verified interaction checkpoints
codex Oct 28, 2026
1ce8c35
test: retain native end crystal use acceptance
codex Oct 28, 2026
5f2608d
fix: exclude provably distant legacy rabbits from placement
codex Oct 28, 2026
6fe9d73
docs: record cake gates and rabbit acceptance
codex Oct 28, 2026
4d4f856
feat: predict native candle attachment to cakes
codex Oct 28, 2026
4c33567
docs: record rabbit CI acceptance
codex Oct 28, 2026
91242b7
docs: record current interaction acceptance
codex Oct 28, 2026
1806ca4
fix: exclude provably distant legacy horses from placement
codex Oct 28, 2026
973810a
test: add native mining and block-use acceptance
codex Oct 28, 2026
1d531d8
test: maintain controlled vanilla interaction acceptance
codex Oct 28, 2026
19cd2cb
docs: record six cake boundaries and current CI
codex Oct 28, 2026
1c01f0e
fix: limit player-slot mirroring to the addressed container slot
codex Oct 29, 2026
26cba56
fix: preserve inventory knowledge after undecodable updates
codex Oct 29, 2026
ce6c8e5
docs: record inventory and native acceptance checkpoints
codex Oct 29, 2026
bf7cd12
fix: reset inventory when constructing a local player
codex Oct 29, 2026
c189b60
fix: read player inventory when picking interaction targets
codex Oct 29, 2026
be6f8cc
docs: record inventory and mining acceptance progress
codex Oct 29, 2026
1cbe3d5
test: repopulate cooldown tool after native player respawn
codex Oct 29, 2026
02d826f
fix: close the transport after required packet failures
codex Oct 29, 2026
9c050ac
docs: record current inventory and connection acceptance
codex Oct 29, 2026
dcfd397
fix: synchronize the selected tool before held mining
codex Oct 29, 2026
23c11cf
fix: preserve unknown scaffolding targets after inventory loss
codex Oct 29, 2026
cb9b338
fix: preserve unknown light-block targets after inventory loss
codex Oct 30, 2026
a6fca6a
fix: synchronize selected items before immediate interactions
codex Oct 30, 2026
f199a8c
docs: record current interaction acceptance
codex Oct 30, 2026
a59f2af
test: verify native mining setup and carried destroy delay
codex Oct 30, 2026
33bca44
docs: record current native mining and AOT acceptance
codex Oct 30, 2026
1346ec8
fix: omit hashes for unavailable nested component data
codex Oct 30, 2026
6c2453b
feat: support 1.21.5 adventure mining predicates
codex Oct 30, 2026
e61bc31
test: refresh 1.21.5 component codec identity
codex Oct 30, 2026
8fc5456
feat: apply 1.21.5 adventure placement permissions
codex Oct 30, 2026
6697ac5
test: verify adventure placement against vanilla
codex Oct 30, 2026
4639bff
docs: record current consumer runtime checks
codex Nov 1, 2026
b58e8e2
fix: preserve native mining enchantment formats
codex Nov 1, 2026
390a7f3
fix: send native entity interaction hits from 26.1
codex Nov 1, 2026
d5ef155
chore: sort native interaction imports
codex Nov 1, 2026
0c371ba
test: control disconnect before the interaction flush
codex Nov 1, 2026
8d14b5f
test: record new interaction test counts
codex Nov 1, 2026
cb3a9e3
test: pin entity interaction bindings from 26.1
codex Nov 1, 2026
e36408b
docs: record current interaction runtime checks
codex Nov 1, 2026
5a3556f
test: expose native format workspace diagnostics
codex Nov 1, 2026
1c31d97
docs: record fresh consumer and AOT checks
codex Nov 1, 2026
b03301b
fix: match native component block interactions
codex Nov 1, 2026
2c19272
docs: record component interaction validation
codex Nov 1, 2026
f2b2d70
fix: reject invalid final enchantment levels
codex Nov 1, 2026
72873c0
docs: record enchantment admission validation
codex Nov 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 7 additions & 3 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,20 @@ jobs:
dotnet-version: 10.0.401
- run: dotnet restore
- run: dotnet build --no-restore -c Release
# Run one test project at a time; each assembly keeps its own concurrency.
- name: Test
if: matrix.os != 'ubuntu-latest'
run: dotnet test --no-build -c Release
run: dotnet test --no-build -c Release -m:1
- name: Test with count gate
if: matrix.os == 'ubuntu-latest'
shell: bash
run: |
set -o pipefail
dotnet test UMPK.sln --no-build -c Release 2>&1 | tee /tmp/umpk-test.log
dotnet test UMPK.sln --no-build -c Release -m:1 2>&1 | tee /tmp/umpk-test.log
python3 engineering/testcounts/check_test_counts.py /tmp/umpk-test.log --baseline engineering/testcounts/expected_counts.json
- name: Test owned vanilla launcher and RCON
if: matrix.os == 'ubuntu-latest'
run: python3 -m unittest discover -s tools/minecraft-official -p 'test_*.py' -v

format:
name: format check
Expand All @@ -46,7 +50,7 @@ jobs:
- uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.401
- run: dotnet format --verify-no-changes
- run: dotnet format --verify-no-changes --verbosity diagnostic

datagen-verify:
name: dataset verify + generated-code freshness
Expand Down
14 changes: 8 additions & 6 deletions .skills/umpk-integration-testing/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Use the repository's `Umpk.IntegrationTests` live harness. It boots one isolated
## Read first

- Read `references/minecraft-official.md` before provisioning or decompiling game artifacts.
- Read `tests/Umpk.IntegrationTests/LiveMatrix.cs` for the 49 protocol representatives.
- Read `tests/Umpk.IntegrationTests/LiveMatrix.cs` for the current protocol representatives.
- Read the affected live test before running it. Its assertions define the claimed coverage.

## Workflow
Expand All @@ -23,10 +23,10 @@ Use the repository's `Umpk.IntegrationTests` live harness. It boots one isolated
4. Build UMPK in Release mode.
5. Run the focused live leg with fresh output under `/tmp`.
6. Run the adjacent era boundary when the behavior is version-sensitive.
7. Run `scripts/run_live_matrix.sh` only after all 49 representatives are provisioned.
7. Run `scripts/run_live_matrix.sh` only after all representatives in `LiveMatrix` are provisioned.
8. Confirm no server process or listener owned by the run remains.

Never use another checkout's binaries, server directory, Java source tree, or logs. Set `UMPK_SERVER_ROOT` and `UMPK_ORACLE_ROOT` explicitly when the repository-local defaults are not used.
Use the shared verified artifact seeds. Do not reuse another run's binaries, mutable server directory, or logs. Set `UMPK_SERVER_ROOT` and `UMPK_ORACLE_ROOT` explicitly for the shared artifact root.

## Location overrides

Expand All @@ -39,7 +39,7 @@ python3 .skills/umpk-integration-testing/scripts/provision_servers.py \
--root "$UMPK_ORACLE_ROOT" --accept-eula 26.2
```

`UMPK_ORACLE_ROOT` owns downloads, mappings, and `<version>-decompiled` source trees. `UMPK_SERVER_ROOT` owns the per-version directories consumed by the live Harness; omit it when those directories are at `$UMPK_ORACLE_ROOT/downloads`. `--root` overrides the provisioner's destination. Use absolute paths and keep both roots outside tracked repository content.
`UMPK_ORACLE_ROOT` owns downloads, mappings, and `<version>-decompiled` source trees. `UMPK_SERVER_ROOT` owns the per-version directories consumed by the live Harness; omit it when those directories are at `$UMPK_ORACLE_ROOT/downloads`. `--root` overrides the provisioner's destination. Use absolute paths and keep both roots outside tracked repository content. On this workstation, use `/home/anon/Projects/MinecraftOfficial` and its `downloads` directory.

## Provisioning

Expand All @@ -48,14 +48,14 @@ python3 .skills/umpk-integration-testing/scripts/provision_servers.py \
--accept-eula 1.8 1.12.2 1.16.5 1.20.4 1.21.11 26.2
```

The script downloads official artifacts, verifies Mojang's SHA-1, and writes them below the ignored `MinecraftOfficial/downloads/<version>/` tree. It never places artifacts in tracked paths.
The script downloads official artifacts and verifies Mojang's SHA-1. It writes to the shared `MinecraftOfficial/downloads/<version>/` tree by default. `--root` selects another external directory.

## Running

```bash
dotnet build UMPK.sln -c Release
UMPK_NIGHTLY=1 \
UMPK_SERVER_ROOT="$PWD/MinecraftOfficial/downloads" \
UMPK_SERVER_ROOT="$HOME/Projects/MinecraftOfficial/downloads" \
dotnet test tests/Umpk.IntegrationTests/Umpk.IntegrationTests.csproj \
-c Release --no-build --filter 'Category=Nightly'
```
Expand Down Expand Up @@ -86,3 +86,5 @@ A result is valid only when its assertion is caused by a fresh action in that le
## When not to use

Do not use this skill for build-only checks, static source comparison, documentation-only changes, or public-server testing. Public servers and authenticated accounts require explicit authorization.

Read `.skills/umpk-version-adaptation/SKILL.md` for protocol-version work. The adapted `tools/decompile.sh` and `tools/start-server.sh` use the shared artifact root. Server infrastructure smoke checks do not replace this live feature harness.
80 changes: 9 additions & 71 deletions .skills/umpk-integration-testing/references/minecraft-official.md
Original file line number Diff line number Diff line change
@@ -1,79 +1,17 @@
# Local vanilla artifacts and Java source
# Local vanilla artifacts and source

Keep official Minecraft artifacts below the repository-local, ignored `MinecraftOfficial/` directory:

```text
MinecraftOfficial/
├── downloads/<version>/server.jar
├── downloads/<version>/server_mappings.txt
├── downloads/<version>/client.jar
├── downloads/<version>/client_mappings.txt
├── <version>-decompiled/
└── <version>-client-decompiled/
```

Never commit jars, mappings, libraries, generated worlds, or decompiled Mojang source.

## Create and provision the directory
Use `/home/anon/Projects/MinecraftOfficial` on this workstation. The portable default is `~/Projects/MinecraftOfficial`. Read `tools/minecraft-official/README.md` from the repository root for hashes, mapping routes, private JVMs, decompiler warnings, and isolated server runs.

```bash
mkdir -p MinecraftOfficial/downloads
python3 .skills/umpk-integration-testing/scripts/provision_servers.py \
--accept-eula --client 1.21.11
export UMPK_ORACLE_ROOT="$PWD/MinecraftOfficial"
export UMPK_ORACLE_ROOT="$HOME/Projects/MinecraftOfficial"
export UMPK_SERVER_ROOT="$UMPK_ORACLE_ROOT/downloads"
export UMPK_JAVA11="$UMPK_ORACLE_ROOT/runtimes/java11/bin/java"
export UMPK_JAVA25="$UMPK_ORACLE_ROOT/runtimes/java25/bin/java"
bash tools/decompile.sh --version 1.21.11 --side both --accept-eula
```

The provisioner resolves Mojang's version manifest, downloads official artifacts, and verifies every download against the SHA-1 in the version metadata. Omit `--accept-eula` unless you accept Mojang's EULA.

## Override the artifact locations

Use an absolute oracle root when jars, mappings, and decompiled trees live outside this checkout:

```bash
export UMPK_ORACLE_ROOT=/absolute/path/to/MinecraftOfficial
python3 .skills/umpk-integration-testing/scripts/provision_servers.py \
--root "$UMPK_ORACLE_ROOT" --accept-eula 26.2
```

The provisioner and extraction tools use `UMPK_ORACLE_ROOT`. The live Harness uses `UMPK_SERVER_ROOT`, whose default is `$UMPK_ORACLE_ROOT/downloads`. Override it independently when the runnable server directories are elsewhere:

```bash
export UMPK_SERVER_ROOT=/absolute/path/to/server-directories
```

Expected layouts are `$UMPK_ORACLE_ROOT/<version>-decompiled/` for source and `$UMPK_SERVER_ROOT/<version>/server.jar` for a runnable server.

## Decompile readable Java

Use a compatible JDK and Vineflower. Official Mojang mappings are available for modern releases. UMPK's remapper converts their named-to-obfuscated form before decompilation.

Place these untracked tools at:

```text
MinecraftOfficial/downloads/decompiler/vineflower.jar
MinecraftOfficial/downloads/libs/asm-9.6.jar
```

Then run the repository pipeline for the supported remap band:

```bash
export UMPK_ORACLE_ROOT="$PWD/MinecraftOfficial"
tools/extraction/decompile_1_16_to_1_18.sh 1.16.5 1.17.1 1.18.2
python3 tools/extraction/decompile.py 1.18.2
```

For another version with `server_mappings.txt`, follow the same stages:

1. If `server.jar` is a bundler, extract its inner server jar from `META-INF/versions/`.
2. Compile `tools/extraction/ProguardRemapper.java` with ASM and ASM Commons.
3. Remap the inner jar with that version's `server_mappings.txt`.
4. Run Vineflower on the remapped jar.
5. Store the result at `MinecraftOfficial/<version>-decompiled/`.
6. Run `python3 tools/extraction/decompile.py <version>` to verify discovery and mapping provenance.

For client-only packet behavior, repeat the process with `client.jar` and `client_mappings.txt`, then store the result at `MinecraftOfficial/<version>-client-decompiled/`.
Use `--accept-eula` only with EULA acceptance. Official jars and available mappings live in `downloads/<version>/`. Server source lives in `<version>-decompiled/`. Client source lives in `<version>-client-decompiled/` when requested. Check `artifacts.json` and `.complete.json` before citing evidence. Never commit official artifacts or source.

Minecraft 1.8 through 1.14.3 require compatible community mappings because Mojang did not publish the modern mapping artifact for those releases. Protocol 47 expects the MCP 1.8.9 tree at `MinecraftOfficial/1.8.9/src/minecraft/`.
MinecraftDecompiler remaps official Proguard mappings. Vineflower decompiles the remapped jar or an already unobfuscated jar. Releases without official mappings retain obfuscated names and carry the `obfuscated-no-community-mappings` label. Do not use them as readable MCP source. Protocol 47's named legacy oracle still requires a compatible community-mapped 1.8.9 tree at `<root>/1.8.9/src/minecraft/`.

Use `tools/oracle.sh <version> <Class.java[:line]>` to resolve a source citation. Pass `--oracle "$UMPK_ORACLE_ROOT"` to DataGen layout comparisons.
Use `tools/oracle.sh <version> <Class.java[:line]>` to resolve source citations. Pass `--oracle "$UMPK_ORACLE_ROOT"` to DataGen layout comparisons. The existing live harness copies `downloads/<version>` seeds into temporary directories. Do not boot or mutate the shared seeds during live tests.
2 changes: 1 addition & 1 deletion .skills/umpk-integration-testing/scripts/preflight.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ set -euo pipefail

script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
repo_root=$(CDPATH= cd -- "$script_dir/../../.." && pwd)
official_root=${UMPK_ORACLE_ROOT:-$repo_root/MinecraftOfficial}
official_root=${UMPK_ORACLE_ROOT:-${MINECRAFT_OFFICIAL_ROOT:-$HOME/Projects/MinecraftOfficial}}
server_root=${UMPK_SERVER_ROOT:-$official_root/downloads}

for command in dotnet python3 java git pgrep grep; do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,8 @@ def ensure_download(entry: dict, destination: Path) -> None:


def default_root() -> Path:
repo_root = Path(__file__).resolve().parents[3]
configured = os.environ.get("UMPK_ORACLE_ROOT")
return Path(configured).expanduser().resolve() if configured else repo_root / "MinecraftOfficial"
return Path(configured).expanduser().resolve() if configured else Path(os.environ.get("MINECRAFT_OFFICIAL_ROOT", str(Path.home() / "Projects" / "MinecraftOfficial"))).expanduser().resolve()


def main() -> int:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ set -euo pipefail

script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
repo_root=$(CDPATH= cd -- "$script_dir/../../.." && pwd)
official_root=${UMPK_ORACLE_ROOT:-$repo_root/MinecraftOfficial}
official_root=${UMPK_ORACLE_ROOT:-${MINECRAFT_OFFICIAL_ROOT:-$HOME/Projects/MinecraftOfficial}}
server_root=${UMPK_SERVER_ROOT:-$official_root/downloads}
output=${UMPK_LIVE_LOG:-/tmp/umpk-live-matrix.log}

Expand Down
31 changes: 31 additions & 0 deletions .skills/umpk-version-adaptation/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
name: umpk-version-adaptation
description: Adapt UMPK Java protocol versions using vanilla artifacts, canonical datasets, generated tables, wire witnesses, and live boundary tests. Use for new version support or cross-version protocol mismatches.
---

# UMPK version adaptation

Read `docs/contributing/adding-a-version.md` before editing. UMPK owns protocol codecs, registries, world data, movement, and physics.

## Artifact evidence

Read `tools/minecraft-official/README.md` from the repository root. Use `/home/anon/Projects/MinecraftOfficial` on this workstation. Set `MINECRAFT_OFFICIAL_ROOT` and `UMPK_ORACLE_ROOT` explicitly when selecting another root.

Run `bash tools/decompile.sh --version <version>` for server source. Add `--side client` for client behavior. Check the downloaded artifact hashes and each tree's `.complete.json`. An obfuscated legacy tree cannot satisfy a check that requires readable MCP class names. Decompiler warnings require inspection of the affected methods.

Generate vanilla data reports with the matching jar and compatible Java when that release supports them. Put reports in a fresh external directory. Read UMPK's extraction guide for the correct invocation in each era. Runtime reports determine registry and block-state identifiers. Source field order alone cannot establish those identifiers. A stable packet identifier does not prove a stable layout, registry, feature axis, or lifecycle obligation.

## Implement through the existing dataset pipeline

1. Determine whether the release aliases an existing protocol. Preserve codec timelines and pins for an alias.
2. Compare matching vanilla jars, mappings, reports, and source for each changed boundary. Record hashes and source citations.
3. Extract canonical datasets with `tools/extraction/`. Review feature values against vanilla evidence. Obtain authorization for dataset changes when it is absent.
4. Run DataGen verification and dataset comparisons. Use the layout oracle as a source comparison aid, not a conformance gate.
5. Regenerate data, language, and codec tables through DataGen. Never edit `.g.cs` files or generated pins directly.
6. Add a timeline step only when the packet's wire form changes. Keep era rules in dataset features or existing profiles.
7. Add the required literal rows, real-frame round trips, adjacent-band rejection witnesses, and conformance pins through their documented procedures.
8. Run focused tests, adjacent protocols, a live vanilla leg, and the complete repository gates.

Do not restore MCC 1.x palette classes, `Protocol18.cs`, or its generated physics data. Those responsibilities now belong to UMPK's canonical extraction and generation pipeline. Vanilla artifacts and real captures remain the acceptance oracle.

For live proof, use `.skills/umpk-integration-testing/SKILL.md`. Report executed commands, observed assertions, inferred conclusions, harness faults, and unexecuted checks separately.
22 changes: 21 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ Initialize the shared skills with `git submodule update --init MCC-Skills`.
| `.skills/dmcbk-marketplace-authoring/SKILL.md` | Schema-2 plugin catalogues and releases |
| `.skills/asd-ste100/SKILL.md` | Unambiguous procedures, errors, and agent instructions |
| `.skills/umpk-integration-testing/SKILL.md` | Isolated live tests against vanilla servers |
| `.skills/umpk-version-adaptation/SKILL.md` | Source-backed version changes through the owning library and package boundaries |

Eight `.skills` entries, including ASD-STE100, link to the pinned [MCC Skills](https://github.com/MCCTeam/MCC-Skills) submodule under `MCC-Skills/skills`. UMPK integration testing remains local. `.claude/skills`, `.agents/skills`, `.codex/skill` and `.codex/skills` link to `.skills`.
Eight `.skills` entries, including ASD-STE100, link to the pinned [MCC Skills](https://github.com/MCCTeam/MCC-Skills) submodule under `MCC-Skills/skills`. UMPK integration testing and version adaptation remain local. `.claude/skills`, `.agents/skills`, `.codex/skill` and `.codex/skills` link to `.skills`.

Read a matching `SKILL.md` before using a skill. Resolve its relative references from its own directory. Edit shared skills in MCC Skills rather than creating another local copy. Read [agent skills](docs/contributing/agent-skills.md) before updating the submodule revision.

Expand All @@ -39,6 +40,25 @@ Read a matching `SKILL.md` before using a skill. Resolve its relative references

For the count gate, capture the unfiltered full test output in `/tmp/umpk-test.log`. Never store raw test logs in the repository.

## Shared vanilla artifacts

Use `/home/anon/Projects/MinecraftOfficial` on this workstation. The portable default is `~/Projects/MinecraftOfficial`. Read [the artifact tool guide](tools/minecraft-official/README.md) before provisioning or starting a server.

```bash
export MINECRAFT_OFFICIAL_ROOT="$HOME/Projects/MinecraftOfficial"
export UMPK_ORACLE_ROOT="$MINECRAFT_OFFICIAL_ROOT"
export UMPK_SERVER_ROOT="$MINECRAFT_OFFICIAL_ROOT/downloads"
export MCC_SERVERS="$UMPK_SERVER_ROOT"
export UMPK_JAVA11="$MINECRAFT_OFFICIAL_ROOT/runtimes/java11/bin/java"
export UMPK_JAVA25="$MINECRAFT_OFFICIAL_ROOT/runtimes/java25/bin/java"
```

Official jars and available mappings live in `downloads/<version>/`. Server source lives in `<version>-decompiled/`. Client source lives in `<version>-client-decompiled/` when requested. Check `artifacts.json` and `.complete.json` before using them as evidence. Legacy trees marked `obfuscated-no-community-mappings` do not provide readable MCP names.

Use `bash tools/decompile.sh --version <version>` for server source. Add `--side client` for client source. Use `--all-releases --through 26.3 --side both --download-only` to provision both jars across the stable release range. Add `--accept-eula` only with the user's EULA acceptance. Never commit official artifacts, source trees, worlds, credentials, or raw logs.

Use `bash tools/start-server.sh <version> --port <unused-port> --rcon-port <unused-rcon-port>` for an isolated local server. The launcher copies a seed into a fresh run directory. Keep shared seeds unchanged during live tests. Stop only processes owned by the run. Server startup and RCON readiness do not prove client behavior.

## Architecture

```mermaid
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

UMPK, the Universal Minecraft Protocol Kit, is a .NET 10 toolkit for programs that need to speak Minecraft Java Edition. Use it to build bots, automated players, protocol tools, and other clients without running the official game. The library handles the wire protocol, sessions, game state, authentication, chat, inventory, and movement.

UMPK supports 49 Java protocol revisions across 72 named Minecraft releases. Protocol data comes from Mojang artifacts, vanilla source, and recorded server traffic. Version differences live in data and capability tables instead of separate client forks.
UMPK supports 50 Java protocol revisions across 75 named Minecraft releases. Protocol data comes from Mojang artifacts, vanilla source, and recorded server traffic. Version differences live in data and capability tables instead of separate client forks.

> [!WARNING]
> UMPK is still in heavy development. APIs, behavior, and documentation are subject to change. Pin the version or commit that your application uses.
Expand Down Expand Up @@ -46,7 +46,7 @@ UMPK supports Java Edition play protocols from 1.8 through 26.3.
| 1.19 | 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4 |
| 1.20 | 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6 |
| 1.21 | 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11 |
| 26.x | 26.1, 26.2, 26.3 |
| 26.x | 26.1, 26.1.1, 26.1.2, 26.2, 26.3 |

Minecraft versions earlier than 1.8 are not supported. The legacy status ping can read older server-list responses, but it does not provide play-protocol support. See the [protocol table](docs/reference/supported-versions.md) for protocol numbers and dataset mappings.

Expand Down
Loading
Loading