Pathfinder Experience App (PXA) — Technical Runbook
1. Scope
This runbook documents operational procedures for the Pathfinder Experience App pipeline:
- Discord ingest
- Canonical vault updates
- Portrait sync
- Quartz publish
- Pathfinder Buddy behavior baseline
- Reaction feedback capture
Primary source vault:
/srv/docs/homelab-vault/pathfinder
Publish staging:
/srv/docs/homelab-vault/pathfinder-publish
Quartz runtime repo:
/home/zack/pathfinder-quartz
2. Daily Operating Flow
Step A — Refresh campaign corpus
Command:
/home/zack/.openclaw/workspace/scripts/discord-export/run_pipeline.sh
Core script:
game_night_refresh.sh
Expected outputs:
- Updated timeline/denizens exports
- Updated session recap docs
- NPC intake sync updates
- Rules index refresh
99_P2E_Workshop/Game_Night_Readiness.md
Step B — Sync portraits (if new media landed)
Primary script:
/home/zack/.openclaw/workspace/scripts/discord-export/sync_npc_portraits.py
Pass-2 helper (inbox stubs + broad mapping):
/home/zack/.openclaw/workspace/scripts/discord-export/pass2_npc_portrait_inbox_sync.py
Expected behavior:
- Pulls avatar files from
_raw/aoa-denizensand_raw/aoa-timeline - Updates/copies portraits into NPC assets path
- Inserts portrait embeds into mapped NPC docs
Step C — Publish
Command:
/home/zack/pathfinder-quartz/scripts/quartz/publish_and_push.sh
Expected behavior:
- Export → validate → deploy → build → git push
content/index.mdregenerated dynamically each run
3. Publish Mapping & IA Rules
Configured remaps (staging-level):
01_Campaigns/Age of Ashes/01_Sessions→01_Sessions01_Campaigns/Age of Ashes/02_NPCs→03_NPCs- Remove
01_Campaignsfrom publish output
Why:
- Preserve canonical source structure in vault.
- Expose clean player-facing structure in public site.
Critical file:
/home/zack/pathfinder-quartz/scripts/quartz/export_publish_set.sh
4. Portrait Link Standards
NPC pages
Assets:
01_Campaigns/Age of Ashes/02_NPCs/_assets/portraits/
Embed (inside NPC markdown):

Character sheets
Assets:
02_Characters/_assets/portraits/
Embed (inside 00_Character_Sheet.md):

Common failure:
./_assets/...used instead of../_assets/...for nested pages.
5. Home Page Freshness
Generator:
/home/zack/pathfinder-quartz/scripts/quartz/generate_home_index.py
Invoked by:
/home/zack/pathfinder-quartz/scripts/quartz/deploy_publish_set.sh
Behavior:
- Builds
content/index.mdfrom current publish content. - Uses template fallback only if generator fails.
Operator check after publish:
- Confirm Home includes latest sessions + current-arc NPC snapshot.
6. Pathfinder Buddy Baseline
Agent:
pathfinder-buddy(Discord-routed)
Workspace:
/home/zack/.openclaw/workspace-p2ebuddy
Vault mount/symlink:
/home/zack/.openclaw/workspace-p2ebuddy/pathfinder→/srv/docs/homelab-vault/pathfinder
Behavior expectations:
- Reads canonical character sheets directly for build/spell queries.
- Avoids asking for manual path/command approval for known in-vault reads.
- Uses spoiler-safe campaign grounded responses.
7. Reaction Feedback Loop (👍/👎)
Hook:
reaction-feedback- Path:
/home/zack/.openclaw/workspace/hooks/reaction-feedback/ - Event:
message:received
Outputs:
/home/zack/.openclaw/workspace/memory/reaction-feedback.jsonl/home/zack/.openclaw/workspace/memory/reaction-feedback-summary.md
Current semantics:
- 👍 → positive
- 👎 → negative
Purpose:
- Behavioral reinforcement telemetry for prompt/rule tuning (not model weight training).
8. Verification Checklist (Post-Publish)
- Site loads (
https://p2e.zgod.io). - Home reflects current arc/session context.
- One PC sheet portrait renders.
- One ally/contact portrait renders.
- One current-arc baddie portrait renders.
- No obvious broken internal links in Home quick links.
- Publish commit exists and pushed.
9. Recovery Playbook
A) Missing portraits on live pages
- Check markdown embed path (
../_assets/portraits/...). - Check assets exported to
content/.../_assets/portraits. - Re-run publish.
B) New NPC avatars not appearing
- Ensure sync script includes both denizens + timeline raw sources.
- Re-run
sync_npc_portraits.py. - Re-run publish.
C) Home stale after refresh
- Confirm generator script ran in deploy step.
- Validate generated
content/index.mdcontents. - Re-run publish.
D) Buddy giving generic/non-grounded answers
- Confirm buddy workspace path mount exists.
- Confirm agent instruction file still enforces direct sheet reads.
- Restart gateway if config/agent instructions changed.
10. Planned Hardening
- Add automated broken-link/image gate in publish pipeline.
- Add periodic “feedback → prompt patch suggestions” job.
- Add “safe-to-promote NPC inbox” auto-review + promote workflow.
- Add operator-facing dashboard/summary for one-click health review.