Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
f3a936a
Initial commit (moved from affs)
StannisMod May 11, 2026
b4cf058
Made test framework universal
StannisMod May 11, 2026
8c42e54
-
StannisMod May 12, 2026
9380bd9
Moved test framework to mavenLocal
StannisMod May 12, 2026
5532e59
Moved test framework to JUnit
StannisMod May 12, 2026
c7102a6
Moved test framework to JUnit
StannisMod May 12, 2026
b5248a4
Made test framework more FG6-friendly
StannisMod May 14, 2026
08ee660
Button-calling functions
StannisMod May 15, 2026
4f8196c
Starting test clients in taskbar
StannisMod May 15, 2026
0657dc0
Weather methods
StannisMod May 16, 2026
cb94b2d
Merge remote-tracking branch 'origin/master'
StannisMod May 16, 2026
0afef62
fix cross-platform native binary resolution
StannisMod May 18, 2026
948d5fd
test: port-bind retry in RealDedicatedServerHarness
StannisMod May 24, 2026
2e16dea
feat: multi-client support in RealClientHarness
StannisMod May 27, 2026
7f8ee7f
fix: remove vestigial dummy mod container from ASM coremod
StannisMod Jun 1, 2026
ae379ca
fix: tolerate bad planet configs and crash with a report, not silently
StannisMod Jun 1, 2026
71c15cf
test: pin per-planet oregen write/read round-trip (issue #73)
StannisMod Jun 1, 2026
cac3115
fix: guard the JEI gas-giant-refresh call so it loads without JEI (#76)
StannisMod Jun 1, 2026
e9f59fb
docs: file TASK-47 (per-dim time + planet beds, #66) and TASK-48 (per…
StannisMod Jun 2, 2026
2727fd6
chore: update Navigator knowledge graph
StannisMod Jun 2, 2026
d1eb479
fix: per-dimension time so beds work on planets (#66)
StannisMod Jun 2, 2026
4005f7c
refactor: rename ARWeatherWorldInfo -> ARDimensionWorldInfo
StannisMod Jun 2, 2026
1c18bbe
chore: update Navigator knowledge graph
StannisMod Jun 2, 2026
0cbb357
test: TASK-49 — repro railgun silent fire-failure (#61)
StannisMod Jun 2, 2026
b055ea1
fix: don't crash under a Mixin host — guard AR self-bootstrap of Mixin
StannisMod Jun 2, 2026
28f848d
docs: SOP for bug-report workflow (repro-first, client e2e mandatory)
StannisMod Jun 3, 2026
df8b9c8
test: TASK-49 — client e2e for railgun #61 (SOP compliance)
StannisMod Jun 3, 2026
ef2c2f6
fix: TASK-49 — railgun fires across planets + reports failures (#61)
StannisMod Jun 3, 2026
c5ee89d
docs: SOP for issue-reference discipline (never bare #NN)
StannisMod Jun 3, 2026
e6ed0f0
feat: client key injection + ridden-entity report (v0.4.3)
StannisMod Jun 3, 2026
c97a7e8
feat: reflective client static-field reader (v0.4.4)
StannisMod Jun 4, 2026
25fa6cd
Add client look injection + rotation reporting (0.4.5)
StannisMod Jun 4, 2026
b2a841c
Merge branch '1.12' into fix/various
StannisMod Jun 4, 2026
0d9d7d0
fix: reseed rain/thunder strength after wrapping planet WorldInfo
StannisMod Jun 10, 2026
234546f
fix: redirect vanilla /weather to per-dim AR variant on planets
jchung01 Jun 10, 2026
558d84e
Merge branch '1.12' into fix/various
StannisMod Jun 10, 2026
82797ca
docs: file TASK-50 — directional gravity + camera feature request
StannisMod Jun 10, 2026
a5e295e
build: vendor ForgeTestFramework 0.4.5 as testframework/ subtree
StannisMod Jun 10, 2026
8731274
build: compile vendored testframework/ in the test source set
StannisMod Jun 10, 2026
64a1bca
test: e2e the /weather redirect via a new send_chat bot probe
StannisMod Jun 10, 2026
7610260
test: e2e the dummy-container removal via a new report_mods bot probe
StannisMod Jun 10, 2026
85d94e0
test: pin dirty-planetDefs server boot for the #77 fault tolerance
StannisMod Jun 10, 2026
56d2045
test: live bot-sleep e2e for per-dim time/planetary dawn (#66 gap)
StannisMod Jun 10, 2026
2a53ebe
docs: backfill ledger entries 9-12 for PR #22 fixes + record e2e exce…
StannisMod Jun 10, 2026
9fa1c69
test: honest-e2e the /ar command tests via real client chat
StannisMod Jun 11, 2026
fce8071
test: honest-e2e the ride tests — real W/sneak keys, client-side ridi…
StannisMod Jun 11, 2026
eb5b68c
test: honest-e2e the item-use tests — real client clicks, player-laye…
StannisMod Jun 11, 2026
8a0c964
test: relabel 4 probe-driven 'client' tests to the server tier + fake…
StannisMod Jun 11, 2026
3e5eb3b
test: finish the PARTIAL client e2e — player-layer completion reads
StannisMod Jun 11, 2026
51ceb86
docs: 2026-06-11 honest-e2e delta audit + SOP refresh
StannisMod Jun 11, 2026
27a1a46
test: harden seal-detector chat poll; record shared-box flake verdicts
StannisMod Jun 11, 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
31 changes: 31 additions & 0 deletions .agent/DEVELOPMENT-README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,37 @@

## ⚠️ Required reading before any non-trivial work

### At session start + before working any bug report

**[SOP: Bug-report workflow](./sops/development/bug-report-workflow.md)** —
read at the start of every session, and before fixing any reported
issue/bug.

**TL;DR**: the pipeline is repro-FIRST → trace report → user decides.
(1) Write reproduction tests against the clean default build before
touching production — **a `testClient` e2e is mandatory** (plus a
`testServer` e2e when the bug is catchable there); they confirm the
bug now and guard regression forever. (2) Only after the behaviour is
confirmed, deliver a structured trace report: cause (`file:line`),
provenance (when it was introduced), and fix options. (3) The user
picks: **Path A** — file a `Type: Bug report — confirmed` /
`Priority: urgent` task (status `Backlog`), fix deferred; **Path B** —
fix now, flip the repro tests to the corrected contract, close the
task. **Session-start duty**: scan `tasks/` for open
`Type: Bug report — confirmed` tasks and offer to fix them.

### Before writing any issue reference (commit / PR / TASK / ledger)

**[SOP: Issue-reference discipline](./sops/development/issue-reference-discipline.md)** —
read before referencing an issue number anywhere.

**TL;DR**: this repo is in a GitHub fork network
(`Advanced-Rocketry` root → `StannisMod` → `dercodeKoenig`). A **bare
`#NN` leaks to the root** and notifies unrelated 2015-era issues —
never use it. **Always fully-qualify** as `owner/AdvancedRocketry#NN`
using the `owner/repo` from the issue link the user gave you (it may be
`StannisMod` or `dercodeKoenig`). Never reference the root.

### Before writing or auditing tests

**[SOP: Testing Principles](./sops/development/testing-principles.md)** —
Expand Down
2 changes: 1 addition & 1 deletion .agent/audits/2026-05-27-full-coverage-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ assembly + at least one recipe end-to-end + power-drain pin via
| Per-dimension weather isolation | Deep (TASK-09 `PerDimensionWeatherIsolationTest`) |
| Non-AR dimension exclusion | Deep (`NonARDimensionIsolationTest`) |
| Weather persistence | Deep (`WeatherPersistenceTest`, `PlanetWeatherSavedDataTest`) |
| Weather sync to client | Deep (`WeatherClientSyncE2ETest`, `ARWeatherWorldInfoTest`) |
| Weather sync to client | Deep (`WeatherClientSyncE2ETest`, `ARDimensionWorldInfoTest`) |
| Worldgen determinism (within-session) | Deep (`WorldgenDeterminismAndSamplingTest`) |
| Worldgen cross-session reboot determinism | **Non-goal** (README §"Conscious non-goals") |
| OreGen properties registry | Deep (`OreGenPropertiesTest`) |
Expand Down
84 changes: 84 additions & 0 deletions .agent/audits/2026-06-11-honest-e2e-delta.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Honest-client-e2e delta — 2026-06-11

**Branch**: `fix/various`
**Parent audits**: [`2026-05-27-full-coverage-audit.md`](./2026-05-27-full-coverage-audit.md),
[`2026-05-29-coverage-delta.md`](./2026-05-29-coverage-delta.md)
**Trigger**: full sweep of the testClient tier against
[`sops/development/honest-client-e2e.md`](../sops/development/honest-client-e2e.md)
(the SOP postdates most of the tier — written 2026-06-03, tier mostly built in May).

## Sweep verdicts (before → after)

Of 29 client e2e classes audited: 9 honest, 6 partial, 13 false-green
risk, 1 mislabeled. All 20 non-honest were remediated the same day:

| Group | Tests | Remediation |
|---|---|---|
| `/ar` command tests | WorldCommandFetchTest, WorldCommandFetchModeratorTest, WorldCommandPlayerEquippedE2ETest | `exec-as-player` stimulus → real client chat (`sendChat`); outcomes read at the player layer (client position/dim/inventory/chat overlay), server probes demoted to oracles |
| Ride tests | HovercraftRideE2ETest, ElevatorCapsuleRideE2ETest | throttle = real W key, dismount = real sneak; assertions via `reportRidingEntity` (mount stays a probe — SOP-allowed arrange) |
| Item-use tests | ItemHovercraftSpawn, OreScannerRightClick, ItemAtmosphereAnalzer, ItemSealDetector, ItemBiomeChanger | real `useItem`/`interactBlock` clicks (+ `setLook` aim); observations via client entities / client screen / client chat (i18n resolved); arrange-only probe splits (`equip-orescanner`, `equip-biomechanger`, `satellite poslist-size`) |
| Relabeled to testServer (user-approved) | VacuumGuards, Advancements→AdvancementsTrigger, LowGravFallDamage, AtmospherePlayerEvent | server-side handler contracts that the client tier drove via probes anyway; headless player supplied by `artest player ensure-fake` + `tick-living` |
| Partial completions | RocketBuilderGui (client sees the spawned EntityRocket), suit ×2 + GasChargePad (client-rendered chest NBT) | player-layer completion asserts added |

Remaining PARTIAL (accepted): `RailgunCargoTransitE2ETest` — stimulus and
assertions are server probes; the cargo-transit contract is double-pinned at
the server tier (`RailgunFiringContractTest`), and the client-visible surface
(hatch GUI contents) needs a dedicated GUI leg. Candidate follow-up, not a
silent exception.

## Framework capabilities added (vendored testframework/)

`send_chat`, `report_mods`, `use_item`, `interact_block` (week of 06-10),
`report_chat`, `report_player_items`, `report_entities` (06-11) — each landed
in the same commit as the first test using it.

## Production bugs found by the sweep (all fixed on `fix/various`)

Connectionless player-shaped entities (Forge FakePlayers — spawned by
turtles/block-breakers/test harnesses) crashed AR server-side:

1. `EntityEventHandler.onJoinWorld` / `onPlayerChangedDimension` —
unconditional `player.connection.sendPacket` (+ CCE-prone cast for non-MP
EntityPlayer impls). Guarded.
2. `PlanetWeatherManager.syncToPlayer` — same. Guarded.
3. `AtmosphereHandler.onTick` effect paths — potion sync +
`PacketOxygenState` (now via `AtmosphereType.sendToRealPlayer`) took the
server tick loop down for connectionless players in non-breathable dims.
Effects now skip them; cache/sync bookkeeping still runs.
4. (Latent, found by the OreScanner rewrite) `ItemOreScanner.onItemRightClick`
casts the stored satellite id to `int` before the registry lookup — long
ids silently never resolve and the GUI never opens. Documented at the
probe; production fix not yet decided (ids are int-safe in practice).

## Probe defect found (open)

`artest server wait <dim> <ticks>` executes ON the server thread
(console command), so its sleep-poll loop blocks ticking entirely: it
returns `elapsedTicks:0` after burning its wall budget and stalls the
server for the duration. Every existing caller got a silent no-op wait.
Relocated tests wait off-thread (test-JVM sleep) instead. Follow-up:
fix or retire the probe and sweep its callers (RocketDescentLandingTest
et al.).

## Flake note (same day)

`WorldCommandFetchModeratorTest` (3 JVMs: server + 2 GL clients, ~7 GB):
green standalone at 11:05 after the sendChat rewrite; from ~12:30 the
first client's bridge dies seconds after world-join ("Client bridge
closed unexpectedly" at the first waitTicks), reproducibly, while TWO
sibling-session Minecraft clients run on the same box/display (pgrep
evidence per the shared-box memory). Code unchanged between green and
red. Verdict: shared-box display/RAM contention, not a test defect —
re-run when the box is quiet before treating as a regression.
`GuidanceComputerGuiE2ETest` and one `ItemSealDetector` method failed
once in the full-suite run under the same load and passed on re-run
(the seal test's chat poll was also hardened: 20-line window, 200-tick
cap).

## Coverage-audit cross-check (same sweep)

The 2026-05-27/29/31 audit trio remains trustworthy: all Deep/Partial pins
exist (one stale name fixed: `ARWeatherWorldInfoTest` →
`ARDimensionWorldInfoTest`), every accepted §3 proposal shipped or tracked,
no dangling debt. Pyramid counter: trust `tasks/README.md` (regen 2026-06-03)
over audit snapshots.
86 changes: 83 additions & 3 deletions .agent/history/known-bugs-ledger.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
2026-05-23). Batch #2 below is **live** and is kept in sync with the
summary in [`../tasks/README.md`](../tasks/README.md) bug-ledger section.

**Live bug count (as of 2026-05-31)**: 4 live — Batch #2 entries
#1, #3, #5, #7. Entry #2 dropped as impl-trivia, #4 fixed by TASK-41,
#6 fixed by TASK-43 Phase 3 (see per-entry notes below).
**Live bug count (as of 2026-06-10)**: 4 live — Batch #2 entries
#1, #3, #5, #7. Entries #9–#12 backfilled 2026-06-10 for the PR #22
issue fixes (all fixed on arrival; see per-entry pins + approved e2e
exceptions). Entry #2 dropped as impl-trivia, #4 fixed by TASK-41,
#6 fixed by TASK-43 Phase 3, #8 fixed by TASK-49 (see per-entry notes below).
When a future production bug is uncovered, follow the rule in
[`CLAUDE.md`](../../CLAUDE.md#bug-tracking--every-discovered-production-bug-must-be-logged)
and append it to Batch #2 here AND to the README summary.
Expand Down Expand Up @@ -255,3 +257,81 @@ authoring that have not yet been fixed.
`TilePumpFillsFromAdjacentWaterSourceTest` pins the real contract
(drains an AR Forge-fluid source) and documents this in its docstring.
**Found**: 2026-05-31 during TASK-44 Gap F.4 un-ignore.

8. ✅ **FIXED 2026-06-03 by TASK-49.** `attemptCargoTransfer` now loads a
registered-but-unloaded destination dimension on fire
(`getWorld==null && isDimensionRegistered → initDimension → getWorld`,
the `TileSpaceElevator` idiom; the destination railgun's own `onLoad`
ticket sustains it after), and every non-firing outcome sets a
`FireStatus` (`NO_TARGET` / `TARGET_UNAVAILABLE` / `TARGET_FULL` /
`DIFFERENT_SYSTEM`) synced to the client and shown as a red GUI line —
no more silent no-op. Repro tests flipped to the corrected behaviour
(3 server + 2 client, green). Original description below.
**`TileRailgun.attemptCargoTransfer` fails silently — no player feedback
on any failure branch; the dominant field cause is an unloaded destination
dimension.** The railgun is a paired item-teleport: a source pulls a stack
from its input port and dispatches it to a linked destination railgun.
Firing is gated by ~5 AND-conditions and returns `false` with **no message**
when any fails. The most likely field failure (matching the related
Advanced-Rocketry#1172 "Station→Moon doesn't fire") is the destination being
in an unloaded dimension: production resolves it via
`net.minecraftforge.common.DimensionManager.getWorld(destDim)`, which
returns `null` for an unloaded dim, and the railgun only chunk-loads its OWN
chunk (`onLoad:252`), never the destination's.
File: `src/main/java/zmaster587/advancedRocketry/tile/multiblock/TileRailgun.java:309-364`
(silent `false` branches), `:340` (Forge `getWorld` → null on unloaded dim),
`:252` (own-chunk-only force-load).
**Consequence**: player-visible — "Railgun just does not fire" (#61). Sender
on planet A, receiver on planet B, player on A → B unloaded → nothing
happens, no feedback. Cargo is NOT lost (verified). Same-dimension firing
works. Other silent modes: no output hatch on the destination / output full,
redstone state not satisfied, insufficient RF/t, linker not re-targetable
without a sneak-`resetPosition`.
**Pinned by**: `RailgunFiringContractTest` —
`railgunFiresCargoToLinkedRailgunInSameDimension` (positive same-dim
contract) + `railgunSilentlyFailsWhenDestinationDimensionUnloaded`
(characterizes the silent unloaded-dest no-op + cargo-preservation), and at
client tier by `RailgunCargoTransitE2ETest` (same two contracts with a real
client connected). New `artest infra railgun-fire` probe verb drives the
source-side path.
Fix candidates (TASK-49): load/resolve the destination dim on fire +
surface a failure message per cause.
**Found**: 2026-06-02 during issue #61 investigation (TASK-49).

9. ✅ **FIXED 2026-06-01 (PR #22, `7f8ee7f0`).** Vestigial `DummyModContainer`
(`advancedrocketrycore`) made the title screen count one more "loaded" mod
than "active" (dercodeKoenig/AdvancedRocketry#71). Backfilled entry — fixed
before this ledger row existed.
**Pinned by**: `ModCountParityE2ETest` (client tier, via the framework's
`report_mods` probe — the same `Loader` lists the menu line renders;
red-proven against the restored container).

10. ✅ **FIXED 2026-06-01 (PR #22, `ae379cac`).** planetDefs.xml referencing
content from an uninstalled mod crashed world creation through a silent
`FMLCommonHandler.exitJava` — window closed, no crash report
(dercodeKoenig/AdvancedRocketry#77). Backfilled entry.
**Pinned by**: `XMLPlanetLoaderTest` (reserved-but-empty ore, per-planet
isolation) + `PlanetDefsFaultToleranceTest` (server tier: boots with a
dirty file, malformed planet skipped, good planet survives).
**Client e2e: approved exception (user, 2026-06-10)** — the symptom is the
client window closing on a server-side startup crash; the server-tier boot
pin covers the substance, a client shutter assert adds nothing.

11. ✅ **FIXED 2026-06-01 (PR #22, `cac31155`).** `PacketDimInfo.executeClient`
touched the JEI `ARPlugin` unconditionally → `NoClassDefFoundError` without
JEI installed, re-introducing dercodeKoenig/AdvancedRocketry#76 via the
dimension-sync path. Backfilled entry.
**Pinned by**: nothing executable — **approved exception (user,
2026-06-10)**: reproducing needs a client WITHOUT JEI on the classpath, and
both harnesses always carry JEI; no no-JEI harness profile is planned.
Source-level guard (`Loader.isModLoaded("jei")`) audited at fix time.

12. ✅ **FIXED 2026-06-02 (PR #22, `d1eb4794`) — e2e closed 2026-06-10.** Beds
skipped no time on AR planets and vanilla's 24000-rounded wake missed
planetary dawn (dercodeKoenig/AdvancedRocketry#66, TASK-47). Backfilled
entry.
**Pinned by**: `SleepWakeTimeTest` (dawn math), `ARDimensionWorldInfoTest`
(per-dim clock ownership), and since 2026-06-10 the live
`PlanetBedSleepE2ETest` (real client sleeps in a real bed via the
framework's `interact_block`; red-proven: without `MixinWorldServer` the
skip lands at vanilla 24000 — mid-night on a 30000-tick planet).
Loading