portlight 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. portlight-1.0.0/.github/workflows/ci.yml +44 -0
  2. portlight-1.0.0/.github/workflows/pages.yml +50 -0
  3. portlight-1.0.0/.github/workflows/publish.yml +31 -0
  4. portlight-1.0.0/.github/workflows/release-binaries.yml +80 -0
  5. portlight-1.0.0/.gitignore +20 -0
  6. portlight-1.0.0/CHANGELOG.md +27 -0
  7. portlight-1.0.0/LICENSE +21 -0
  8. portlight-1.0.0/PKG-INFO +196 -0
  9. portlight-1.0.0/README.es.md +173 -0
  10. portlight-1.0.0/README.fr.md +173 -0
  11. portlight-1.0.0/README.hi.md +173 -0
  12. portlight-1.0.0/README.it.md +173 -0
  13. portlight-1.0.0/README.ja.md +173 -0
  14. portlight-1.0.0/README.md +173 -0
  15. portlight-1.0.0/README.pt-BR.md +173 -0
  16. portlight-1.0.0/README.zh.md +173 -0
  17. portlight-1.0.0/SCORECARD.md +49 -0
  18. portlight-1.0.0/SECURITY.md +35 -0
  19. portlight-1.0.0/SHIP_GATE.md +82 -0
  20. portlight-1.0.0/artifacts/balance/balance-report.json +328 -0
  21. portlight-1.0.0/artifacts/balance/balance-report.md +52 -0
  22. portlight-1.0.0/artifacts/stress/stress-report.json +97 -0
  23. portlight-1.0.0/artifacts/stress/stress-report.md +18 -0
  24. portlight-1.0.0/docs/ALPHA_STATUS.md +80 -0
  25. portlight-1.0.0/docs/CAREER_PATHS.md +145 -0
  26. portlight-1.0.0/docs/COMMANDS.md +227 -0
  27. portlight-1.0.0/docs/EXAMPLE_RUNS.md +160 -0
  28. portlight-1.0.0/docs/FIRST_VOYAGE.md +143 -0
  29. portlight-1.0.0/docs/KNOWN_ISSUES.md +78 -0
  30. portlight-1.0.0/docs/RELEASE_NOTES_ALPHA.md +95 -0
  31. portlight-1.0.0/docs/START_HERE.md +116 -0
  32. portlight-1.0.0/docs/WHY_PORTLIGHT.md +54 -0
  33. portlight-1.0.0/pyproject.toml +39 -0
  34. portlight-1.0.0/site/astro.config.mjs +29 -0
  35. portlight-1.0.0/site/package-lock.json +7941 -0
  36. portlight-1.0.0/site/package.json +20 -0
  37. portlight-1.0.0/site/src/content/docs/handbook/architecture.md +61 -0
  38. portlight-1.0.0/site/src/content/docs/handbook/career-paths.md +58 -0
  39. portlight-1.0.0/site/src/content/docs/handbook/commands.md +72 -0
  40. portlight-1.0.0/site/src/content/docs/handbook/getting-started.md +64 -0
  41. portlight-1.0.0/site/src/content/docs/handbook/index.md +32 -0
  42. portlight-1.0.0/site/src/content/docs/handbook/trading.md +63 -0
  43. portlight-1.0.0/site/src/content.config.ts +4 -0
  44. portlight-1.0.0/site/src/pages/index.astro +33 -0
  45. portlight-1.0.0/site/src/site-config.ts +52 -0
  46. portlight-1.0.0/site/src/styles/global.css +3 -0
  47. portlight-1.0.0/site/src/styles/starlight-custom.css +11 -0
  48. portlight-1.0.0/site/tsconfig.json +5 -0
  49. portlight-1.0.0/src/portlight/__init__.py +3 -0
  50. portlight-1.0.0/src/portlight/__main__.py +5 -0
  51. portlight-1.0.0/src/portlight/app/__init__.py +1 -0
  52. portlight-1.0.0/src/portlight/app/cli.py +809 -0
  53. portlight-1.0.0/src/portlight/app/formatting.py +172 -0
  54. portlight-1.0.0/src/portlight/app/session.py +706 -0
  55. portlight-1.0.0/src/portlight/app/views.py +1456 -0
  56. portlight-1.0.0/src/portlight/balance/__init__.py +1 -0
  57. portlight-1.0.0/src/portlight/balance/aggregates.py +160 -0
  58. portlight-1.0.0/src/portlight/balance/collectors.py +210 -0
  59. portlight-1.0.0/src/portlight/balance/policies.py +641 -0
  60. portlight-1.0.0/src/portlight/balance/reporting.py +241 -0
  61. portlight-1.0.0/src/portlight/balance/runner.py +190 -0
  62. portlight-1.0.0/src/portlight/balance/scenarios.py +77 -0
  63. portlight-1.0.0/src/portlight/balance/types.py +202 -0
  64. portlight-1.0.0/src/portlight/content/__init__.py +1 -0
  65. portlight-1.0.0/src/portlight/content/campaign.py +386 -0
  66. portlight-1.0.0/src/portlight/content/contracts.py +256 -0
  67. portlight-1.0.0/src/portlight/content/goods.py +14 -0
  68. portlight-1.0.0/src/portlight/content/infrastructure.py +442 -0
  69. portlight-1.0.0/src/portlight/content/ports.py +178 -0
  70. portlight-1.0.0/src/portlight/content/routes.py +47 -0
  71. portlight-1.0.0/src/portlight/content/ships.py +68 -0
  72. portlight-1.0.0/src/portlight/content/world.py +81 -0
  73. portlight-1.0.0/src/portlight/engine/__init__.py +1 -0
  74. portlight-1.0.0/src/portlight/engine/campaign.py +1297 -0
  75. portlight-1.0.0/src/portlight/engine/captain_identity.py +246 -0
  76. portlight-1.0.0/src/portlight/engine/contracts.py +577 -0
  77. portlight-1.0.0/src/portlight/engine/economy.py +234 -0
  78. portlight-1.0.0/src/portlight/engine/infrastructure.py +1221 -0
  79. portlight-1.0.0/src/portlight/engine/models.py +238 -0
  80. portlight-1.0.0/src/portlight/engine/reputation.py +365 -0
  81. portlight-1.0.0/src/portlight/engine/save.py +728 -0
  82. portlight-1.0.0/src/portlight/engine/voyage.py +409 -0
  83. portlight-1.0.0/src/portlight/receipts/__init__.py +1 -0
  84. portlight-1.0.0/src/portlight/receipts/core.py +45 -0
  85. portlight-1.0.0/src/portlight/receipts/models.py +55 -0
  86. portlight-1.0.0/src/portlight/stress/__init__.py +1 -0
  87. portlight-1.0.0/src/portlight/stress/invariants.py +324 -0
  88. portlight-1.0.0/src/portlight/stress/reporting.py +98 -0
  89. portlight-1.0.0/src/portlight/stress/runner.py +157 -0
  90. portlight-1.0.0/src/portlight/stress/scenarios.py +148 -0
  91. portlight-1.0.0/src/portlight/stress/types.py +78 -0
  92. portlight-1.0.0/tests/__init__.py +0 -0
  93. portlight-1.0.0/tests/balance/__init__.py +0 -0
  94. portlight-1.0.0/tests/balance/test_captain_parity.py +104 -0
  95. portlight-1.0.0/tests/balance/test_finance_infra.py +77 -0
  96. portlight-1.0.0/tests/balance/test_scenarios.py +130 -0
  97. portlight-1.0.0/tests/balance/test_victory_paths.py +98 -0
  98. portlight-1.0.0/tests/stress/__init__.py +0 -0
  99. portlight-1.0.0/tests/stress/test_campaign_under_stress.py +227 -0
  100. portlight-1.0.0/tests/stress/test_invariants.py +438 -0
  101. portlight-1.0.0/tests/stress/test_save_load_crisis.py +395 -0
  102. portlight-1.0.0/tests/stress/test_scenarios.py +133 -0
  103. portlight-1.0.0/tests/test_brokers_licenses.py +562 -0
  104. portlight-1.0.0/tests/test_campaign.py +1280 -0
  105. portlight-1.0.0/tests/test_captain_identity.py +351 -0
  106. portlight-1.0.0/tests/test_contracts.py +740 -0
  107. portlight-1.0.0/tests/test_credit.py +431 -0
  108. portlight-1.0.0/tests/test_depth.py +324 -0
  109. portlight-1.0.0/tests/test_economy.py +234 -0
  110. portlight-1.0.0/tests/test_infrastructure.py +516 -0
  111. portlight-1.0.0/tests/test_insurance.py +458 -0
  112. portlight-1.0.0/tests/test_receipts.py +85 -0
  113. portlight-1.0.0/tests/test_reputation.py +475 -0
  114. portlight-1.0.0/tests/test_save.py +90 -0
  115. portlight-1.0.0/tests/test_session.py +236 -0
  116. portlight-1.0.0/tests/test_views.py +248 -0
  117. portlight-1.0.0/tests/test_voyage.py +146 -0
  118. portlight-1.0.0/tests/test_world.py +82 -0
  119. portlight-1.0.0/tools/run_balance.py +123 -0
  120. portlight-1.0.0/tools/run_stress.py +73 -0
  121. portlight-1.0.0/verify.sh +26 -0
@@ -0,0 +1,44 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - 'src/**'
8
+ - 'tests/**'
9
+ - 'pyproject.toml'
10
+ - '.github/workflows/ci.yml'
11
+ pull_request:
12
+ branches: [main]
13
+ paths:
14
+ - 'src/**'
15
+ - 'tests/**'
16
+ - 'pyproject.toml'
17
+ - '.github/workflows/ci.yml'
18
+ workflow_dispatch:
19
+
20
+ concurrency:
21
+ group: ${{ github.workflow }}-${{ github.ref }}
22
+ cancel-in-progress: true
23
+
24
+ jobs:
25
+ test:
26
+ runs-on: ubuntu-latest
27
+ strategy:
28
+ matrix:
29
+ python-version: ['3.11', '3.12']
30
+ steps:
31
+ - uses: actions/checkout@v4
32
+
33
+ - uses: actions/setup-python@v5
34
+ with:
35
+ python-version: ${{ matrix.python-version }}
36
+
37
+ - name: Install dependencies
38
+ run: pip install -e ".[dev]" ruff
39
+
40
+ - name: Lint
41
+ run: ruff check src/ tests/
42
+
43
+ - name: Test
44
+ run: pytest tests/ -x -q
@@ -0,0 +1,50 @@
1
+ name: Deploy Pages
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - 'site/**'
8
+ - '.github/workflows/pages.yml'
9
+ workflow_dispatch:
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ permissions:
16
+ contents: read
17
+ pages: write
18
+ id-token: write
19
+
20
+ jobs:
21
+ build:
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+
26
+ - uses: actions/setup-node@v4
27
+ with:
28
+ node-version: 22
29
+
30
+ - name: Install site dependencies
31
+ working-directory: site
32
+ run: npm ci
33
+
34
+ - name: Build site
35
+ working-directory: site
36
+ run: npm run build
37
+
38
+ - uses: actions/upload-pages-artifact@v3
39
+ with:
40
+ path: site/dist
41
+
42
+ deploy:
43
+ needs: build
44
+ runs-on: ubuntu-latest
45
+ environment:
46
+ name: github-pages
47
+ url: ${{ steps.deployment.outputs.page_url }}
48
+ steps:
49
+ - id: deployment
50
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,31 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ concurrency:
8
+ group: ${{ github.workflow }}-${{ github.ref }}
9
+ cancel-in-progress: true
10
+
11
+ jobs:
12
+ publish:
13
+ runs-on: ubuntu-latest
14
+ environment: pypi
15
+ permissions:
16
+ id-token: write
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.12"
23
+
24
+ - name: Install build tools
25
+ run: pip install build
26
+
27
+ - name: Build package
28
+ run: python -m build
29
+
30
+ - name: Publish to PyPI
31
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,80 @@
1
+ name: Release Binaries
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ env:
9
+ TOOL_NAME: portlight
10
+ ENTRYPOINT: src/portlight/__main__.py
11
+
12
+ concurrency:
13
+ group: ${{ github.workflow }}-${{ github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ build:
18
+ strategy:
19
+ matrix:
20
+ include:
21
+ - os: ubuntu-latest
22
+ target: linux-x64
23
+ ext: ""
24
+ - os: macos-latest
25
+ target: darwin-arm64
26
+ ext: ""
27
+ - os: windows-latest
28
+ target: win-x64
29
+ ext: ".exe"
30
+ runs-on: ${{ matrix.os }}
31
+ steps:
32
+ - uses: actions/checkout@v4
33
+
34
+ - uses: astral-sh/setup-uv@v3
35
+
36
+ - run: uv python install 3.12
37
+
38
+ - run: uv venv
39
+
40
+ - name: Install dependencies + PyInstaller
41
+ run: uv pip install . "pyinstaller>=6.9.0"
42
+
43
+ - name: Build binary
44
+ shell: bash
45
+ run: |
46
+ VERSION=${GITHUB_REF_NAME#v}
47
+ uv run pyinstaller --onefile --name "${{ env.TOOL_NAME }}" --console \
48
+ --collect-submodules rich \
49
+ "${{ env.ENTRYPOINT }}"
50
+ OUTNAME="${{ env.TOOL_NAME }}-${VERSION}-${{ matrix.target }}${{ matrix.ext }}"
51
+ mv "dist/${{ env.TOOL_NAME }}${{ matrix.ext }}" "dist/${OUTNAME}"
52
+ echo "ASSET_NAME=${OUTNAME}" >> "$GITHUB_ENV"
53
+
54
+ - uses: actions/upload-artifact@v4
55
+ with:
56
+ name: binary-${{ matrix.target }}
57
+ path: dist/${{ env.ASSET_NAME }}
58
+
59
+ release:
60
+ needs: build
61
+ runs-on: ubuntu-latest
62
+ permissions:
63
+ contents: write
64
+ steps:
65
+ - uses: actions/download-artifact@v4
66
+ with:
67
+ path: artifacts
68
+ merge-multiple: true
69
+
70
+ - name: Generate checksums
71
+ shell: bash
72
+ run: |
73
+ VERSION=${GITHUB_REF_NAME#v}
74
+ cd artifacts
75
+ sha256sum * > "checksums-${VERSION}.txt"
76
+ cat "checksums-${VERSION}.txt"
77
+
78
+ - uses: softprops/action-gh-release@v2
79
+ with:
80
+ files: artifacts/*
@@ -0,0 +1,20 @@
1
+ __pycache__/
2
+ *.pyc
3
+ *.pyo
4
+ *.egg-info/
5
+ dist/
6
+ build/
7
+ .eggs/
8
+ *.egg
9
+ .pytest_cache/
10
+ .mypy_cache/
11
+ .venv/
12
+ venv/
13
+ *.swp
14
+ *.swo
15
+ .DS_Store
16
+ saves/
17
+ site/.astro/
18
+ site/dist/
19
+ site/node_modules/
20
+ .polyglot-cache.json
@@ -0,0 +1,27 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/).
7
+
8
+ ## [0.1.0-alpha] - 2026-03-20
9
+
10
+ ### Added
11
+
12
+ - **Economy** — scarcity-driven pricing across 10 ports, 8 goods, 17 routes with flood penalty and market shocks
13
+ - **Voyages** — multi-day travel with storms, pirates, inspections, provisions, hull, and crew
14
+ - **Captain identity** — merchant, smuggler, navigator with 8-20% pricing gaps and distinct access profiles
15
+ - **Contracts** — 6 families with trust/standing gates, provenance-validated delivery, deadline tracking
16
+ - **Reputation** — regional standing, customs heat, commercial trust, multi-axis access model
17
+ - **Infrastructure** — warehouses (3 tiers), broker offices (2 tiers × 3 regions), 5 licenses with real upkeep
18
+ - **Insurance** — hull, cargo, contract guarantee policies with heat surcharges and claim resolution
19
+ - **Credit** — 3 tiers with interest accrual, payment deadlines, default consequences
20
+ - **Campaign** — 27 milestones, 7 career profile tags, 4 victory paths with diagnostics
21
+ - **Save/load** — full compound state round-trip (economy + contracts + infrastructure + insurance + credit + campaign)
22
+ - **CLI** — 30 commands via Typer with Rich rendering, welcome screen, contextual hints, grouped guide
23
+ - **Onboarding** — welcome view, hint system, flood explanation, contract deadline context, daily upkeep display
24
+ - **Balance harness** — 7 policy bots, 7 scenario packs, structured JSON/markdown reporting
25
+ - **Stress testing** — 14 cross-system invariants, 9 compound stress scenarios, trace recording
26
+ - **Documentation** — README, START_HERE, FIRST_VOYAGE, COMMANDS, CAREER_PATHS, EXAMPLE_RUNS, ALPHA_STATUS, KNOWN_ISSUES, RELEASE_NOTES
27
+ - 609 tests across 24 files
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 mcp-tool-shop
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,196 @@
1
+ Metadata-Version: 2.4
2
+ Name: portlight
3
+ Version: 1.0.0
4
+ Summary: Trade-first maritime strategy CLI — route arbitrage, contracts, infrastructure, finance, and commercial reputation across a living regional economy
5
+ Author-email: mcp-tool-shop <64996768+mcp-tool-shop@users.noreply.github.com>
6
+ License-Expression: MIT
7
+ License-File: LICENSE
8
+ Keywords: cli,game,maritime,strategy,trading
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Environment :: Console
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Topic :: Games/Entertainment :: Simulation
16
+ Requires-Python: >=3.11
17
+ Requires-Dist: rich>=13.0
18
+ Requires-Dist: typer>=0.9
19
+ Provides-Extra: dev
20
+ Requires-Dist: pytest-cov>=5.0; extra == 'dev'
21
+ Requires-Dist: pytest>=8.0; extra == 'dev'
22
+ Description-Content-Type: text/markdown
23
+
24
+ <p align="center">
25
+ <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
26
+ </p>
27
+
28
+ <p align="center">
29
+ <img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/portlight/readme.png" width="800" alt="Portlight">
30
+ </p>
31
+
32
+ <p align="center">
33
+ <a href="https://github.com/mcp-tool-shop-org/portlight/actions"><img src="https://github.com/mcp-tool-shop-org/portlight/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
34
+ <a href="https://github.com/mcp-tool-shop-org/portlight/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT License"></a>
35
+ <a href="https://mcp-tool-shop-org.github.io/portlight/"><img src="https://img.shields.io/badge/docs-landing_page-blue" alt="Landing Page"></a>
36
+ </p>
37
+
38
+ A trade-first maritime strategy CLI where you build a merchant career through route arbitrage, contracts, infrastructure, finance, and commercial reputation across a living regional economy.
39
+
40
+ ## Why Portlight
41
+
42
+ Most trading games flatten trade into a number that goes up. Portlight treats trade as a commercial discipline:
43
+
44
+ - **Prices react to your trades.** Dump grain at a port and the price crashes. Every sale shifts the local market.
45
+ - **Ports have real economic identities.** Porto Novo produces grain cheaply. Al-Manar consumes silk hungrily. These aren't random — they're structural.
46
+ - **Voyages carry risk.** Storms, pirates, inspections. Your provisions, hull, and crew matter.
47
+ - **Contracts require proof.** Deliver the right goods to the right port with tracked provenance. No faking it.
48
+ - **Infrastructure changes how you trade.** Warehouses let you stage cargo. Brokers improve contract quality. Licenses unlock premium access.
49
+ - **Finance is leverage with teeth.** Credit lets you move faster. Default, and doors close.
50
+ - **The game reads what you built.** Your trade history, infrastructure, reputation, and routes form a career profile. The game tells you what kind of trade house you actually are.
51
+
52
+ ## The Core Loop
53
+
54
+ 1. Inspect the market — find what's cheap here and expensive elsewhere
55
+ 2. Buy cargo — load your hold
56
+ 3. Sail — cross routes under weather, crew, and provision pressure
57
+ 4. Sell — earn margin, shift the local market
58
+ 5. Reinvest — upgrade your ship, lease a warehouse, open a broker office
59
+ 6. Build access — earn trust, reduce heat, unlock contracts and licenses
60
+ 7. Pursue a commercial destiny — four distinct victory paths based on what you actually built
61
+
62
+ ## Quick Start
63
+
64
+ ```bash
65
+ # Install
66
+ pip install -e ".[dev]"
67
+
68
+ # Start a new game
69
+ portlight new "Captain Hawk" --type merchant
70
+
71
+ # Look at what's for sale
72
+ portlight market
73
+
74
+ # Buy cheap goods
75
+ portlight buy grain 10
76
+
77
+ # Check available routes
78
+ portlight routes
79
+
80
+ # Sail to where grain sells high
81
+ portlight sail al_manar
82
+
83
+ # Advance through the voyage
84
+ portlight advance
85
+
86
+ # Sell at destination
87
+ portlight sell grain 10
88
+
89
+ # See your trade history
90
+ portlight ledger
91
+
92
+ # Check your career progress
93
+ portlight milestones
94
+ ```
95
+
96
+ See [docs/START_HERE.md](docs/START_HERE.md) for a guided first session and [docs/FIRST_VOYAGE.md](docs/FIRST_VOYAGE.md) for a detailed early-game walkthrough.
97
+
98
+ ## Captain Types
99
+
100
+ | Captain | Identity | Edge | Trade-off |
101
+ |---------|----------|------|-----------|
102
+ | **Merchant** | Licensed trader, Mediterranean base | Better prices, lower inspection rates, trust grows faster | No black market access |
103
+ | **Smuggler** | Discreet operator, West Africa base | Black market access, luxury margins, contraband trade | Higher heat, more inspections |
104
+ | **Navigator** | Deep-water explorer, Mediterranean base | Faster ships, longer range, East Indies access early | Weaker initial commercial standing |
105
+
106
+ ## Systems
107
+
108
+ **Economy** — Scarcity-driven pricing across 10 ports, 8 goods, 17 routes. Flood penalties punish dumping. Market shocks create regional opportunities.
109
+
110
+ **Voyages** — Multi-day travel with weather events, pirate encounters, inspections. Provisions, hull, and crew are real resources.
111
+
112
+ **Captains** — Three distinct archetypes with 8-20% pricing gaps, unique starting positions, and different access profiles.
113
+
114
+ **Contracts** — Six contract families gated by trust and standing. Provenance-validated delivery. Real deadlines with real consequences.
115
+
116
+ **Reputation** — Regional standing, port-specific reputation, customs heat, and commercial trust. A multi-axis access model that opens and closes doors.
117
+
118
+ **Infrastructure** — Warehouses (3 tiers), broker offices (2 tiers across 3 regions), and 5 purchasable licenses. Each changes trade timing, scale, or access.
119
+
120
+ **Insurance** — Hull, cargo, and contract guarantee policies. Heat surcharges. Claim resolution with denial conditions.
121
+
122
+ **Credit** — Three tiers of credit with interest accrual, payment deadlines, and default consequences. Leverage with real risk.
123
+
124
+ **Career** — 27 milestones across 6 families. Career profile interpretation (primary/secondary/emerging tags). Four victory paths: Lawful Trade House, Shadow Network, Oceanic Reach, and Commercial Empire.
125
+
126
+ ## Victory Paths
127
+
128
+ - **Lawful Trade House** — Disciplined legitimacy. High trust, premium contracts, clean reputation, infrastructure breadth.
129
+ - **Shadow Network** — Profitable discreet trade. Luxury margins under scrutiny, heat management, resilient operations.
130
+ - **Oceanic Reach** — Long-haul commercial power. East Indies access, distant infrastructure, premium route mastery.
131
+ - **Commercial Empire** — Integrated multi-region operation. Infrastructure in every region, diversified revenue, financial leverage.
132
+
133
+ See [docs/CAREER_PATHS.md](docs/CAREER_PATHS.md) for detailed player-facing descriptions.
134
+
135
+ ## Command Reference
136
+
137
+ Run `portlight guide` in-game for a grouped command reference, or see [docs/COMMANDS.md](docs/COMMANDS.md).
138
+
139
+ | Group | Commands |
140
+ |-------|----------|
141
+ | Trading | `market`, `buy`, `sell`, `cargo` |
142
+ | Navigation | `routes`, `sail`, `advance`, `port`, `provision`, `repair`, `hire` |
143
+ | Contracts | `contracts`, `accept`, `obligations`, `abandon` |
144
+ | Infrastructure | `warehouse`, `office`, `license` |
145
+ | Finance | `insure`, `credit` |
146
+ | Career | `captain`, `reputation`, `milestones`, `status`, `ledger`, `shipyard` |
147
+ | System | `save`, `load`, `guide` |
148
+
149
+ ## Alpha Status
150
+
151
+ Portlight is in alpha. The core systems are complete and stress-tested, but balance is actively being tuned.
152
+
153
+ **What's solid:**
154
+ - All systems functional end-to-end
155
+ - 609 tests across 24 files
156
+ - 14 cross-system invariants enforced under 9 compound stress scenarios
157
+ - Balance harness with 7 policy bots across 7 scenario packs
158
+
159
+ **What's being tuned:**
160
+ - Smuggler scaling (currently under-performing on ship progression)
161
+ - Mediterranean route concentration (Porto Novo / Silva Bay dominates traffic)
162
+ - Contract completion rates (delivery logic gaps in automated runs)
163
+ - Insurance adoption (currently near zero in simulated play)
164
+
165
+ See [docs/ALPHA_STATUS.md](docs/ALPHA_STATUS.md) for details and [docs/KNOWN_ISSUES.md](docs/KNOWN_ISSUES.md) for specific items.
166
+
167
+ ## Security and Data
168
+
169
+ Portlight is a **local-only CLI game**. It makes zero network connections during gameplay. Data touched: local save files (`saves/`) and report artifacts (`artifacts/`), all JSON on the local filesystem. No secrets, credentials, telemetry, or remote services. No elevated permissions required. See [SECURITY.md](SECURITY.md) for the full policy.
170
+
171
+ ## Development
172
+
173
+ ```bash
174
+ # Install with dev dependencies
175
+ pip install -e ".[dev]"
176
+
177
+ # Run tests
178
+ pytest
179
+
180
+ # Run balance simulation
181
+ python tools/run_balance.py
182
+
183
+ # Run stress tests
184
+ python tools/run_stress.py
185
+
186
+ # Lint
187
+ ruff check src/ tests/
188
+ ```
189
+
190
+ ## License
191
+
192
+ MIT
193
+
194
+ ---
195
+
196
+ Built by <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
@@ -0,0 +1,173 @@
1
+ <p align="center">
2
+ <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.md">English</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
3
+ </p>
4
+
5
+ <p align="center">
6
+ <img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/portlight/readme.png" width="400" alt="Portlight">
7
+ </p>
8
+
9
+ <p align="center">
10
+ <a href="https://github.com/mcp-tool-shop-org/portlight/actions"><img src="https://github.com/mcp-tool-shop-org/portlight/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
11
+ <a href="https://github.com/mcp-tool-shop-org/portlight/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT License"></a>
12
+ <a href="https://mcp-tool-shop-org.github.io/portlight/"><img src="https://img.shields.io/badge/docs-landing_page-blue" alt="Landing Page"></a>
13
+ </p>
14
+
15
+ Una estrategia marítima centrada en el comercio, donde construyes una carrera como comerciante a través de la optimización de rutas, contratos, infraestructura, finanzas y reputación comercial en una economía regional dinámica.
16
+
17
+ ## ¿Por qué Portlight?
18
+
19
+ La mayoría de los juegos de comercio simplifican el comercio a un número que simplemente aumenta. Portlight trata el comercio como una disciplina comercial:
20
+
21
+ - **Los precios reaccionan a tus transacciones.** Si vendes grandes cantidades de grano en un puerto, el precio se desploma. Cada venta altera el mercado local.
22
+ - **Los puertos tienen identidades económicas reales.** Porto Novo produce grano a bajo costo. Al-Manar consume seda con avidez. Estas características no son aleatorias, sino estructurales.
23
+ - **Los viajes implican riesgos.** Tormentas, piratas, inspecciones. Tus provisiones, el casco y la tripulación son importantes.
24
+ - **Los contratos requieren pruebas.** Debes entregar los productos correctos en el puerto correcto, con un registro de procedencia verificable. No se permiten falsificaciones.
25
+ - **La infraestructura cambia la forma en que operas.** Los almacenes te permiten almacenar mercancías. Los intermediarios mejoran la calidad de los contratos. Las licencias desbloquean acceso premium.
26
+ - **El crédito es una herramienta poderosa, pero con riesgos.** El crédito te permite actuar más rápido. Si incumples, perderás acceso a él.
27
+ - **El juego evalúa lo que has construido.** Tu historial comercial, infraestructura, reputación y rutas forman un perfil de carrera. El juego te indica qué tipo de empresa comercial eres realmente.
28
+
29
+ ## El Ciclo Principal
30
+
31
+ 1. Analiza el mercado: encuentra qué productos son baratos aquí y caros en otro lugar.
32
+ 2. Compra mercancías: carga tu bodega.
33
+ 3. Navega: atraviesa rutas bajo la presión del clima, la tripulación y las provisiones.
34
+ 4. Vende: obtén ganancias, altera el mercado local.
35
+ 5. Reinvierta: mejora tu barco, alquila un almacén, abre una oficina de intermediarios.
36
+ 6. Construye acceso: gana confianza, reduce la atención negativa, desbloquea contratos y licencias.
37
+ 7. Persigue un destino comercial: cuatro caminos distintos hacia la victoria, basados en lo que realmente has construido.
38
+
39
+ ## Guía de inicio rápido
40
+
41
+ ```bash
42
+ # Install
43
+ pip install -e ".[dev]"
44
+
45
+ # Start a new game
46
+ portlight new "Captain Hawk" --type merchant
47
+
48
+ # Look at what's for sale
49
+ portlight market
50
+
51
+ # Buy cheap goods
52
+ portlight buy grain 10
53
+
54
+ # Check available routes
55
+ portlight routes
56
+
57
+ # Sail to where grain sells high
58
+ portlight sail al_manar
59
+
60
+ # Advance through the voyage
61
+ portlight advance
62
+
63
+ # Sell at destination
64
+ portlight sell grain 10
65
+
66
+ # See your trade history
67
+ portlight ledger
68
+
69
+ # Check your career progress
70
+ portlight milestones
71
+ ```
72
+
73
+ Consulta [docs/START_HERE.md](docs/START_HERE.md) para una primera sesión guiada y [docs/FIRST_VOYAGE.md](docs/FIRST_VOYAGE.md) para una descripción detallada de las primeras etapas del juego.
74
+
75
+ ## Tipos de Capitanes
76
+
77
+ | Capitán | Identidad | Ventaja | Compromiso |
78
+ |---------|----------|------|-----------|
79
+ | **Merchant** | Comerciante con licencia, base en el Mediterráneo | Mejores precios, tasas de inspección más bajas, la confianza crece más rápido. | Sin acceso al mercado negro. |
80
+ | **Smuggler** | Operador discreto, base en África Occidental. | Acceso al mercado negro, márgenes de lujo, comercio de contrabando. | Mayor atención negativa, más inspecciones. |
81
+ | **Navigator** | Explorador de aguas profundas, base en el Mediterráneo. | Barcos más rápidos, mayor alcance, acceso temprano a las Indias Orientales. | Posición comercial inicial más débil. |
82
+
83
+ ## Sistemas
84
+
85
+ **Economía:** Precios determinados por la escasez en 10 puertos, 8 productos, 17 rutas. Las penalizaciones por sobreproducción castigan la venta masiva. Los shocks del mercado crean oportunidades regionales.
86
+
87
+ **Viajes:** Viajes de varios días con eventos climáticos, encuentros con piratas e inspecciones. Las provisiones, el casco y la tripulación son recursos reales.
88
+
89
+ **Capitanes:** Tres arquetipos distintos con diferencias de precios del 8 al 20%, posiciones de inicio únicas y diferentes perfiles de acceso.
90
+
91
+ **Contratos:** Seis familias de contratos bloqueadas por la confianza y la reputación. Entrega con validación de procedencia. Plazos reales con consecuencias reales.
92
+
93
+ **Reputación:** Posición regional, reputación específica de cada puerto, atención de las aduanas y confianza comercial. Un modelo de acceso de múltiples ejes que abre y cierra puertas.
94
+
95
+ **Infraestructura:** Almacenes (3 niveles), oficinas de intermediarios (2 niveles en 3 regiones) y 5 licencias comprables. Cada una cambia el tiempo, la escala o el acceso al comercio.
96
+
97
+ **Seguro:** Pólizas de seguro de casco, carga y garantía de contrato. Cargos por atención negativa. Resolución de reclamaciones con condiciones de denegación.
98
+
99
+ **Crédito:** Tres niveles de crédito con acumulación de intereses, plazos de pago y consecuencias por incumplimiento. Una herramienta poderosa con riesgos reales.
100
+
101
+ **Carrera** — 27 hitos en 6 categorías. Interpretación del perfil de carrera (etiquetas primarias/secundarias/emergentes). Cuatro caminos hacia la victoria: Casa Comercial Legítima, Red de la Sombra, Alcance Oceánico e Imperio Comercial.
102
+
103
+ ## Caminos hacia la Victoria
104
+
105
+ - **Casa Comercial Legítima** — Legitimidad disciplinada. Alta confianza, contratos premium, reputación intachable, amplia infraestructura.
106
+ - **Red de la Sombra** — Comercio discreto y rentable. Márgenes de lujo bajo escrutinio, gestión de riesgos, operaciones resilientes.
107
+ - **Alcance Oceánico** — Poder comercial de largo alcance. Acceso a las Indias Orientales, infraestructura distante, dominio de rutas premium.
108
+ - **Imperio Comercial** — Operación integrada en múltiples regiones. Infraestructura en cada región, diversificación de ingresos, apalancamiento financiero.
109
+
110
+ Consulte [docs/CAREER_PATHS.md](docs/CAREER_PATHS.md) para obtener descripciones detalladas dirigidas al jugador.
111
+
112
+ ## Referencia de Comandos
113
+
114
+ Ejecute `portlight guide` dentro del juego para obtener una referencia de comandos agrupada, o consulte [docs/COMMANDS.md](docs/COMMANDS.md).
115
+
116
+ | Grupo | Comandos |
117
+ |-------|----------|
118
+ | Comercio | `market`, `buy`, `sell`, `cargo` |
119
+ | Navegación | `routes`, `sail`, `advance`, `port`, `provision`, `repair`, `hire` |
120
+ | Contratos | `contracts`, `accept`, `obligations`, `abandon` |
121
+ | Infraestructura | `warehouse`, `office`, `license` |
122
+ | Finanzas | `insure`, `credit` |
123
+ | Carrera | `captain`, `reputation`, `milestones`, `status`, `ledger`, `shipyard` |
124
+ | Sistema | `save`, `load`, `guide` |
125
+
126
+ ## Estado Alpha
127
+
128
+ Portlight está en estado alpha. Los sistemas principales están completos y han sido sometidos a pruebas de estrés, pero el equilibrio se está ajustando activamente.
129
+
130
+ **Lo que está funcionando correctamente:**
131
+ - Todos los sistemas son funcionales de extremo a extremo.
132
+ - 609 pruebas en 24 archivos.
133
+ - 14 invariantes entre sistemas aplicadas bajo 9 escenarios de estrés compuestos.
134
+ - Sistema de equilibrio con 7 bots de política en 7 paquetes de escenarios.
135
+
136
+ **Lo que se está ajustando:**
137
+ - Escalado de contrabandistas (actualmente con un rendimiento inferior en la progresión de la nave).
138
+ - Concentración de rutas en el Mediterráneo (Porto Novo / Silva Bay dominan el tráfico).
139
+ - Tasas de finalización de contratos (fallas en la lógica de entrega en ejecuciones automatizadas).
140
+ - Adopción de seguros (actualmente cercana a cero en pruebas simuladas).
141
+
142
+ Consulte [docs/ALPHA_STATUS.md](docs/ALPHA_STATUS.md) para obtener detalles y [docs/KNOWN_ISSUES.md](docs/KNOWN_ISSUES.md) para obtener información específica.
143
+
144
+ ## Seguridad y Datos
145
+
146
+ Portlight es un juego de **línea de comandos que solo funciona localmente**. No realiza ninguna conexión de red durante el juego. Datos accedidos: archivos de guardado locales (`saves/`) y archivos de informe (`artifacts/`), todos en formato JSON en el sistema de archivos local. No hay secretos, credenciales, telemetría ni servicios remotos. No se requieren permisos elevados. Consulte [SECURITY.md](SECURITY.md) para obtener la política completa.
147
+
148
+ ## Desarrollo
149
+
150
+ ```bash
151
+ # Install with dev dependencies
152
+ pip install -e ".[dev]"
153
+
154
+ # Run tests
155
+ pytest
156
+
157
+ # Run balance simulation
158
+ python tools/run_balance.py
159
+
160
+ # Run stress tests
161
+ python tools/run_stress.py
162
+
163
+ # Lint
164
+ ruff check src/ tests/
165
+ ```
166
+
167
+ ## Licencia
168
+
169
+ MIT
170
+
171
+ ---
172
+
173
+ Desarrollado por <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>