Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
6b1e0c4
docs: add world lifecycle consolidation plan
Aug 16, 2026
f8d7bf8
docs: define clean-slate dzmm vnext goal
Aug 16, 2026
d22cfdd
docs: lock vnext model evaluation baseline
Aug 16, 2026
401c7be
feat: scaffold dzmm vnext phase zero
Aug 16, 2026
3065fa4
docs: record vnext phase zero evidence
Aug 16, 2026
9bf5f4f
feat: add vnext world aggregate and turns
Aug 16, 2026
d413a87
feat: add vnext model profile probing
Aug 16, 2026
7873689
feat: add vnext desktop vertical slice
Aug 16, 2026
ca82df6
feat: narrate vnext turns through model profiles
Aug 16, 2026
6a021fd
docs: record vnext phase one interim matrix
Aug 16, 2026
cde8ef3
feat: add vnext world lifecycle controls
Aug 16, 2026
cdc3e72
docs: score vnext lifecycle evidence
Aug 16, 2026
abf1f60
feat: add auditable vnext turn rollback
Aug 16, 2026
edf4ac1
feat: expose vnext turn rollback in desktop
Aug 16, 2026
090f315
docs: score vnext rollback evidence
Aug 16, 2026
53250f8
feat: add vnext lore and SillyTavern import
Aug 16, 2026
8e12681
docs: score vnext content evidence
Aug 16, 2026
602a568
feat: import SillyTavern lore from desktop
Aug 16, 2026
cde95ad
docs: score vnext desktop content import
Aug 16, 2026
b53da75
feat: package vnext desktop host sidecar
Aug 16, 2026
2733ca6
docs: record vnext desktop host evidence
Aug 16, 2026
538cfe5
feat: add vnext provider stream decoding
Aug 16, 2026
078c268
feat: stream vnext turns without partial commits
Aug 16, 2026
b92020a
test: add vnext real-model long-play runner
Aug 16, 2026
5c6516e
docs: score vnext real-model long play
Aug 16, 2026
8409b01
test: measure vnext long-play recovery
Aug 16, 2026
86b762b
docs: score vnext long-play performance
Aug 16, 2026
4ccd8c9
feat: add vnext mobile pairing control plane
Aug 16, 2026
e5ec622
docs: record vnext mobile control plane
Aug 16, 2026
2ba5d57
feat(vnext): add narrative ruleset contract
Aug 16, 2026
9e9d565
docs(vnext): record narrative baseline
Aug 16, 2026
bb81a16
feat(vnext): make fog harbor playable on desktop
Aug 16, 2026
be72598
docs(vnext): record fog harbor desktop evidence
Aug 16, 2026
fecce45
test(vnext): record real narrative model play
Aug 16, 2026
79b9722
docs(vnext): score real model narrative evidence
Aug 16, 2026
5d0b6e3
test(vnext): benchmark v2 run recovery
Aug 16, 2026
712f150
docs(vnext): score v2 run recovery
Aug 16, 2026
406500a
docs(vnext): make lorebook and character cards canonical
Aug 16, 2026
30f7aee
feat(vnext): make lorebook and character cards first-class
Aug 16, 2026
b13d169
docs(vnext): record packaged app and dmg smoke evidence
Aug 17, 2026
d914ae6
fix(vnext): require planned choices for narrative state
Aug 17, 2026
d788ad7
docs(vnext): score narrative command authority evidence
Aug 17, 2026
e801bbf
docs(vnext): record Android prototype audit
Aug 17, 2026
0724ca1
feat(vnext): export lorebook as world info
Aug 17, 2026
10be976
feat(vnext): import PNG cards and complete Fog Harbor endings
Aug 17, 2026
7ece48b
docs(vnext): score content and complete Fog Harbor endings
Aug 17, 2026
bce4488
test(vnext): add real-model Fog Harbor matrix runner
Aug 17, 2026
d8d16ae
docs(vnext): record current packaged sidecar smoke
Aug 17, 2026
a93684c
feat(vnext): add safe LAN gameplay host
Aug 17, 2026
653b387
feat(vnext): attach content assets across rulesets
Aug 17, 2026
6c82f35
feat(vnext): expose world content exports
Aug 17, 2026
a8b010a
feat(vnext): support multiple character card assets
Aug 17, 2026
bacbfe9
feat(vnext): add world center lifecycle controls
Aug 17, 2026
eef1186
feat(vnext): edit lorebook through new versions
Aug 17, 2026
ddb8ac2
docs(vnext): separate interoperable cards from narrative rules
Aug 17, 2026
2eb4483
feat(vnext): separate narrative content and add themes
Aug 17, 2026
cea8851
fix(vnext): report narrative model failures
Aug 17, 2026
6609e30
fix(vnext): keep packaged host cold start within readiness gate
Aug 17, 2026
6cb98bd
docs(vnext): record packaged Tauri host boot evidence
Aug 17, 2026
88179c7
feat(vnext): export safe host diagnostics
Aug 17, 2026
a38f1b1
eval(vnext): record huihui schema v3 narrative long play
Aug 17, 2026
12010de
feat(vnext): add Mac mobile pairing controls
Aug 17, 2026
da7c93b
feat(vnext): add Android narrative gameplay client
Aug 17, 2026
5340338
fix(vnext): restrict mobile Host to local networks
Aug 17, 2026
6dfcbc0
feat(vnext): add AI world creation drafts
Aug 17, 2026
2fe94e1
feat(vnext): unify desktop and mobile app icons
Aug 17, 2026
26ec681
feat(vnext): add local host discovery and QR pairing
Aug 17, 2026
4c43edc
feat(vnext): restore latest run after mobile pairing
Aug 17, 2026
36aa58c
feat(vnext): consolidate player-first local host experience
Aug 24, 2026
699b325
fix(mobile): keep model reload setState synchronous
Aug 24, 2026
6ddfd5b
docs(vnext): record qwen new-world player acceptance
Aug 24, 2026
a8fae06
feat(vnext): extend generated campaigns beyond sample arc
Aug 24, 2026
908716b
feat(vnext): clarify legacy storage boundary
Aug 24, 2026
1aa1d4d
docs(vnext): record package gate and goal exit
Aug 24, 2026
3a52ea8
fix(vnext): keep long-run actions visible and clean qwen prose
Aug 24, 2026
e2a8c70
docs(vnext): record goal exit gates
Aug 24, 2026
edb2d71
chore(vnext): prepare controlled dzmm cutover
Aug 29, 2026
cbc20d8
feat(vnext): present unified dzmm product name
Aug 29, 2026
bbbac0b
fix(vnext): align release checks with bundled sidecar
Aug 29, 2026
0dff89c
docs(vnext): record package cutover gate evidence
Aug 29, 2026
710010c
docs(vnext): record package and emulator gate
Aug 29, 2026
895a542
feat(vnext): migrate desktop local storage keys
Aug 29, 2026
c89c501
docs(vnext): record emulator launch evidence
Aug 29, 2026
e12a2c7
fix(vnext): tolerate legacy desktop port during cutover
Aug 29, 2026
7a0862b
fix(vnext): repair renamed legacy migration revision
Aug 29, 2026
87865ab
fix(vnext): persist packaged host logs
Aug 29, 2026
1c98567
docs(vnext): record packaged macos startup gate
Aug 30, 2026
58ae3d6
docs(vnext): record android release emulator gate
Aug 30, 2026
a6c8704
fix(vnext): return actual desktop backend origin
Aug 30, 2026
1c539a6
docs(vnext): update player score after host fix
Aug 30, 2026
6b4a196
docs(vnext): refresh current release gate summary
Aug 30, 2026
7a25ec8
test(vnext): read release workflow as utf8 on windows
Aug 30, 2026
6574b38
docs(vnext): record windows release ci gate
Aug 30, 2026
65e3843
docs(vnext): record android release recovery gate
Aug 30, 2026
2e317ff
docs(vnext): record packaged qwen player loop
Aug 30, 2026
5c38416
docs(vnext): record macos gui observation boundary
Aug 30, 2026
5ef766a
docs(vnext): clarify post-install release gates
Aug 30, 2026
59acf14
docs(vnext): reconcile cutover gate status
Aug 30, 2026
a73bd81
fix(android): suggest host model endpoints
Aug 30, 2026
f2a69f0
docs: record android model endpoint gate
Aug 30, 2026
05f0da8
docs: record android release player journey
Aug 30, 2026
8c2c2a1
docs: record android journey recovery
Aug 30, 2026
28accf9
docs: close android emulator cutover gate
Aug 30, 2026
4e83a10
fix(android): keep operation stages on one line
Aug 30, 2026
6068dbb
docs: include full flutter test evidence
Aug 30, 2026
fa47649
docs: record cutover naming and data boundaries
Aug 30, 2026
64d704f
fix(desktop): show storage boundary on first world entry
Aug 30, 2026
5defa66
docs: add desktop storage boundary evidence
Aug 30, 2026
307d064
docs: record cutover boundary regression
Aug 30, 2026
b30378e
docs: freeze explicit no-migration cutover policy
Aug 30, 2026
966ac26
docs: anchor legacy release archive tag
Aug 30, 2026
421471d
docs: record legacy source restore rehearsal
Aug 30, 2026
9903c05
test: rehearse runtime database restore
Aug 30, 2026
54f9106
docs: record macos gui gate recheck
Aug 30, 2026
612932d
docs: record macos gui permission boundary
Aug 30, 2026
a4056e6
docs: audit release workflow freshness
Aug 30, 2026
5edf0dc
docs: record current candidate package build
Aug 30, 2026
606f6b3
docs: record remote candidate freshness prerequisite
Aug 30, 2026
1e92bd7
docs: add cutover release handoff
Aug 30, 2026
be55237
docs: audit github publication state
Aug 30, 2026
e0bf061
docs: record current release workflow success
Aug 30, 2026
80fd39f
ci: install Linux desktop build dependencies
Aug 30, 2026
7814509
docs: record authorized draft PR checks
Aug 30, 2026
4d62503
docs: refresh release handoff after GitHub authorization
Aug 30, 2026
159d433
fix: align desktop narration with world entities
Aug 30, 2026
549b432
fix: expose generated NPCs in world review
Aug 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
32 changes: 32 additions & 0 deletions .github/workflows/backend-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: backend-ci

on:
push:
branches: [main]
pull_request:

jobs:
test:
runs-on: ubuntu-latest
defaults:
run:
working-directory: vnext/backend
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.13'
cache: pip
cache-dependency-path: vnext/backend/pyproject.toml

- name: install backend dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e '.[dev]'

- name: lint
run: python -m ruff check src tests

- name: test
run: python -m pytest -q
54 changes: 27 additions & 27 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
name: E2E smoke
name: vNext smoke

on:
push:
branches: [main]
pull_request:

jobs:
e2e:
core-and-desktop:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand All @@ -19,34 +19,34 @@ jobs:
with:
node-version: '20.x'

- name: backend deps
working-directory: backend
- uses: dtolnay/rust-toolchain@stable

- name: install Linux desktop build dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libappindicator3-dev \
librsvg2-dev \
patchelf

- name: install vNext backend
working-directory: vnext/backend
run: |
python -m venv .venv
./.venv/bin/pip install --upgrade pip
./.venv/bin/pip install -e ".[dev]"
./.venv/bin/python -m pip install --upgrade pip
./.venv/bin/python -m pip install -e '.[dev]'

- name: frontend deps
working-directory: frontend
run: npm ci || npm install
- name: run vNext core tests
working-directory: vnext/backend
run: ./.venv/bin/python -m pytest -q

- name: install playwright browsers
working-directory: frontend
run: npx playwright install chromium --with-deps
- name: install desktop dependencies
working-directory: vnext/desktop
run: npm ci

- name: run e2e
working-directory: frontend
# Put the backend venv first on PATH so `python e2e/mock_backend.py`
# picks up the right interpreter (with FastAPI / uvicorn installed).
- name: build desktop renderer and Tauri host
working-directory: vnext/desktop
run: |
export PATH="$(pwd)/../backend/.venv/bin:$PATH"
npx playwright test
env:
CI: 'true'

- name: upload playwright report
if: failure()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: frontend/playwright-report/
npm run build
cargo check --manifest-path src-tauri/Cargo.toml
80 changes: 56 additions & 24 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ jobs:
include:
- os: macos-14
label: macos-arm64
artifact_glob: 'frontend/src-tauri/target/release/bundle/dmg/*.dmg'
artifact_glob: 'vnext/desktop/src-tauri/target/release/bundle/dmg/*.dmg'
- os: windows-latest
label: windows-x64
artifact_glob: 'frontend/src-tauri/target/release/bundle/nsis/*.exe'
artifact_glob: 'vnext/desktop/src-tauri/target/release/bundle/nsis/*.exe'

runs-on: ${{ matrix.os }}
name: build (${{ matrix.label }})
Expand All @@ -44,24 +44,24 @@ jobs:
path: |
~/.cargo/registry
~/.cargo/git
frontend/src-tauri/target
key: ${{ matrix.os }}-cargo-${{ hashFiles('frontend/src-tauri/Cargo.lock') }}
vnext/desktop/src-tauri/target
key: ${{ matrix.os }}-cargo-${{ hashFiles('vnext/desktop/src-tauri/Cargo.lock') }}

- name: backend venv + deps
working-directory: backend
working-directory: vnext/backend
shell: bash
run: |
python -m venv .venv
if [[ "${{ runner.os }}" == "Windows" ]]; then
./.venv/Scripts/python -m pip install --upgrade pip
./.venv/Scripts/python -m pip install -e ".[dev]"
./.venv/Scripts/python -m pip install -e ".[dev,package]"
else
./.venv/bin/python -m pip install --upgrade pip
./.venv/bin/python -m pip install -e ".[dev]"
./.venv/bin/python -m pip install -e ".[dev,package]"
fi

- name: backend tests
working-directory: backend
working-directory: vnext/backend
shell: bash
run: |
if [[ "${{ runner.os }}" == "Windows" ]]; then
Expand All @@ -71,29 +71,35 @@ jobs:
fi

- name: build sidecar
working-directory: backend
working-directory: vnext/backend
shell: bash
run: |
if [[ "${{ runner.os }}" == "Windows" ]]; then
./.venv/Scripts/python build_sidecar.py
./.venv/Scripts/python ../packaging/build_backend.py
else
./.venv/bin/python build_sidecar.py
./.venv/bin/python ../packaging/build_backend.py
fi

- name: install frontend deps
working-directory: frontend
- name: install desktop deps
working-directory: vnext/desktop
run: npm ci || npm install

- name: tauri build
working-directory: frontend
run: npm run tauri:build
working-directory: vnext/desktop
shell: bash
run: |
if [[ "${{ runner.os }}" == "Windows" ]]; then
npm run tauri:build:windows
else
npm run tauri:build
fi

- name: smoke artifact (macOS)
if: runner.os == 'macOS'
shell: bash
run: |
set -euo pipefail
DMG=$(find frontend/src-tauri/target/release/bundle/dmg -name '*.dmg' | head -1)
DMG=$(find vnext/desktop/src-tauri/target/release/bundle/dmg -name '*.dmg' | head -1)
if [ -z "$DMG" ]; then
echo "::error::no .dmg found"
exit 1
Expand All @@ -109,21 +115,22 @@ jobs:
hdiutil attach "$DMG" -mountpoint "$MOUNTPOINT" -nobrowse -readonly
trap "hdiutil detach \"$MOUNTPOINT\" -force || true" EXIT

APP=$(find "$MOUNTPOINT" -maxdepth 2 -name 'dzmm.app' -type d | head -1)
APP=$(find "$MOUNTPOINT" -maxdepth 2 -name '*.app' -type d | head -1)
if [ -z "$APP" ]; then
echo "::error::dzmm.app missing from DMG"
exit 1
fi

if [ ! -f "$APP/Contents/MacOS/dzmm" ] && [ ! -f "$APP/Contents/MacOS/app" ]; then
MAIN=$(find "$APP/Contents/MacOS" -maxdepth 1 -type f | head -1)
if [ -z "$MAIN" ]; then
echo "::error::main binary missing in dzmm.app/Contents/MacOS"
ls -la "$APP/Contents/MacOS/" || true
exit 1
fi

BACKEND=$(find "$APP/Contents/Resources" -name 'dzmm-backend' -type f | head -1)
BACKEND=$(find "$APP/Contents/Resources" -name 'dzmm-next-backend' -type f | head -1)
if [ -z "$BACKEND" ]; then
echo "::error::dzmm-backend missing from .app resources"
echo "::error::dzmm-next-backend missing from .app resources"
ls -la "$APP/Contents/Resources/" | head -20
exit 1
fi
Expand All @@ -141,7 +148,7 @@ jobs:
shell: bash
run: |
set -euo pipefail
EXE=$(find frontend/src-tauri/target/release/bundle/nsis -name '*-setup.exe' | head -1)
EXE=$(find vnext/desktop/src-tauri/target/release/bundle/nsis -name '*-setup.exe' | head -1)
if [ -z "$EXE" ]; then
echo "::error::no NSIS .exe found"
exit 1
Expand All @@ -159,8 +166,8 @@ jobs:
head -100 /tmp/nsis_contents.txt
echo "::endgroup::"

if ! grep -q 'dzmm-backend.exe' /tmp/nsis_contents.txt; then
echo "::error::dzmm-backend.exe not found in NSIS installer"
if ! grep -q 'dzmm-next-backend.exe' /tmp/nsis_contents.txt; then
echo "::error::dzmm-next-backend.exe not found in NSIS installer"
exit 1
fi

Expand All @@ -169,7 +176,32 @@ jobs:
exit 1
fi

echo "::notice::EXE smoke OK: $SIZE bytes, dzmm-backend.exe + Python runtime present"
echo "::notice::EXE smoke OK: $SIZE bytes, dzmm-next-backend.exe + Python runtime present"

- name: smoke packaged Local Host sidecar (Windows)
if: runner.os == 'Windows'
shell: bash
run: |
set -euo pipefail
SIDECAR="vnext/desktop/src-tauri/backend-runtime/dzmm-next-backend/dzmm-next-backend.exe"
DATA_DIR="$RUNNER_TEMP/dzmm-next-windows-sidecar"
PORT=18765
mkdir -p "$DATA_DIR"
DZMM_NEXT_DATA_DIR="$DATA_DIR" DZMM_NEXT_PORT="$PORT" "$SIDECAR" >/tmp/dzmm-next-sidecar.log 2>&1 &
PID=$!
trap 'kill "$PID" 2>/dev/null || true' EXIT
for _ in $(seq 1 60); do
if curl --fail --silent "http://127.0.0.1:${PORT}/health" > /tmp/dzmm-next-health.json; then
grep -q '"storage":"local"' /tmp/dzmm-next-health.json
grep -q '"host":"127.0.0.1"' /tmp/dzmm-next-health.json
echo "::notice::Windows packaged sidecar Local Host health OK"
exit 0
fi
sleep 1
done
cat /tmp/dzmm-next-sidecar.log || true
echo "::error::Windows packaged sidecar did not become healthy"
exit 1

- name: upload artifact
uses: actions/upload-artifact@v4
Expand Down
Loading
Loading