chore: sync with upstream nnnotes main (12df2a6) - #2
Merged
Merged
Conversation
script_class returned an error for a component whose m_Script is null; it now returns None, so prefabs that keep such a component export normally. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A room with no nodes or buffers produced empty glTF arrays and an empty BIN chunk, which glTF validators reject. Empty arrays are now left out, and a room without geometry is a scene without nodes in a file without the BIN chunk. Rooms with geometry are written byte for byte as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Several `nnnotes story` processes sharing one `--models` directory could remove a model another process had just installed, or read one while it was being replaced, and fail. A model is now installed in one rename; when another process installs the same model first, its copy is kept (exports are byte-identical) and this one is dropped. `--force` moves the previous directory aside before installing, and a reader that finds the directory gone in between exports the model itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every story episode is exported and checked one by one, every spot and room background exports and validates as glTF, and full multi-region site builds are byte-identical across two runs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The actions ran on the deprecated Node.js 20 runtime: checkout v7, setup-python v7, setup-node v7, upload-artifact v7, download-artifact v8 and action-gh-release v3 run on Node.js 24. Artifacts are downloaded by name, which the path change of download-artifact v5 leaves as it was. commitlint runs on Node.js 22 (20 is past its end of life). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`nnnotes songs` writes one canonical JSON file (nnnotes.songs/1) with every live song of a master data version: titles, readings and credits in the five text languages, bands, vocal characters, category, tags, release time, the BGM cue and its length read from the ACB, and per difficulty the level, note counts by operate type, BPM, note times, music length, skill events and fevers. It joins a deck data file of the same version by score id. `--jackets DIR` also writes every song's jacket as WebP. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`nnnotes music-data` replaces `songs` and `deck-data`: one canonical JSON file (nnnotes.music-data/1) with every song's metadata, every chart's facts and, per chart, the deck statistics of ournotes-deck (chart-stats/2: whole-live simulation, Gekisou on, per seed). The deck model is built into nnnotes as the PyO3 extension nnnotes._deck, pinned to one ournotes-deck commit in rust/Cargo.toml, so one nnnotes version always carries one deck model; its results are checked against the chart facts (notes, times, missions, skill events, fevers) and a mismatch fails the export. `--full` adds the deck input (the master subset and every chart), `--no-deck` leaves the statistics out. The build moves to maturin: abi3 wheels for Python 3.11+ on Linux, Windows and macOS, and an sdist with the Rust sources. The deck workflow opens a pull request when ournotes-deck's main moves past the pinned commit. BREAKING CHANGE: the `songs` and `deck-data` commands and their formats are gone; `music-data` writes both in one file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t play The deck model moves to ournotes-deck d4abb52 (chart-stats scenarios). Every chart's `deck` carries `offSeeds`, the chart measured with Gekisou off as a solo live plays; its ranges carry `rankBonusPercents` and its seeds `rangeWeights`, `rankCheck`, `scorePerfect` and `rangeScorePerfect`, from which a page derives a Gekisou live at any ranks and a Just rate. The statistics are checked against the master data and themselves: the rank bonus percentages against the MasterLiveGekisouRankingScoreBonus rows of the song's mission pattern, every rank bonus against trunc(rangeScore * percent / 100), the Perfect play of a chart without Just notes against the play, the array shapes, one Gekisou off seed, and every check and rank check within its bound. docs/music-data.md and the schema describe the new fields (optional in the schema: older files do not have them). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed-master) `nnnotes music-data --decoded-master` reads master data decoded elsewhere, the directory the other commands read (`[paths] master`, `--master`, `[servers.<region>] master`): one `<Table>.json` per table and the `MasterManifest.json` of the files they were decoded from, as a master data snapshot published with its manifest carries it. No master key is needed, so a workflow can build the file from such a snapshot without the key. The master data version and each table's SHA-256 are the manifest's (the decoded tables cannot be checked against the files as served); `master.source` stays `api`, and the file is byte for byte the one `--master-files` writes from the same files. A missing manifest, an unlisted table, a table without a SHA-256 in the manifest, a missing or unreadable table stop the command as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream MetaSekaiLab/nnnotes main 12df2a6: 0.1.2, the music-data command with the deck model nnnotes._deck (Rust, maturin), its play scenarios and --decoded-master. ci.yml: upstream's actions, Rust cache and rust job, with this fork's uv installs. story-site.yml: the Rust cache for the install, which now builds nnnotes._deck. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Merges upstream MetaSekaiLab/nnnotes
mainat12df2a6into this fork (a merge commit, no rebase): 0.1.2,nnnotes music-datawith the deck model built in (nnnotes._deck, Rust via maturin), the play scenarios (MetaSekaiLab#5) and--decoded-master(MetaSekaiLab#6). The fork was at upstream 0.1.1 plus the story site commits..github/workflows/ci.yml(the only conflict): upstream's action versions,Swatinem/rust-cache@v2andrustjob, with the fork'suv pip installsteps..github/workflows/story-site.yml:Swatinem/rust-cache@v2before the install, which now buildsnnnotes._deck.pyproject.tomlmerged by itself (maturin build backend; the fork's UnityPy comment kept)..github/workflows/deck.yml(opens deck pin PRs) comes along; it will be disabled in this fork withgh workflow disable, the file kept.Test plan
Generated with Claude Code