Merge origin/main into frontend parity worktree
This commit is contained in:
@@ -71,8 +71,36 @@ Event actions controlling lifecycle:
|
||||
|
||||
## Open Questions / Follow-ups
|
||||
|
||||
- The exact schedule for `registerAuction()` is outside this file; it is
|
||||
likely called from monthly or timed maintenance.
|
||||
- Unique-item auction close-date extension limits depend on
|
||||
`AuctionUniqueItem` constants and `turnterm`; verify scenarios that override
|
||||
auction timing.
|
||||
- `registerAuction()` is called from legacy `func_gamerule.php` after the
|
||||
logical month changes. Its RNG is seeded before that change with the previous
|
||||
year/month, then consumes one power roll per nation and the conditional
|
||||
tournament roll before auction generation.
|
||||
- Scenario-specific overrides of unique auction timing have not been found.
|
||||
Core2026 currently applies the legacy constants against `tickSeconds`.
|
||||
|
||||
## core2026 compatibility implementation (2026-07-25)
|
||||
|
||||
| Contract | core2026 path | Status |
|
||||
| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
|
||||
| Resource auction list/open/bid | `game-frontend/AuctionView.vue` → `game-api/router/auction` → `auctionOpen`/`auctionBid` engine commands | Confirmed by integration test |
|
||||
| Resource reservation/refund/settlement | opener reserves host gold/rice; bidder reserves and refunds the previous top bid; finalizer transfers or returns resources | Confirmed by integration test |
|
||||
| Unique list/detail privacy | API replaces host and bidder identity with deterministic aliases and never returns unique-auction general IDs | Confirmed by API implementation and typecheck |
|
||||
| Unique open | engine validates configured quantity, slot ownership, one active host/item auction, and atomically inserts the host's first bid while deducting `inheritance_point.previous` | Confirmed by integration test |
|
||||
| Unique bid | row-locked auction, minimum `max(1%, 10)`, conditional point deduction, previous-top-bid refund, slot/top-bid conflict checks | Confirmed by integration test |
|
||||
| Unique finalization | requested extension, per-slot and total ownership-limit extension, host neutralization, item inventory update | Confirmed by integration test |
|
||||
| Timer/worker | API updates the Redis timer after open/bid; existing scheduler claims due rows and sends durable `auctionFinalize` commands | Confirmed by integration test for timer seed and durable command finalization |
|
||||
| Neutral merchant registration | `neutralRegistrar.ts` runs at the month boundary, reproduces the previous-month seed and preceding RNG consumption, and queues host `0` auctions in the same DB transaction as the month state | Confirmed by PHP differential, engine boundary, PostgreSQL idempotency, and full integration tests |
|
||||
|
||||
Unique auction mutations deliberately run in the turn-engine database
|
||||
transaction. Point reads use row locks and deductions use conditional updates,
|
||||
so simultaneous requests cannot spend the same previous-season inheritance
|
||||
points twice. A failed open command creates neither an auction nor an orphaned
|
||||
inheritance request marker.
|
||||
|
||||
Neutral registration intentionally counts every historical host-`0` resource
|
||||
auction, including finished rows, because the legacy probability denominator
|
||||
does not filter on `finished`. Average gold/rice includes only generals with
|
||||
`npcState < 2` and is clamped to 1,000..20,000. The month marker and generated
|
||||
auction rows are persisted together under a PostgreSQL advisory transaction
|
||||
lock, preventing the same month from producing duplicate merchant auctions
|
||||
during daemon retry.
|
||||
|
||||
Reference in New Issue
Block a user