{"id":49730560,"url":"https://github.com/igapyon/mikuscore-java","last_synced_at":"2026-05-09T06:14:13.893Z","repository":{"id":356212105,"uuid":"1222527504","full_name":"igapyon/mikuscore-java","owner":"igapyon","description":"開発途中。upstreamリファクタリング待ち。java port of mikuscore。Rate limitsなどが余っている時に進める","archived":false,"fork":false,"pushed_at":"2026-05-07T03:43:04.000Z","size":271,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"devel","last_synced_at":"2026-05-07T05:35:24.548Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/igapyon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-27T13:02:08.000Z","updated_at":"2026-05-07T03:43:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/igapyon/mikuscore-java","commit_stats":null,"previous_names":["igapyon/mikuscore-java"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/igapyon/mikuscore-java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igapyon%2Fmikuscore-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igapyon%2Fmikuscore-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igapyon%2Fmikuscore-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igapyon%2Fmikuscore-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/igapyon","download_url":"https://codeload.github.com/igapyon/mikuscore-java/tar.gz/refs/heads/devel","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igapyon%2Fmikuscore-java/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32809154,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-09T06:14:12.444Z","updated_at":"2026-05-09T06:14:13.885Z","avatar_url":"https://github.com/igapyon.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mikuscore-java\n\nJava straight-conversion workspace for `mikuscore`.\n\n## Purpose\n\nThis repository is a Java 1.8 based straight conversion of `mikuscore`.\n\nThe Java version does not try to redesign the upstream project into a Java-first architecture at the initial stage.\nThe primary goal is to preserve the upstream Node.js / TypeScript structure, naming, CLI intent, tests, and artifact roles closely enough that upstream changes remain traceable.\n\nThe Java version targets the CLI-oriented feature set that can run in the Java runtime.\nBrowser/Web UI behavior is out of scope for this repository unless a later explicit decision changes that boundary.\n\nCurrent initial scope is focused on:\n\n- MusicXML-centered score processing\n- CLI runtime foundation\n- upstream-aware Java tests using JUnit Jupiter\n- mapping documents for upstream source, tests, CLI, and follow-up items\n\nVSQX conversion is intentionally out of scope for the initial Java conversion because the upstream path depends on a bridge / dependency shape that is not a direct Java straight-conversion target.\n\n## Upstream Policy\n\n- Use `workplace/mikuscore` as the local temporary reference clone of the Node.js / TypeScript upstream.\n- Treat `workplace/` as local working space.\n- Track only `workplace/.gitkeep` in Git.\n- Keep Java implementation and Java-specific specs outside `workplace/`.\n\nThe upstream source repository is:\n\n- `https://github.com/igapyon/mikuscore`\n\n## Porting Policy\n\n- Keep Java package names under `jp.igapyon.mikuscore`.\n- Respect upstream file boundaries and responsibility splits as much as practical.\n- Prefer names that are easy to map back to upstream files and `camelCase` methods.\n- Do not over-optimize for modern Java style when it harms migration traceability.\n- Keep upstream-derived behavior separate from Java-side original extensions.\n- Keep MusicXML as the semantic anchor for score data.\n- Treat VSQX as an explicit initial-scope exclusion, not as an untracked missing feature.\n\n## Build\n\nPrimary verification command:\n\n```sh\nmvn test\n```\n\nPackage command:\n\n```sh\nmvn package\n```\n\nRuntime artifact:\n\n- `target/mikuscore.jar`\n- `target/mikuscore-dist.zip`\n\nExpected execution path:\n\n```sh\njava -jar target/mikuscore.jar --help\n```\n\nRelease asset workflow:\n\n- pushing a `v*` tag, for example `v0.5.0`, builds the CLI runtime and attaches release assets to the matching GitHub Release\n- attached files are `mikuscore-\u003cversion\u003e.jar` and `mikuscore-sources-\u003cversion\u003e.jar`\n- the Maven version is kept aligned with the upstream Node.js package version\n\n## CLI\n\nThe current Java CLI is only a foundation entrypoint.\nProduct commands are added through straight conversion from upstream `mikuscore`.\n\nCurrent foundation commands:\n\n- `--help`\n- `--version`\n- `convert --from musicxml --to musicxml [--in \u003cfile\u003e|-] [--out \u003cfile\u003e|-]`\n- `convert --from abc --to musicxml [--in \u003cfile\u003e|-] [--out \u003cfile\u003e|-]`\n- `state summarize [--in \u003cfile\u003e|-]`\n- `state inspect-measure --measure \u003cnumber\u003e [--in \u003cfile\u003e|-]`\n- `state validate-command --command \u003cjson\u003e [--in \u003cfile\u003e|-]`\n- `state apply-command --command \u003cjson\u003e [--in \u003cfile\u003e|-] [--out \u003cfile\u003e|-]`\n- `state diff --before \u003cfile\u003e --after \u003cfile\u003e`\n\nThe current `state validate-command` / `state apply-command` slice supports the upstream basic command catalog for MusicXML text input:\n\n- `change_to_pitch`\n- `change_duration`\n- `insert_note_after`\n- `delete_note`\n- `split_note`\n- `ui_noop`\n\nThis is still a partial core migration. Timing-sensitive parity such as underfull validation and rest consume / fill behavior is tracked in `docs/upstream-followup-log.md`.\n\nCurrent MusicXML I/O support also includes a Java `MusicXmlIo` normalization subset for imported MusicXML text: parse / serialize / pretty-print, part-list / part id repair, tuplet notation enrichment, final right barline repair, and explicit implicit-beam generation.\n\nMXL container support is available through the Java `MxlIo` slice for `META-INF/container.xml` based MusicXML extraction, fallback `.musicxml` / `.xml` extraction, and `score.musicxml` MXL encoding.\n\nThe first `convert` slice is intentionally narrow and follows the latest upstream CLI taxonomy while Java format conversion is still partial:\n\n- stdin / stdout MusicXML text pass-through\n- `.musicxml` / `.xml` file input and output\n- `.mxl` file input decoded to MusicXML text\n- `.mxl` file output encoded from MusicXML text\n- first ABC text to MusicXML conversion slice for basic headers, notes, rests, chords, tuplets, grace groups, overlay voices, basic / standard-shorthand / prefixed decorations, richer decoration aliases, accidental annotations, navigation / wedge / dynamics decorations, overfull compatibility reflow diagnostics, repeat / ending metadata, tie handoff, broken rhythm / slur handoff, barline-separated measures, and initial MusicXML -\u003e ABC -\u003e MusicXML fixture roundtrip coverage\n- unsupported conversion pairs return usage error status `2`\n\nPlanned upstream command families:\n\n- `convert --from ... --to ...`\n- `render svg` (pending; upstream currently depends on `verovio.js` browser runtime)\n- `state summarize`\n- `state inspect-measure`\n- `state validate-command`\n- `state apply-command`\n- `state diff`\n\n## Development Docs\n\nSuggested order:\n\n1. `docs/remaining-migration-items.md`\n2. `docs/miku-soft-30-straight-conversion-v20260425.md`\n3. `docs/upstream-class-mapping.md`\n4. `docs/upstream-test-mapping.md`\n5. `docs/upstream-cli-mapping.md`\n6. `docs/upstream-followup-log.md`\n\nTracking flow:\n\n1. Check current scope and status in `docs/remaining-migration-items.md`\n2. Find the matching Java classes in `docs/upstream-class-mapping.md`\n3. Find the matching tests in `docs/upstream-test-mapping.md`\n4. Find CLI correspondence in `docs/upstream-cli-mapping.md`\n5. Record unresolved upstream or parity items in `docs/upstream-followup-log.md`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figapyon%2Fmikuscore-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Figapyon%2Fmikuscore-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figapyon%2Fmikuscore-java/lists"}