* SDVX: add EG + Nabla omnimix folders and tables
* SDVX: add exceed-omni and nabla-omni versions
* SDVX: add nabla-omni version when adding new charts
* add exceed-omni to songID 1352 because i missed it earlier oops
* docs: migrate from mkdocs to mdbook
- Rename old mkdocs docs/ to old-docs/ for reference
- Set up new docs/ with mdbook (book.toml + src/ tree)
- Mirror full nav structure from mkdocs.yml into SUMMARY.md
- Add Justfile-docs with docs-serve, docs-build, docs-check, docs-install recipes
- Import Justfile-docs from root Justfile
- Rewrite .github/workflows/docs.yml: build step uses taiki-e/install-action
to install mdbook, split into separate build + deploy jobs, PR builds
run the check step too
* ci(docs): pin actions to SHAs, install mdbook via release binary
* ci(docs): install mdbook from apt instead of curling a release binary
* dev: replace mkdocs python stack with mdbook in dev image
* ci(docs): apt only works on Debian; restore release binary install for Ubuntu CI
* docs: fix duplicate file entries in SUMMARY.md
* docs: remove docs-install recipe
* docs: remove site-url from book.toml to fix asset loading
* dev: install mdbook from upstream release binary, not Debian apt
The Debian package (0.4.x+ds) strips bundled font assets, leaving the
built site without fonts/fonts.css. Use the upstream tarball (same as CI)
so the theme is complete. Handles x86_64 and aarch64.
* docs: vendor mdbook tarballs in dev/mdbook/, install from there
Dockerfile.dev uses COPY + tar to install the right arch at build time.
CI extracts the x86_64 tarball directly from the checkout.
No network access required for either — and no stripped-fonts Debian package.
* fix: unwritten
* fix: update arcaea's CCs
* fix: proper ID check
* rest of the owl
* I remembered to run tests
* there is no pale purple
* add phase 12
* remove particle arts from the mobile folder
* make arcaea an honorary GCM game it always wanted to be
* songpack=genre
* move displayVersion over to chart data
* disable FR/PM score validators
* Revert "disable FR/PM score validators"
This reverts commit da1cfbaa62.
* bullshit
* bullshit 2
* bullshit 2
* checkpoint
* server compiles again
* fmt
* checkpoint
* last one out, get the lights
* euston station
* like, mostly good. I'm under the ocean right now.
* fix: some nonsense AI stuff
* fix: new eslint rules, and cleanup imports across the board
* feat: folder slug rewrite, email logic change, too
* fix: register must use txn not db
* checkpoint
* [maimaidx] Update to CiRCLE
* not quite sure what happened here
* add stuff to prism plus omnimix
* add tables and folders for PRiSM PLUS Omnimix
* fix: prism/omni should be inactive, prismplus/omni should not
* add search terms for jp songs
* fix: ensure that there are no fails >=80% and clears <80%
* Revert "fix: ensure that there are no fails >=80% and clears <80%"
This reverts commit 518ba0f2e2.
I forgot that modifying imported score data is a brittle and multi-step
process. I think we're kinda just screwed here.
* update to new rg-stats, and have validation rules for clears
* deps: update rg-stats to 1.2.1
* properly fix invalid scores
* seeds: Update seeds to 2026/01/30
* fix: ProcessPBs updates chart rankings already
* recalculate AP scores for maimai DX CiRCLE
* chore: lint
* chore: lint 2
* chore: typecheck
* build(client): add 'lintfix' target matching the server
* docs(lr2hook): suggest lr2_chainload instead of BokutachiLauncher.exe
BokutachiLauncher.exe is no longer a part of BokutachiHook.
* refactor(server/lr2hook): G-ATTACK, P-ATTACK and HAZARD are not HARD
* feat(server/lr2hook): parse extendedJudgements
* feat(server/lr2hook): use fast-slow and early/late judgements
* test(server/lr2hook): make clear that in this test notesPlayed != notesTotal
* feat(server/lr2hook): calculate BP by hand when exiting chart early
* feat(server/lr2hook): parse rseed
* feat(server/lr2hook): parse extendedHpGraphs
* feat(server/lr2hook): parse unixTimestamp
* feat(server/lr2hook): use unixTimestamp as score play time
Especially useful as BokutachiHook now retries sending scores after some
time on connections errors.
* feat(common/bms+server/lr2hook+docs): add gaugeHistory{Easy,Groove,Hard}
Could also save graphs for unimplemented gauges, not done here as I
don't know if they are ever going to be implemented while they take some
decent space.
* feat(client/bms): support several gauges
Ugly IIFE inside IIFE is work-around for eslint bug `Expected a 'break'
statement before 'case'`.
* docs: fix pages that weren't in the navigation bar
* seeds: update DDR parsing scripts to use arguments
* docs: fix minor mistake
* docs: add all supported DDR versions
* docs: add DDR musicdb import guide
* feat(client): rating alg name override
* Added a nameOverride field to RatingAlgorithmConfig
* Added FormatGPTXRatingName
* Renamed maiDX `Rate` to `Rating`
* Renamed Ongeki `Rating` to `Classic Rating`
* fix: there's more
* fix: this doesn't need to be in common
* chore: revert this
* docs: document the new rating description
* New match type: `ddrSongHash`
* style: sort `MatchTypesWithDifficulty`
* make `ddrSongHash` a song property instead of a chart property
* docs: add descriptions for match type `ddrSongHash`
* add `ddrSongHash` field to all applicable songs
* fix: enforce ddrSongHash is only used on DDR
---------
Co-authored-by: zk <zkldi.dev@gmail.com>
* temporary dvctr
* start of work
* fix: timeouts in windows
* fish?
* feat: better, working stuff
* refactor: rename database-seeds to seeds/
* better
* fdsaf
* feat: don't let our container get owned by root
* fix: better user handling
* feat: falling asleep at my desk i yield to you what i have done
* feat: autoadminify
* docs: denote trickshot
* feat: open in browser on launch
* better seeds workings...
* fix: dont kill shell
* docs: mention dev/debs
* fix: whoops
* fix: make seeds load within the century
* feat: rest of the containerisation
* feat: new alias
* style: fix linter errors
* fix: bad call
* fix: better justfile
* Add Unilab seeds (2023-09-05)
* Add mdb to mxb rerunner & fix old scripts
* Add missing comma to make the linter happy
* fix: typo
* i have no reason to believe this code is broken
* feat: get rid of some old crap
---------
Co-authored-by: zkldi <20380519+zkldi@users.noreply.github.com>
* chore,fix: upgrade ongeki seeds
The dataset is up to date up until March 27th, 2024.
A single chart is missing:
https://wikiwiki.jp/gameongeki/怒槌~光吉猛修一部謎~
Added maxPlatScore and inGameID.
Added alt (romaji) song titles.
Removed the wikiwiki scraper because it's no longer relevant.
Restored the score column that relied on maxPlatScore.
Fixed the client crashing when you click Lamps Only in a geki session.
Removed Act 2.
* fix: missing fields in the test chart
* chore: get rid of isUnranked
* fix: clarify the track ID range
* feat: get rid of isHot and isLatest in code
* feat: remove hot/latest from seeds
* feat: migrate away from them too
* fix: 21
* fix: again
* fix: again
* fix: again
* feat: initial ongeki support
* feat: initial ongeki seeds
* chore: link to a basic score exporter
* fix: unhardcode the colSpan of score dropdowns
Fixes ongeki and doesn't break chunithm
* fix: make bellCount optional to match judgements and damage
* docs: add a page for Ongeki
* feat: ongeki seeder
* feat: implement isHot
Also restore Arcaea to test.conf.json5 (it was a mistake)
* fix: add isHot to the seeder
* fix: proper handling of re:masters
Also change non-full-bell from an empty string to "NONE", for clarity
* docs: document the re:master fix
* feat: update rg-stats to 0.5.5
enables ongeki calcs
* chore: lockfile
* fix: get rid of scales as they're unused
* fix: update name->NAME
* minrelevantvalue should be one of the values?
* fix: add property that must be there?
* fix: jesus christ the tests are loud
* better docs on mrv
* fix: remove platdelta, make platscore optional
* fix: grade B tests oh my god
* fix: rating check
* fix: pb merge check
* fix: pb merge check #2
* fix: use nowrap in all lamp cells
* fix: tidy up platcell
* fix: all of these MUST be part of scoreID
* fix: remove unused code
* feat: remove note counts & isHot
* chore: bump rg-stats
---------
Co-authored-by: zkldi <20380519+zkldi@users.noreply.github.com>