Two poi plugins in one pnpm workspace:
- Ship Info (
poi-plugin-ship-info): the ship information table with filtering, columns, and CSV export. - Navy Staff (
poi-plugin-navy-staff): the sortie/deck planner with its own state, saved file, history, synchronization, and translations.
Current maintainer: かがみ
Original Ship Info authored by Yunze
This is a pnpm workspace for poi plugins:
packages/ship-info/— the publishedpoi-plugin-ship-infoplugin: the ship information table (filtering, columns, CSV export).packages/navy-staff/— the publishedpoi-plugin-navy-staffplugin: the sortie/deck planner, with its own state, saved file and translations.packages/shared/— private, source-only@poi-plugins/sharedmodules bundled into the plugins that use them; never published.tests/,stories/,preview/,shims/,.storybook/and the shared configs live at the repository root.
Navy Staff stores one JSON file per teitoku (member ID): each account's
workspaces, history, and legacy archive live in its own file, with no
per-workspace account binding. The released Ship Info plan is imported once,
while no Navy Staff account file exists yet: the first created account consumes
it, later runs do not re-import, and Ship Info keeps saving its own file with its
legacy planner field untouched.
For the planning, history, synchronization, and sharing workflows, see the Navy Staff interface guide. Ship search supports kana, romaji, and approximate spellings. Shared references have area, list, and grid views; each can be saved as an image using the same read-only content as the decoded share text.
Open Settings → Plugins in poi, find Ship Girls Info or Navy Staff
in the plugin list and click Install. For manual installation, use
Install directly from npm with the full package name
poi-plugin-ship-info or poi-plugin-navy-staff, respectively.
The plugins release independently through pnpm's native versioning, not the
Changesets CLI. Record a change intent with pnpm change, run the Prepare
release workflow, merge the generated Release PR after validation, and let
Publish release publish only the selected verified tarballs. Ordinary pull
request merges never bump or publish. Prepare release also offers a per-selection
beta channel built on pnpm's native lanes (code -> beta -> main or
code -> main); betas publish under the npm beta dist-tag and never become
latest. See docs/releases.md for the workflow, channel
behavior, changelog rules, and external trusted-publishing setup.
Use the Node.js version in .node-version and the pnpm version pinned in
package.json.
npm install --global pnpm@11.20.0
pnpm install --frozen-lockfile
pnpm run check
pnpm test
pnpm run test:browser
pnpm run build
pnpm run build-storybookOptional: pnpm run lint and pnpm run fmt use the Vite+ lint/format tools.
pnpm run build builds every plugin with vp pack (each plugin package owns
its vite.config.ts). pnpm test runs the Vitest suite (vp test run) in
tests/. The tests exercise the real reducers, selectors, CSV builder and file
writer against small fixtures, mocking poi host modules and isolating
persistence boundaries where needed. Separate filesystem tests exercise real
reads and queued writes in temporary directories. Vitest is pinned to the
version bundled by Vite+ (5.0.4) so tsc --noEmit can resolve its types.
The jsdom integration tests render the real table and planner menu with React, Redux, Jotai, and the UI libraries. They cover sorting, filters, column settings, clipboard CSV output, and planner search/selection. Host services and viewport geometry are supplied by test fixtures; these tests do not replace visual checks inside poi.
A second layer runs the Storybook stories as real Chromium tests via Playwright: see docs/browser-testing.md for the commands, the scenario parameters, the coverage matrix and the in-memory host boundaries.
pnpm run pack # packs both plugins into .cache/packages/*.tgz
pnpm run verify:package # checks both packed artifactspnpm run pack runs each plugin's prepack build and writes the tarballs to
.cache/packages/. pnpm run verify:package inspects both tarballs and checks
their manifests (name/version against the source package), compiled entries,
i18n JSON, bundled shared code (no runtime workspace or private-package
references), host external conventions, and runs a controlled load/register/
lifecycle smoke against an isolated temp APPDATA. These checks verify the
produced artifacts and their host boundaries; they are not a live poi
installation.