migrate: 313 memories from MemoryGraph
- 313 new markdown files created - 30 relationships embedded - 313 entries indexed - State initialized with usage data
This commit is contained in:
parent
ccfcbfaa0f
commit
b140d4d82a
@ -0,0 +1,21 @@
|
||||
---
|
||||
id: 6d3dcf69-9c0c-4d8a-b1a7-27267c07da51
|
||||
type: code_pattern
|
||||
title: "CloudSQL write_to_cloudsql pattern with Postgres function"
|
||||
tags: [esb-monorepo, object-handler, python, cloudsql, pattern]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-10T19:55:28.150687+00:00"
|
||||
updated: "2025-12-10T19:55:28.150687+00:00"
|
||||
relations:
|
||||
- target: db7cb384-b686-4afc-956c-ff74861a11cc
|
||||
type: SOLVES
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
- target: e80e161a-4be4-428d-8590-267b9ab4cc7c
|
||||
type: BUILDS_ON
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
Pattern for calling Postgres upsert functions from Python via Cloud SQL Connector: (1) Strip unwanted fields (e.g., raw_data) before sending, (2) Build function name from object_type: fn_upsert_{object_type.lower()}, (3) Pass data as JSONB: cursor.execute('SELECT fn_upsert_account(%s::jsonb)', (json.dumps(data),)), (4) Use connection singleton for serverless pooling, (5) Always close connection in finally block. Env vars: CLOUDSQL_INSTANCE, CLOUDSQL_USER, CLOUDSQL_DATABASE, CLOUDSQL_IAM_AUTH, CLOUDSQL_PASSWORD (if not IAM).
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 81d3eb1f-489a-4f1b-b5d2-a7d2590780f8
|
||||
type: code_pattern
|
||||
title: "Comprehensive unit test coverage pattern"
|
||||
tags: [major-domo, python, testing, patterns]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-09T23:19:36.586738+00:00"
|
||||
updated: "2025-12-09T23:19:36.586738+00:00"
|
||||
---
|
||||
|
||||
When writing unit tests for helper functions, ensure coverage includes: 1) Happy path with various input types (dict, Pydantic model), 2) Edge cases (None, empty, zero, negative values), 3) Boundary conditions (exact tolerance limits), 4) Large/small value handling, 5) Integration tests with real production models. Expanded salary cap tests from 21 to 30 by adding TestEdgeCases and TestRealTeamModel classes.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 561c1545-05ad-4403-909a-e0fd01ec38d9
|
||||
type: code_pattern
|
||||
title: "Debug missing data by checking log timestamps for gaps"
|
||||
tags: [paper-dynasty, python, debugging, logs, pattern]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-07T23:07:25.114839+00:00"
|
||||
updated: "2025-12-07T23:07:25.114839+00:00"
|
||||
---
|
||||
|
||||
When data is unexpectedly missing, grep the logs for timestamp gaps to identify script interruptions. Pattern: grep the log file for sequential minutes around the suspected time. A gap (no entries for a minute) indicates the script crashed/was interrupted. Example: 'grep 2025-12-07 13:08 logs/card_creation.log' returned empty, revealing the script died between 13:07:37 and 13:09:23.
|
||||
@ -0,0 +1,26 @@
|
||||
---
|
||||
id: 20059335-a27d-4d43-a37c-1bb561c1deaf
|
||||
type: code_pattern
|
||||
title: "Foundry VTT ActorSheetV2 scroll position preservation"
|
||||
tags: [foundryvtt, applicationv2, actorsheetv2, scroll, pattern, javascript]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2025-12-14T19:12:40.421111+00:00"
|
||||
updated: "2025-12-14T19:12:40.421111+00:00"
|
||||
---
|
||||
|
||||
When using ApplicationV2/ActorSheetV2 in Foundry VTT v13, sheet re-renders (triggered by data updates like toggling a boolean) reset scroll position to top. Solution: Override _preRender() to save scroll positions and _onRender() to restore them.
|
||||
|
||||
Implementation in base sheet class:
|
||||
1. Add this._scrollPositions = {} in constructor
|
||||
2. In _preRender(): call this._saveScrollPositions()
|
||||
3. In _onRender(): call this._restoreScrollPositions()
|
||||
|
||||
_saveScrollPositions() queries scrollable elements (.window-content, .tab-content) and saves their scrollTop values.
|
||||
_restoreScrollPositions() restores those values after render.
|
||||
|
||||
Key selectors to save:
|
||||
- .window-content (main Foundry window scroll)
|
||||
- .tab-content (tab body scroll if using tabbed layout)
|
||||
|
||||
This pattern works for any ApplicationV2 subclass, not just actor sheets. File: module/sheets/base-actor-sheet.mjs in vagabond-rpg-foundryvtt project.
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
id: 88bbf5f1-2d76-4e68-9c62-ca72e464f5c0
|
||||
type: code_pattern
|
||||
title: "Optional locking parameter pattern for read vs write commands"
|
||||
tags: [paper-dynasty, python, discord-bot, architecture, locking, concurrency, pattern]
|
||||
importance: 0.75
|
||||
confidence: 0.8
|
||||
created: "2026-02-04T15:53:57.725265+00:00"
|
||||
updated: "2026-02-04T15:53:57.725265+00:00"
|
||||
relations:
|
||||
- target: 5d8e1ff5-3354-4cfa-ab63-bf96b5ce1e01
|
||||
type: BUILDS_ON
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
In Paper Dynasty, added lock_play parameter (default=True) to checks_log_interaction() to distinguish read-only commands from write commands. Read-only commands like /show-card and /settings-ingame use lock_play=False to avoid unnecessary locking. Write commands that modify play state use default lock_play=True. This reduces lock contention and prevents blocking users during non-critical operations. Pattern: Create single validation function with optional locking, rather than duplicating validation logic for read vs write. Also moved actual state modifications to callbacks (dropdown selections) where lock is acquired at last possible moment, keeping commands themselves lock-free. Structure: Command shows UI -> User interaction triggers callback -> Callback acquires lock -> Modifies state -> Releases lock. This minimizes lock hold time.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 17014791-45fc-4cc9-9af7-d96b100982f6
|
||||
type: code_pattern
|
||||
title: "Pitcher vs Batter schema differences in PD cards"
|
||||
tags: [paper-dynasty, python, pattern, custom-cards]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-18T22:17:26.380148+00:00"
|
||||
updated: "2025-12-18T22:17:26.380148+00:00"
|
||||
---
|
||||
|
||||
Pitcher cards have different schema than batters: (1) double_cf instead of double_pull, (2) flyout_cf_b instead of flyout_a/flyout_bq, (3) no groundout_c, (4) xcheck_* fields for 29 fielder chances, (5) pitching block for starter/relief/closer ratings. Combined OPS formula also differs: batters use min(vL,vR), pitchers use max(vL,vR). Detection in YAML profiles via player_type field or presence of xcheck_p/double_cf in ratings.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 8eba8e1e-98b5-456a-9ca8-031e15eafa87
|
||||
type: configuration
|
||||
title: "Bambu Labs P2S 3D Printer Setup"
|
||||
tags: [3d-printing, bambu-labs, p2s, hardware, setup]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-08T21:22:27.966807+00:00"
|
||||
updated: "2025-12-08T21:22:27.966807+00:00"
|
||||
---
|
||||
|
||||
New Bambu Labs P2S 3D printer added to homelab. Using Bambu Studio AppImage on Linux for slicing and printer management. Initial setup date: 2025-12-08.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 4d766768-e3f5-4074-8479-826a65837ebb
|
||||
type: configuration
|
||||
title: "DnD5e System Documentation - Actor Sheets Reference"
|
||||
tags: [foundryvtt, dnd5e, reference, actor-sheets, documentation]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2025-12-14T15:37:41.709511+00:00"
|
||||
updated: "2025-12-14T15:37:41.709511+00:00"
|
||||
---
|
||||
|
||||
Comprehensive documentation for Foundry VTT dnd5e system actor sheets. URL: https://deepwiki.com/foundryvtt/dnd5e/3.1-actor-sheets - Part of larger wiki at https://deepwiki.com/foundryvtt/dnd5e/ covering entire system architecture. Use as reference for ApplicationV2/ActorSheetV2 patterns, template structure, SCSS organization, and Foundry v13 best practices.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 6348d994-dd0f-44c5-b4fb-957b6fbea135
|
||||
type: configuration
|
||||
title: "Extended access token to 24 hours"
|
||||
tags: [strat-gameplay-webapp, auth, backend, configuration]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2026-01-16T15:57:46.721947+00:00"
|
||||
updated: "2026-01-16T15:57:46.721947+00:00"
|
||||
---
|
||||
|
||||
Changed ACCESS_TOKEN_MAX_AGE in backend/app/utils/cookies.py from 1 hour (60*60) to 24 hours (60*60*24) to reduce frequency of re-authentication prompts for users.
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
id: 1a1281db-3886-4680-8793-2c102bb27ee1
|
||||
type: configuration
|
||||
title: "Foundry VTT LXC for Vagabond RPG"
|
||||
tags: [foundry-vtt, vagabond-rpg, proxmox, lxc, docker, homelab]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2025-12-12T16:48:12.152363+00:00"
|
||||
updated: "2025-12-12T16:48:12.152363+00:00"
|
||||
relations:
|
||||
- target: fc01b027-18c5-492d-8ef7-df7cc02b23e9
|
||||
type: REQUIRES
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
Foundry VTT v13.351 running on LXC 223 (foundry-lxc) at 10.10.0.223:30000. Uses felddy/foundryvtt:release Docker image with version pinned via FOUNDRY_VERSION=13.351. Created for Vagabond RPG campaign. SSH: ssh foundry-lxc. Docker compose at /opt/foundry/. World: vagabond-campaign-001 using custom-system-builder module. Config stored in server-configs/foundry-lxc/. Key settings: security_opt apparmor=unconfined (required for Docker-in-LXC), data dir owned by uid 1000.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: fd11bc1d-d8a3-4c07-8509-e31f443253d6
|
||||
type: configuration
|
||||
title: "Gitignore LevelDB compendium files"
|
||||
tags: [vagabond-rpg, foundryvtt, git, config]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-18T22:39:32.759254+00:00"
|
||||
updated: "2025-12-18T22:39:32.759254+00:00"
|
||||
---
|
||||
|
||||
FoundryVTT compendiums use LevelDB files (*.ldb, MANIFEST-*, LOG, CURRENT, LOCK, lost/) that are generated from _source/ JSON files. These should be gitignored as they change on every build and are not source of truth. Add patterns: packs/*/*.ldb, packs/*/MANIFEST-*, packs/*/LOG*, packs/*/CURRENT, packs/*/LOCK, packs/*/lost/
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: a2c67fb5-57fa-4e5f-9810-7e35afe9db59
|
||||
type: configuration
|
||||
title: "Home Assistant added to infrastructure"
|
||||
tags: [claude-home, homeassistant, infrastructure, config]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2026-01-07T15:55:24.930778+00:00"
|
||||
updated: "2026-01-07T15:55:24.930778+00:00"
|
||||
---
|
||||
|
||||
Added Home Assistant OS VM (10.10.0.174, VMID 109) to claude-home hosts.yml inventory. Created new 'homeassistant' host type with API config structure. Token stored in server-configs/home-assistant/.env (gitignored), template in .env.example. HA running version 2025.12.5 with Matter integration ready.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 0c487d17-0b6e-4a8a-8c1a-e3e3a68240c7
|
||||
type: configuration
|
||||
title: "Major Domo Production Bot Location"
|
||||
tags: [major-domo, production, akamai, docker, discord-bot]
|
||||
importance: 0.9
|
||||
confidence: 0.8
|
||||
created: "2025-12-12T02:37:59.511181+00:00"
|
||||
updated: "2025-12-12T02:37:59.511181+00:00"
|
||||
---
|
||||
|
||||
The Major Domo Discord bot runs in PRODUCTION on the Akamai server (ssh akamai). Container name: major-domo-discord-app-1. Use 'ssh akamai docker logs major-domo-discord-app-1' to check logs. Local logs in discord-app-v2/logs/ are for DEV ONLY and often stale.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 8c26aa9a-7ffa-4ebf-933d-6c5de7de1b47
|
||||
type: configuration
|
||||
title: "Major Domo production deployment info"
|
||||
tags: [major-domo, docker, deployment, akamai]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2026-01-20T19:41:02.526136+00:00"
|
||||
updated: "2026-01-20T19:41:02.526136+00:00"
|
||||
---
|
||||
|
||||
Production server: ssh akamai. Container path: /root/container-data/major-domo. Service name: discord-app. Deploy command: ssh akamai 'cd /root/container-data/major-domo && docker compose pull discord-app && docker compose up -d discord-app'
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: e7f090c0-615e-434a-8a30-97840235fc1c
|
||||
type: configuration
|
||||
title: "Nabu Casa ZBT-2 USB passthrough to Proxmox VM"
|
||||
tags: [home-assistant, proxmox, zbt-2, usb, thread, zigbee, configuration]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2026-01-09T06:56:08.578294+00:00"
|
||||
updated: "2026-01-09T06:56:08.578294+00:00"
|
||||
---
|
||||
|
||||
ZBT-2 Thread/Zigbee coordinator USB passthrough: Vendor ID 303a:831a. Stop VM, run 'qm set 109 -usb0 host=303a:831a', start VM. Device appears at /dev/ttyACM0 or /dev/serial/by-id/usb-Nabu_Casa_ZBT-2_<SERIAL>-if00. Use USB 2.0 port to avoid USB 3.0 interference with 802.15.4 radio. Flash Thread firmware via HA Settings > System > Hardware if needed.
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
id: cd528dd3-8328-41c5-9652-81c410c0d344
|
||||
type: configuration
|
||||
title: "Object-handler dual-layer output config"
|
||||
tags: [esb-monorepo, object-handler, configuration, cloudsql, firestore]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-10T19:55:30.559152+00:00"
|
||||
updated: "2025-12-10T19:55:30.559152+00:00"
|
||||
relations:
|
||||
- target: e80e161a-4be4-428d-8590-267b9ab4cc7c
|
||||
type: BUILDS_ON
|
||||
direction: outgoing
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
Object-handler supports multiple downstream outputs controlled by env vars: (1) DOWNSTREAM_CLOUDSQL_ENABLED - silver layer, calls fn_upsert_{object_type} with JSONB, strips raw_data, (2) DOWNSTREAM_FIRESTORE_ENABLED - bronze layer, full data including raw_data, (3) DOWNSTREAM_API_URL - HTTP POST, (4) DOWNSTREAM_PUBSUB_TOPIC - Pub/Sub forwarding. Handler-specific enablement: ENABLE_DOWNSTREAM_HTTP, ENABLE_DOWNSTREAM_CLOUD_EVENT. All outputs fail-fast (exceptions propagate).
|
||||
@ -0,0 +1,47 @@
|
||||
---
|
||||
id: 33fa68ae-a606-4c4b-b444-356185d62722
|
||||
type: configuration
|
||||
title: "OpenCode agent model configuration"
|
||||
tags: [opencode, configuration, models, agents, ai, homelab]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2026-02-02T19:46:30.736258+00:00"
|
||||
updated: "2026-02-02T19:46:30.736258+00:00"
|
||||
---
|
||||
|
||||
Configured default models for OpenCode agents in ~/.config/opencode/opencode.json:
|
||||
|
||||
PRIMARY AGENTS:
|
||||
- plan: anthropic/claude-sonnet-4-5 (for planning and analysis)
|
||||
- build: opencode/minimax-m2.1-free (for development work)
|
||||
|
||||
SUBAGENTS:
|
||||
- explore: anthropic/claude-haiku-4-5 (fast codebase exploration)
|
||||
- title: anthropic/claude-haiku-4-5 (session title generation)
|
||||
- general: anthropic/claude-sonnet-4-5 (general-purpose reasoning)
|
||||
- compaction: anthropic/claude-sonnet-4-5 (context compaction)
|
||||
- summary: anthropic/claude-sonnet-4-5 (session summarization)
|
||||
|
||||
KEY DECISIONS:
|
||||
1. Pinned to latest generation models (4.5 series) rather than using -latest tags for older models
|
||||
2. Haiku 4.5 for lightweight/fast tasks, Sonnet 4.5 for reasoning-heavy tasks
|
||||
3. No -latest variants exist for Sonnet 4.5 or Minimax M2.1, so used base versions without dates
|
||||
4. Configuration is global (~/.config/opencode/) and applies to all projects unless overridden
|
||||
|
||||
CONFIGURATION FILE STRUCTURE:
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"agent-name": {
|
||||
"model": "provider/model-id"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PRECEDENCE ORDER (for future reference):
|
||||
1. Remote config (.well-known/opencode)
|
||||
2. Global config (~/.config/opencode/opencode.json) ← THIS FILE
|
||||
3. Custom config (OPENCODE_CONFIG env var)
|
||||
4. Project config (opencode.json in project root)
|
||||
5. .opencode directories
|
||||
6. Inline config (OPENCODE_CONFIG_CONTENT env var)
|
||||
@ -0,0 +1,40 @@
|
||||
---
|
||||
id: c40912f8-b655-4f01-9159-7100de5a800d
|
||||
type: configuration
|
||||
title: "Restic Backup Setup - Nobara Desktop to TrueNAS"
|
||||
tags: [homelab, backup, restic, systemd, nobara, truenas, configuration]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2025-12-09T17:21:02.539174+00:00"
|
||||
updated: "2025-12-09T17:22:26.730638+00:00"
|
||||
---
|
||||
|
||||
Automated backup solution for nobara-desktop using restic with systemd timers.
|
||||
|
||||
## Setup Summary
|
||||
- **Tool**: restic 0.18.0
|
||||
- **Source**: /home (328GB)
|
||||
- **Destination**: /mnt/truenas/cals-files/Backups/nobara-desktop/restic-repo
|
||||
- **Schedule**: Daily at 3:00 AM via systemd timer
|
||||
- **Encryption**: None (trusted local network)
|
||||
- **Retention**: 7 daily, 4 weekly, 6 monthly, 1 yearly
|
||||
|
||||
## Key Files
|
||||
- Backup script: /home/cal/.local/bin/restic-backup.sh
|
||||
- Exclusions: /home/cal/.config/restic/excludes.txt
|
||||
- Service: /etc/systemd/system/restic-backup.service
|
||||
- Timer: /etc/systemd/system/restic-backup.timer
|
||||
|
||||
## Key Decisions
|
||||
- Chose restic over borg (simpler, good deduplication) and rsync (no dedup)
|
||||
- systemd timers over cron for Persistent=true (catches missed backups), RequiresMountsFor (mount dependency), Nice/IOSchedulingClass (low system impact)
|
||||
- No encryption because backups stay on trusted local TrueNAS
|
||||
|
||||
## Documentation
|
||||
Full KB article: https://notes.manticorum.com/reference/restic-backup-nobara
|
||||
|
||||
## Quick Commands
|
||||
- Check timer: systemctl list-timers restic-backup.timer
|
||||
- View logs: journalctl -u restic-backup.service -e
|
||||
- List snapshots: restic -r /mnt/truenas/cals-files/Backups/nobara-desktop/restic-repo --insecure-no-password snapshots
|
||||
- Run manual backup: sudo systemctl start restic-backup.service
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: ec2f45b6-923c-432b-bc1b-39f3063e4d4c
|
||||
type: configuration
|
||||
title: "Tdarr migrated to ubuntu-manticore server"
|
||||
tags: [tdarr, homelab, ubuntu-manticore, docker, transcoding, migration]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-07T07:18:00.959230+00:00"
|
||||
updated: "2025-12-07T07:18:00.959230+00:00"
|
||||
---
|
||||
|
||||
Tdarr transcoding system moved from local desktop (podman, unmapped node, gaming-aware scheduler) to dedicated ubuntu-manticore server (10.10.0.226). New setup: Docker Compose, mapped node with shared NFS storage, GTX 1070 GPU, 24/7 operation. Performance: ~13 files/hour, 64% compression ratio (35% space savings), HEVC output. Queue: 7,675 files pending, 37,406 total jobs. Web UI at http://10.10.0.226:8265. Shares GPU with Jellyfin (NVENC for Tdarr encoding, NVDEC for Jellyfin decoding).
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 35400ae2-9029-4bdb-b135-9fbcd01892cb
|
||||
type: configuration
|
||||
title: "Uptime Kuma deployed on LXC 227"
|
||||
tags: [uptime-kuma, monitoring, homelab, docker, proxmox, config]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2026-02-08T04:17:44.820199+00:00"
|
||||
updated: "2026-02-08T04:17:44.820199+00:00"
|
||||
---
|
||||
|
||||
Uptime Kuma service monitoring deployed on Proxmox LXC 227 (10.10.0.227). Ubuntu 22.04, 2 cores, 2GB RAM, 8GB disk. Docker 29.2.1 + Compose 5.0.2. Compose file at /opt/uptime-kuma/docker-compose.yml. Uses louislam/uptime-kuma:1 image with named volume uptime-kuma-data. Port 3001. Reverse proxied via NPM at https://status.manticorum.com. SSH alias: uptime-kuma. Server-configs entry in hosts.yml and server-configs/uptime-kuma/. LXC config backed up to server-configs/proxmox/lxc/227.conf.
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
id: 19a7babb-dc17-43ca-aa9b-9fd801f415de
|
||||
type: configuration
|
||||
title: "Vagabond RPG Class Documentation Complete"
|
||||
tags: [vagabond-rpg, gaming, foundry, notediscovery, reference]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-12T18:01:21.772825+00:00"
|
||||
updated: "2025-12-12T18:01:21.772825+00:00"
|
||||
relations:
|
||||
- target: fc01b027-18c5-492d-8ef7-df7cc02b23e9
|
||||
type: BUILDS_ON
|
||||
direction: outgoing
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
All 18 Vagabond RPG classes fully documented in NoteDiscovery at gaming/vagabond-rpg/classes/. Each class file contains: overview, progression table (levels 1-10), class features, resource mechanics (mana/stamina), and all abilities. Classes: Alchemist, Barbarian, Bard, Dancer, Druid, Fighter, Gunslinger, Hunter, Luminary, Magus, Merchant, Pugilist, Revelator, Rogue, Sorcerer, Vanguard, Witch, Wizard.
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
id: c11e9377-c2b5-4801-9e16-ab44f71a4eca
|
||||
type: configuration
|
||||
title: "Vagabond RPG Perk List Documented"
|
||||
tags: [vagabond-rpg, gaming, foundry, notediscovery, reference, perks]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-12T18:06:08.082384+00:00"
|
||||
updated: "2025-12-12T18:06:08.082384+00:00"
|
||||
relations:
|
||||
- target: fc01b027-18c5-492d-8ef7-df7cc02b23e9
|
||||
type: BUILDS_ON
|
||||
direction: outgoing
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
Complete perk list (90+ perks) documented in NoteDiscovery at gaming/vagabond-rpg/perks-full-list. Includes quick reference table with prerequisites, full descriptions for each perk, and categorization by prerequisite type (stat-based, spell-based, training-based).
|
||||
@ -0,0 +1,51 @@
|
||||
---
|
||||
id: fc01b027-18c5-492d-8ef7-df7cc02b23e9
|
||||
type: configuration
|
||||
title: "Vagabond RPG rules stored in NoteDiscovery"
|
||||
tags: [vagabond-rpg, ttrpg, foundry-vtt, notediscovery, gaming]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2025-12-12T16:48:01.527047+00:00"
|
||||
updated: "2025-12-12T19:47:02.373026+00:00"
|
||||
relations:
|
||||
- target: 1a1281db-3886-4680-8793-2c102bb27ee1
|
||||
type: REQUIRES
|
||||
direction: outgoing
|
||||
strength: 0.5
|
||||
- target: 76ca7255-e1fb-4eb1-8114-2b69b84ccc65
|
||||
type: BUILDS_ON
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
- target: 7f81616e-aa4f-4f39-afe6-bd578d922793
|
||||
type: BUILDS_ON
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
- target: c11e9377-c2b5-4801-9e16-ab44f71a4eca
|
||||
type: BUILDS_ON
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
- target: 19a7babb-dc17-43ca-aa9b-9fd801f415de
|
||||
type: BUILDS_ON
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
Vagabond RPG (pulp fantasy TTRPG) rulebook fully parsed and stored in NoteDiscovery under gaming/vagabond-rpg/. Documentation includes:
|
||||
|
||||
CORE REFERENCE:
|
||||
- core-mechanics (stats, checks, dice, HP)
|
||||
- combat (actions, movement, defending, zones, morale)
|
||||
- character-creation (ancestries, classes, leveling)
|
||||
- magic-system (casting, mana, delivery, duration)
|
||||
- bestiary (creature categories, TL reference)
|
||||
|
||||
COMPLETE LISTINGS:
|
||||
- spell-list (spell quick reference)
|
||||
- spells-full-text (45+ spells with full descriptions)
|
||||
- perks-full-list (90+ perks with prerequisites and full descriptions)
|
||||
|
||||
CLASS DOCUMENTATION (gaming/vagabond-rpg/classes/):
|
||||
All 18 classes with progression tables, features, and abilities:
|
||||
Alchemist, Barbarian, Bard, Dancer, Druid, Fighter, Gunslinger, Hunter, Luminary, Magus, Merchant, Pugilist, Revelator, Rogue, Sorcerer, Vanguard, Witch, Wizard
|
||||
|
||||
Search NoteDiscovery with 'vagabond-rpg' tag or query specific topics. Original PDF at /mnt/NV2/Development/claude-home/gaming/Vagabond_RPG_-_Pulp_Fantasy_Core_Rulebook_Interactive_PDF.pdf (214 pages, 44MB - use pdftotext to extract if needed).
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 1a4e1586-905d-4cbc-8f0a-fc69bb5acbc2
|
||||
type: configuration
|
||||
title: "Voice server systemd service setup"
|
||||
tags: [voice-server, systemd, linux, deployment]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-19T06:20:10.135528+00:00"
|
||||
updated: "2025-12-19T06:20:10.135528+00:00"
|
||||
---
|
||||
|
||||
Created user systemd service for voice-server auto-start. Service file at ~/.config/systemd/user/voice-server.service. Enabled lingering for boot startup without login. Commands: systemctl --user enable/start/stop/status voice-server
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: a414a51f-634e-4c88-ac24-ea250e60465b
|
||||
type: decision
|
||||
title: "Added pd-cards CLI to paper-dynasty skill"
|
||||
tags: [paper-dynasty, pd-cards, cli, skill-update, typer]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-18T23:26:43.987993+00:00"
|
||||
updated: "2025-12-18T23:26:43.987993+00:00"
|
||||
---
|
||||
|
||||
Updated paper-dynasty skill (v1.4→v1.5) to integrate new pd-cards CLI tool. Replaced interactive_creator.py with YAML-based custom card profiles. CLI provides: pd-cards custom (list/preview/submit/new), pd-cards scouting (all/batters/pitchers), pd-cards retrosheet (process/arms/validate/defense), pd-cards upload (s3/refresh/check). Shell alias 'pd-cards' maps to 'uv run pd-cards'. Bash completion installed at ~/.bash_completions/pd-cards.sh (modified to use uv run). Core business logic moved from root scripts to pd_cards/core/ modules (scouting.py, upload.py). Retrosheet remains wrapper due to complexity.
|
||||
12
graph/decisions/card-builder-architecture-redesign-396868.md
Normal file
12
graph/decisions/card-builder-architecture-redesign-396868.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 39686881-b3b4-48a9-b7b6-cf01abf89faf
|
||||
type: decision
|
||||
title: "Card builder architecture redesign"
|
||||
tags: [paper-dynasty, architecture, card-generation, python, decision]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2026-01-22T16:57:06.659844+00:00"
|
||||
updated: "2026-01-22T16:57:06.659844+00:00"
|
||||
---
|
||||
|
||||
Designed new architecture for Paper Dynasty card generation that moves fitting logic from database to Python. Key insight: cards use 2d6 x d20 mechanics with discrete probability values, but Python was generating continuous values causing subtle mismatches. Solution: CardBuilder module with pluggable 'contracts' that define placement strategies (which rows for which play types). Contracts enable different card personalities (Standard, Clutch, Power Heavy, Contact First, etc.) from same raw stats. Migration path: 4 phases from extract/validate through database simplification. Files: docs/architecture/CARD_BUILDER_REDESIGN.md, card_builder_sketch.py, contracts.py
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 24d254fb-9907-4201-88f6-3795c6b57b1c
|
||||
type: decision
|
||||
title: "Card packs disabled, project skills added"
|
||||
tags: [efd-trading-card, unity, csharp, workflow]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-30T19:17:09.372043+00:00"
|
||||
updated: "2025-12-30T19:17:09.372043+00:00"
|
||||
---
|
||||
|
||||
Disabled card pack feature (not working correctly) and moved to upcoming features. Added /build and /deploy project skills for workflow automation. Workshop files added to gitignore.
|
||||
12
graph/decisions/character-sheet-styling-complete-37a147.md
Normal file
12
graph/decisions/character-sheet-styling-complete-37a147.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 37a147ce-cb0d-48ed-b171-56c99a1fde3d
|
||||
type: decision
|
||||
title: "Character sheet styling complete"
|
||||
tags: [vagabond-rpg, foundryvtt, roadmap, milestone]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-15T04:38:03.324160+00:00"
|
||||
updated: "2025-12-15T04:38:03.324160+00:00"
|
||||
---
|
||||
|
||||
Completed all character sheet tab styling: Header, Main, Inventory, Abilities, Magic, Biography. Task 5.4 marked complete in roadmap. Next styling tasks: NPC sheet (5.5), Item sheets (5.6).
|
||||
12
graph/decisions/claudemd-documentation-maintenance-9ba787.md
Normal file
12
graph/decisions/claudemd-documentation-maintenance-9ba787.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 9ba78799-6682-4c7f-83cd-8c95c7ac9eff
|
||||
type: decision
|
||||
title: "CLAUDE.md documentation maintenance"
|
||||
tags: [major-domo, documentation, claude-md, maintenance]
|
||||
importance: 0.4
|
||||
confidence: 0.8
|
||||
created: "2025-12-11T05:18:33.927402+00:00"
|
||||
updated: "2025-12-11T05:18:33.927402+00:00"
|
||||
---
|
||||
|
||||
Updated CLAUDE.md files after series of draft system commits. Key updates: marked draft commands as implemented (not pending), documented smart polling intervals for draft monitor (30s/15s/5s based on time remaining), added auto-start behavior documentation, documented on-clock announcement features. Importance: Keep CLAUDE.md files synchronized with actual implementation state.
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
id: 66a9bfd9-e211-4dd8-b6d8-977d91203c1c
|
||||
type: decision
|
||||
title: "Custom card tier progression system for Paper Dynasty"
|
||||
tags: [paper-dynasty, custom-cards, game-design, yaml, decision]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2025-12-19T06:07:58.142845+00:00"
|
||||
updated: "2025-12-19T06:07:58.142845+00:00"
|
||||
relations:
|
||||
- target: 1ce1fbb8-ce8d-4f31-a560-320a66fbc2b6
|
||||
type: BUILDS_ON
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
Implemented tier tracking for custom player cards. Tiers progress: L-STR(0.820) → M-STR(0.850) → H-STR(0.880) → L-AS(0.920) → M-AS(0.950) → H-AS(0.980) → L-MVP(1.025) → M-MVP(1.075) → H-MVP(1.150) → L-HOF(1.220) → M-HOF(1.250) → H-HOF(1.280). Legendary+ follows .x20/.x50/.x80 pattern. Pitchers use inverted scale (lower OPS = better). YAML profiles now include: tier (code), target_ops (must match tier), tier_history (array with date/reason). Documentation at docs/CUSTOM_CARD_TIERS.md.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: d1ebcacd-443c-4917-ba33-d6edd2b444e8
|
||||
type: decision
|
||||
title: "Games list as index page for league apps"
|
||||
tags: [strat-gameplay-webapp, nuxt, ux, decision]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2026-01-14T02:59:45.349921+00:00"
|
||||
updated: "2026-01-14T02:59:45.349921+00:00"
|
||||
---
|
||||
|
||||
For league-specific apps (like SBA frontend), users are already members - they don't need a marketing landing page. Moving the games list to / reduces friction by eliminating a redirect. Auth middleware handles unauthenticated users by redirecting to login, then back to /. The old /games route redirects to / for backwards compatibility.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: c06faee5-40ad-432b-91ad-9cde6dfd093b
|
||||
type: decision
|
||||
title: "Mantimon TCG Engine: Highly Configurable Design"
|
||||
tags: [mantimon-tcg, architecture, decision, game-engine, configuration]
|
||||
importance: 0.9
|
||||
confidence: 0.8
|
||||
created: "2026-01-25T01:47:19.269415+00:00"
|
||||
updated: "2026-01-25T01:47:19.269415+00:00"
|
||||
---
|
||||
|
||||
The game engine must be extremely configurable to support 'free play' mode where users can play however they want. The engine should have sensible defaults for core gameplay (standard Pokemon TCG-like rules) but allow runtime configuration of: energy system (attachments per turn, energy types), deck building rules (size, card limits), win conditions (prize count, victory types), turn rules (first turn restrictions), status conditions, and card type restrictions. Design pattern: Rules should be data-driven via a configuration object/JSON that the engine reads, not hardcoded. This enables both campaign mode (with fixed rules) and free play mode (user-configurable).
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 42c14abe-cb96-4ff2-a92e-bdb4bb85b486
|
||||
type: decision
|
||||
title: "Mantimon TCG: RNG and Card Registry Design"
|
||||
tags: [mantimon-tcg, architecture, decision, rng, card-registry]
|
||||
importance: 0.85
|
||||
confidence: 0.8
|
||||
created: "2026-01-25T03:23:15.411615+00:00"
|
||||
updated: "2026-01-25T03:23:15.411615+00:00"
|
||||
---
|
||||
|
||||
RNG Handling: Use RandomProvider protocol with two implementations - SeededRandom (for testing/replays, uses random.Random with seed) and SecureRandom (for production PvP, uses secrets module). This enables deterministic testing while maintaining cryptographic security in production. Card Registry: Hybrid approach - CardDefinitions live in database (loaded via CardService), but at game creation the engine loads only the definitions needed for that game's decks and embeds them in GameState.card_registry. This makes GameState self-contained for gameplay (no I/O during game), serializable for save/replay, and memory-efficient (only loads cards in use). Custom/homebrew cards can be added to registry for free play mode without touching DB.
|
||||
@ -0,0 +1,26 @@
|
||||
---
|
||||
id: ebc3e5af-b3d1-486b-9751-8ece841aa93f
|
||||
type: decision
|
||||
title: "NoteDiscovery tags must use YAML frontmatter format"
|
||||
tags: [notediscovery, skills, tagging, decision, pai]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-07T06:43:35.086250+00:00"
|
||||
updated: "2025-12-07T06:43:35.086250+00:00"
|
||||
relations:
|
||||
- target: 8e2d1904-24e0-41df-95f2-2edc4407b9f3
|
||||
type: RELATED_TO
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
context: "Both part of PAI skills infrastructure improvements in same session"
|
||||
---
|
||||
|
||||
Tags in NoteDiscovery notes MUST use YAML frontmatter at the top of the file, not inline #hashtag format. Inline hashtags are not indexed by NoteDiscovery. Correct format:
|
||||
|
||||
---
|
||||
tags:
|
||||
- tag1
|
||||
- tag2
|
||||
---
|
||||
|
||||
Updated SKILL.md on 2025-12-07 to reflect this requirement after discovering notes created with inline hashtags were not being indexed properly.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 775bce7d-4976-4982-9429-1e2288e30694
|
||||
type: decision
|
||||
title: "NPC sheet styling complete in roadmap"
|
||||
tags: [vagabond-rpg, foundryvtt, roadmap]
|
||||
importance: 0.3
|
||||
confidence: 0.8
|
||||
created: "2025-12-15T06:18:44.802912+00:00"
|
||||
updated: "2025-12-15T06:18:44.802912+00:00"
|
||||
---
|
||||
|
||||
Marked task 5.5 (Style NPC sheet) as complete. Updated notes for tasks 3.12 and 3.14 to document movement capabilities (5 boolean toggles) added to both character and NPC sheets.
|
||||
@ -0,0 +1,21 @@
|
||||
---
|
||||
id: e80e161a-4be4-428d-8590-267b9ab4cc7c
|
||||
type: decision
|
||||
title: "Object-handler CloudSQL silver layer architecture"
|
||||
tags: [esb-monorepo, object-handler, architecture, cloudsql, decision]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2025-12-10T19:55:26.314546+00:00"
|
||||
updated: "2025-12-10T19:55:26.314546+00:00"
|
||||
relations:
|
||||
- target: 6d3dcf69-9c0c-4d8a-b1a7-27267c07da51
|
||||
type: BUILDS_ON
|
||||
direction: outgoing
|
||||
strength: 0.5
|
||||
- target: cd528dd3-8328-41c5-9652-81c410c0d344
|
||||
type: BUILDS_ON
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
For object-handler silver layer (CloudSQL) output: Use Cloud SQL Python Connector + pg8000 driver (not SQLAlchemy). Connection method chosen because: (1) Works in Docker locally AND Cloud Functions, (2) IAM auth eliminates password management, (3) No VPC connector needed. Postgres functions handle upsert logic, so raw SQL calls are sufficient - SQLAlchemy would be overkill. Data flow: raw_data stripped before silver layer, full data goes to Firestore bronze layer.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 964ca0c2-7fd7-4cde-8f4d-0ca92c722695
|
||||
type: decision
|
||||
title: "Paper Dynasty: Always use pd-cards CLI, never edit Python configs"
|
||||
tags: [paper-dynasty, cli, pattern, card-generation]
|
||||
importance: 0.9
|
||||
confidence: 0.8
|
||||
created: "2025-12-21T21:54:23.473654+00:00"
|
||||
updated: "2025-12-21T21:54:23.473654+00:00"
|
||||
---
|
||||
|
||||
For retrosheet, scouting, upload, and custom card operations, ALWAYS use pd-cards CLI with flags (--end, --season-pct, etc). NEVER edit retrosheet_data.py or live_series_update.py directly. CLI is the designed interface; editing Python files leaves dirty state requiring manual revert.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 4ab58629-ee98-4ca6-ae31-9679cf0aa4a0
|
||||
type: decision
|
||||
title: "pd-cards CLI refactor with Typer + YAML profiles"
|
||||
tags: [paper-dynasty, python, cli, typer, refactor, decision]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-18T22:08:41.481129+00:00"
|
||||
updated: "2025-12-18T22:08:41.481129+00:00"
|
||||
---
|
||||
|
||||
Refactored paper-dynasty card-creation project from scattered Python scripts to unified Typer CLI. Custom character cards now use YAML profiles instead of per-character Python scripts. CLI structure: pd-cards {custom,live-series,retrosheet,scouting,upload}. Key design decisions: (1) Full project refactor scope, (2) Clean break - no backwards compat, (3) Remove interactive_creator.py in favor of YAML editing + preview/submit commands. Install via uv pip install -e ., run via pd-cards --help.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: dedfc33f-4503-42ae-a19b-11cf6d4a6468
|
||||
type: decision
|
||||
title: "Phase 3 Collections+Decks plan created"
|
||||
tags: [mantimon-tcg, python, planning, backend]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2026-01-28T06:40:35.526655+00:00"
|
||||
updated: "2026-01-28T06:40:35.526655+00:00"
|
||||
---
|
||||
|
||||
Created comprehensive PHASE_3_COLLECTION_DECKS.json with 14 tasks (29 hrs): CollectionService, DeckService, DeckValidator, starter decks, REST APIs, and 80-90 tests. Key decisions: allow saving invalid decks (store errors), separate DeckValidator for testability, ownership validation flag for campaign vs freeplay modes.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: da0789e9-c0cb-412e-b4eb-bc742f33a32e
|
||||
type: decision
|
||||
title: "Phase 4 Game Service + WebSocket Plan"
|
||||
tags: [mantimon-tcg, python, websocket, socketio, architecture, planning]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2026-01-28T21:51:09.186197+00:00"
|
||||
updated: "2026-01-28T21:51:09.186197+00:00"
|
||||
---
|
||||
|
||||
Created detailed 18-task project plan for Phase 4: WebSocket server with python-socketio, GameService lifecycle management, ConnectionManager with Redis session tracking, TurnTimeoutService, reconnection handling, REST endpoints for game management. Key architectural decisions: Socket.IO for bidirectional communication, Redis for connection state and turn timeouts, visibility filtering per player, write-behind caching pattern continues from Phase 1.
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
id: 1ce1fbb8-ce8d-4f31-a560-320a66fbc2b6
|
||||
type: decision
|
||||
title: "Pitcher tier progression - separate scales for SP vs RP"
|
||||
tags: [paper-dynasty, custom-cards, pitchers, game-design, decision]
|
||||
importance: 0.85
|
||||
confidence: 0.8
|
||||
created: "2025-12-19T06:21:29.318730+00:00"
|
||||
updated: "2025-12-19T06:21:29.318730+00:00"
|
||||
relations:
|
||||
- target: 66a9bfd9-e211-4dd8-b6d8-977d91203c1c
|
||||
type: BUILDS_ON
|
||||
direction: outgoing
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
Starting pitchers and relief pitchers have DIFFERENT OPS-against progressions. Relievers are held to higher standards (lower OPS) at each tier. SP progression: L-STR(0.580) → M-STR(0.560) → H-STR(0.540) → L-AS(0.520) → M-AS(0.500) → H-AS(0.485) → L-MVP(0.460) → M-MVP(0.435) → H-MVP(0.410) → L-HOF(0.390) → M-HOF(0.370) → H-HOF(0.350), then -0.015 per upgrade. RP progression: L-STR(0.540) → M-STR(0.515) → H-STR(0.490) → L-AS(0.465) → M-AS(0.440) → H-AS(0.415) → L-MVP(0.380) → M-MVP(0.360) → H-MVP(0.340) → L-HOF(0.320) → M-HOF(0.300) → H-HOF(0.280), then -0.020 per upgrade.
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
id: 638ac861-2c7b-462c-9d82-672e4536688e
|
||||
type: decision
|
||||
title: "Production deployment checklist for Paper Dynasty bot"
|
||||
tags: [paper-dynasty, discord-bot, deployment, production, checklist, devops]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2026-02-04T15:53:47.786896+00:00"
|
||||
updated: "2026-02-04T15:53:47.786896+00:00"
|
||||
relations:
|
||||
- target: 9b70e3d5-d0b6-48c5-88d0-2fbc36f4fd4d
|
||||
type: REQUIRES
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
CRITICAL: Always verify bot startup in production logs after deployment. Check: 1) All cogs loaded successfully (grep 'Loaded cog' in logs), 2) No 'Failed to load' errors, 3) 'Logged in as' confirmation appears, 4) Test basic commands in Discord. Common failure patterns: circular imports (only caught at runtime, not by linters), missing dependencies, database connection issues. Use 'docker logs CONTAINER --tail 100 | grep -E "Logged in|Failed|ERROR"' for quick health check. Production container: paper-dynasty_discord-app_1 on ssh sba-bots. Log file: logs/discord.log inside container. Health endpoint: port 8080. Always manually unlock stuck plays before deploying fixes: 'UPDATE play SET locked = false WHERE locked = true AND complete = false;'
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 799d9819-7b09-4a22-9254-fec7ef25e3b6
|
||||
type: decision
|
||||
title: "Production deployment guide for Linode"
|
||||
tags: [strat-gameplay-webapp, docker, deployment, linode]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2026-01-15T15:51:57.619896+00:00"
|
||||
updated: "2026-01-15T15:51:57.619896+00:00"
|
||||
---
|
||||
|
||||
Created DEPLOYMENT.md documenting Docker Compose deployment to Linode VPS. Covers architecture (NPM + backend + frontend + shared postgres/redis), step-by-step deployment, production compose override for external networks, NPM routing config, maintenance commands, and rollback procedures. Decision: Docker Compose selected over bare metal/K8s due to existing infrastructure.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 8fc22c6a-eaa2-42b0-b999-c123aa32846c
|
||||
type: decision
|
||||
title: "Removed http_trigger in favor of jumbo package"
|
||||
tags: [esb-monorepo, python, refactor, architecture]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2026-01-21T19:09:02.164414+00:00"
|
||||
updated: "2026-01-21T19:09:02.164414+00:00"
|
||||
---
|
||||
|
||||
Removed deprecated http_trigger endpoint and denormalize_object function from outbound-object-router. The jumbo package architecture (jumbo_http_trigger) is now the only endpoint - it creates output with ALL field name variations from all sources, queries CloudSQL for records, and publishes to Pub/Sub. Removed 914 lines, 38 tests passing. Commit 7b8746b.
|
||||
12
graph/decisions/salary-cap-refactor-plan-created-ed9e1e.md
Normal file
12
graph/decisions/salary-cap-refactor-plan-created-ed9e1e.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: ed9e1e96-f7ef-4594-b88f-65cb2decee87
|
||||
type: decision
|
||||
title: "Salary cap refactor plan created"
|
||||
tags: [major-domo, python, refactor, salary-cap]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-09T23:03:07.253973+00:00"
|
||||
updated: "2025-12-09T23:03:07.253973+00:00"
|
||||
---
|
||||
|
||||
Created feature branch feature/dynamic-salary-cap and JSON task plan to replace hardcoded 32.0/32.001 salary cap values with dynamic Team.salary_cap field. Plan includes 8 tasks across helpers.py, draft.py, and transactions.py
|
||||
12
graph/decisions/store-deckconfig-with-decks-cfc068.md
Normal file
12
graph/decisions/store-deckconfig-with-decks-cfc068.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: cfc0687c-a071-42ea-a906-1dd8b1c7484a
|
||||
type: decision
|
||||
title: "Store DeckConfig with Decks"
|
||||
tags: [mantimon-tcg, architecture, decision, deck, database]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2026-01-31T17:32:48.578182+00:00"
|
||||
updated: "2026-01-31T17:32:48.578182+00:00"
|
||||
---
|
||||
|
||||
When a deck is created, the DeckConfig used for validation should be persisted with the deck in the database. This ensures: 1) The deck can be re-validated later with the same rules it was created under, 2) Different game modes can have different rules, 3) Historical decks remain valid even if default rules change. Implementation: Add deck_config JSONB column to decks table, update DeckResponse to include it, update deck service to persist on create/update.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 41dd456e-d63d-4abb-9b6d-96afcb1434b6
|
||||
type: decision
|
||||
title: "Vagabond RPG Foundry VTT - Full System vs CSB"
|
||||
tags: [vagabond-rpg, foundry-vtt, decision, architecture]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2025-12-12T20:31:52.403128+00:00"
|
||||
updated: "2025-12-12T20:31:52.403128+00:00"
|
||||
---
|
||||
|
||||
Decided to build a full Foundry VTT v13 system for Vagabond RPG instead of using Custom System Builder (CSB). Reasons: (1) Variable crit thresholds per skill require Active Effects which CSB handles poorly, (2) Dynamic spell casting with delivery+duration+damage customization needs custom dialogs, (3) Future multiclass support requires proper class-as-item architecture, (4) Parchment theme with accessibility needs full CSS control. Project location: /mnt/NV2/Development/vagabond-rpg-foundryvtt. See PROJECT_ROADMAP.json for 98 tasks across 11 phases.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 0b256ec4-a9d8-4831-b207-d9752cff7dc8
|
||||
type: decision
|
||||
title: "Vagabond RPG roadmap references design docs"
|
||||
tags: [vagabond-rpg, documentation, pattern]
|
||||
importance: 0.3
|
||||
confidence: 0.8
|
||||
created: "2025-12-16T18:17:14.505414+00:00"
|
||||
updated: "2025-12-16T18:17:14.505414+00:00"
|
||||
---
|
||||
|
||||
Updated PROJECT_ROADMAP.json task 2.12 to reference the class level-up design doc in NoteDiscovery (gaming/vagabond-rpg/class-level-system-design.md) and the prototype branch commit. This establishes pattern of linking roadmap tasks to detailed design documentation.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: b286a8fb-6205-4d5c-9bfd-d21835200329
|
||||
type: decision
|
||||
title: "Vagabond RPG testing strategy documented"
|
||||
tags: [vagabond-rpg, testing, documentation, decision]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-14T03:20:54.225550+00:00"
|
||||
updated: "2025-12-14T03:20:54.225550+00:00"
|
||||
---
|
||||
|
||||
Created comprehensive testing strategy note at gaming/vagabond-rpg/testing-strategy in NoteDiscovery. Key patterns: 1) Unit tests use explicit method calls for isolation, 2) Integration tests wait for async lifecycle methods with setTimeout, 3) Methods must be idempotent to handle race conditions, 4) Calculate values directly from system data (not data model methods) for embedded items, 5) Add error handling for 'Actor does not exist' in lifecycle methods. Reference added to CLAUDE.md.
|
||||
@ -0,0 +1,49 @@
|
||||
---
|
||||
id: 0d5b864a-7787-4ee5-841d-b8b1556d6425
|
||||
type: error
|
||||
title: "Critical: Wrong API parameter name - used 'dem_week' instead of 'demotion_week'"
|
||||
tags: [major-domo, python, api, parameter-naming, production, critical]
|
||||
importance: 0.9
|
||||
confidence: 0.8
|
||||
created: "2026-02-02T03:29:04.489436+00:00"
|
||||
updated: "2026-02-02T03:29:04.489436+00:00"
|
||||
relations:
|
||||
- target: 69415fc4-08c7-497a-b1ef-2f135c6400f2
|
||||
type: CAUSES
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
**Error**: Player team updates sent wrong parameter name to API, causing dem_week values to be ignored.
|
||||
|
||||
**Problem**: Code was sending 'dem_week' as query parameter, but API expects 'demotion_week'.
|
||||
|
||||
**Root Cause**: Developer misunderstood API parameter naming during initial implementation. Tests verified internal logic but not the actual API parameter name being sent.
|
||||
|
||||
**Impact**:
|
||||
- v2.29.0 and v2.29.1 sent dem_week parameter which API silently ignored
|
||||
- All player updates (transaction freeze, IL moves, draft picks) failed to set demotion_week field
|
||||
- No errors raised - parameter was simply not recognized by API
|
||||
|
||||
**Fix**: Changed parameter name in services/player_service.py line 426:
|
||||
- WRONG: updates['dem_week'] = dem_week
|
||||
- CORRECT: updates['demotion_week'] = dem_week
|
||||
|
||||
**Internal Naming**: Kept Python parameter name as 'dem_week' for code brevity, but map to 'demotion_week' when sending to API.
|
||||
|
||||
**Test Updates**: Updated 4 tests to verify correct parameter name is sent to API.
|
||||
|
||||
**Prevention Strategies**:
|
||||
1. Always verify API parameter names against API documentation/OpenAPI spec
|
||||
2. Test against actual API or accurate mocks with exact parameter names
|
||||
3. Use API client type hints that match exact API contract
|
||||
4. Add integration tests that verify HTTP request parameters
|
||||
5. Check API response for success indicators, not just lack of errors
|
||||
|
||||
**Quick Fix Pattern**:
|
||||
1. Change parameter name in dictionary: 'dem_week' → 'demotion_week'
|
||||
2. Update all test assertions to check for correct parameter name
|
||||
3. Run tests to verify: pytest tests/test_services_player_service.py
|
||||
4. Deploy hotfix immediately
|
||||
|
||||
**Deployment Impact**: Required hotfix v2.29.2 to correct v2.29.0/v2.29.1.
|
||||
@ -0,0 +1,42 @@
|
||||
---
|
||||
id: ffdfef93-1292-4f98-9f81-a347fd22fc91
|
||||
type: error
|
||||
title: "Production crash: Missing Optional import in type hint caused NameError"
|
||||
tags: [major-domo, python, production, error, deployment, type-hints, imports]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2026-02-02T03:19:04.031805+00:00"
|
||||
updated: "2026-02-02T03:19:04.031805+00:00"
|
||||
relations:
|
||||
- target: 69415fc4-08c7-497a-b1ef-2f135c6400f2
|
||||
type: CAUSES
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
**Error**: Bot crashed on production startup with 'NameError: name Optional is not defined' in transaction_freeze.py line 688.
|
||||
|
||||
**Root Cause**: Added type hint 'dem_week: Optional[int] = None' to method parameter but forgot to import Optional from typing module.
|
||||
|
||||
**Why It Happened**:
|
||||
- Local development and tests passed because the file wasn't fully reloaded
|
||||
- Python only raises NameError when the code path is actually executed (at class definition time)
|
||||
- Type hints are evaluated at runtime in some contexts
|
||||
|
||||
**Fix**: Added Optional to imports: 'from typing import Dict, List, Tuple, Set, Optional'
|
||||
|
||||
**Prevention Strategies**:
|
||||
1. Always run full test suite before deploying (pytest --tb=short -q)
|
||||
2. Check imports when adding new type hints
|
||||
3. Use IDE with static type checking (Pylance) to catch missing imports
|
||||
4. Consider using 'from __future__ import annotations' for deferred type hint evaluation
|
||||
5. Test imports explicitly: 'python -c "import tasks.transaction_freeze"'
|
||||
|
||||
**Quick Fix Pattern**:
|
||||
1. Identify missing import from traceback
|
||||
2. Add import to file
|
||||
3. Commit: 'Fix missing X import in Y'
|
||||
4. Deploy hotfix with patch version bump
|
||||
5. Verify with docker logs
|
||||
|
||||
**Deployment Impact**: v2.29.0 crashed immediately, required hotfix v2.29.1 within minutes. Total downtime: ~3 minutes.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 5ad98df5-dbbb-4605-bd24-c095d0827dcb
|
||||
type: fix
|
||||
title: "Add default ORDER BY id to GameRewards.select() list endpoint"
|
||||
tags: [paper-dynasty, python, postgres-migration, order-by]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2026-02-01T01:29:10.023762+00:00"
|
||||
updated: "2026-02-01T01:29:10.023762+00:00"
|
||||
---
|
||||
|
||||
Modified gamerewards.py GET list endpoint to use GameRewards.select().order_by(GameRewards.id) for PostgreSQL migration compatibility. Ensures consistent row ordering across SQLite and PostgreSQL backends.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 1679f2be-c8ff-4762-99b1-0978bd753c47
|
||||
type: fix
|
||||
title: "Add default ORDER BY id to PackType list endpoint"
|
||||
tags: [paper-dynasty, postgresql, migration]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2026-02-01T01:29:10.248090+00:00"
|
||||
updated: "2026-02-01T01:29:10.248090+00:00"
|
||||
---
|
||||
|
||||
Modified GET /api/v2/packtypes endpoint to include default ordering: PackType.select().order_by(PackType.id). This ensures consistent row ordering for PostgreSQL migration compatibility.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 6423a9be-ea47-4a14-a963-86e24c4c71ce
|
||||
type: fix
|
||||
title: "Added default ORDER BY id to BattingCardRatings.select() in list endpoints"
|
||||
tags: [paper-dynasty, python, postgresql, migration]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2026-02-01T01:32:28.767585+00:00"
|
||||
updated: "2026-02-01T01:32:28.767585+00:00"
|
||||
---
|
||||
|
||||
Updated battingcardratings.py to add .order_by(BattingCardRatings.id) to three SELECT queries for PostgreSQL compatibility: (1) get_card_ratings() at line 173, (2) get_scouting_dfs() at line 215, (3) get_player_ratings() at line 689-691. This ensures consistent row ordering across SQLite and PostgreSQL databases.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 0670d2c7-f7bf-4244-bc9a-71d4a9a1130e
|
||||
type: fix
|
||||
title: "Added default ORDER BY id to MlbPlayer.select() endpoint"
|
||||
tags: [paper-dynasty, postgresql, migration, orm, ordering]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2026-02-01T01:29:45.531216+00:00"
|
||||
updated: "2026-02-01T01:29:45.531216+00:00"
|
||||
---
|
||||
|
||||
Added .order_by(MlbPlayer.id) to the GET /mlbplayers list endpoint (line 85 in mlbplayers.py). This ensures consistent row ordering for PostgreSQL migration compatibility and prevents non-deterministic results across database backends.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: ad7d6151-b1d9-4ee6-b31e-16bd338181f5
|
||||
type: fix
|
||||
title: "Added default ORDER BY id to notifications list endpoint"
|
||||
tags: [paper-dynasty, postgresql, migration, ordering]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2026-02-01T01:29:12.408391+00:00"
|
||||
updated: "2026-02-01T01:29:12.408391+00:00"
|
||||
---
|
||||
|
||||
Modified GET /api/v2/notifs endpoint in app/routers_v2/notifications.py to add order_by(Notification.id) to ensure consistent row ordering for PostgreSQL migration compatibility.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 08952bac-ce99-4b92-b9d9-edc9237c6bc6
|
||||
type: fix
|
||||
title: "Added default ordering to PitchingStat list endpoint"
|
||||
tags: [paper-dynasty, postgresql, migration, ordering]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2026-02-01T01:31:43.245752+00:00"
|
||||
updated: "2026-02-01T01:31:43.245752+00:00"
|
||||
---
|
||||
|
||||
Added .order_by(PitchingStat.id) to the main GET list endpoint in pitstats.py (line 61) to ensure consistent row ordering for PostgreSQL compatibility. The query now reads: PitchingStat.select().join(Card).join(Player).order_by(PitchingStat.id)
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: e2244428-f4e6-4f62-ab84-f81e395a8473
|
||||
type: fix
|
||||
title: "Added default ordering to StratPlay list endpoint"
|
||||
tags: [paper-dynasty, postgresql, migration]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2026-02-01T01:31:38.558200+00:00"
|
||||
updated: "2026-02-01T01:31:38.558200+00:00"
|
||||
---
|
||||
|
||||
Added .order_by(StratPlay.id) to StratPlay.select() in the GET list endpoint (line 180 of stratplays.py). This ensures consistent row ordering when querying StratPlay records, which is critical for PostgreSQL compatibility where result ordering is not guaranteed without explicit ORDER BY clause.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 3ec7209e-59ed-4111-9d6e-3fafbd2e64c6
|
||||
type: fix
|
||||
title: "API delete endpoint used wrong dict key"
|
||||
tags: [major-domo, database, api, fix]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2026-01-28T22:07:13.021452+00:00"
|
||||
updated: "2026-01-28T22:07:13.021452+00:00"
|
||||
---
|
||||
|
||||
The delete_custom_command_endpoint was accessing existing['creator_id'] but get_custom_command_by_id() returns 'creator_db_id'. Fixed to use correct key.
|
||||
12
graph/fixes/bestiary-stat-errors-from-pdf-audit-6bed46.md
Normal file
12
graph/fixes/bestiary-stat-errors-from-pdf-audit-6bed46.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 6bed4684-7561-4a18-9058-795bdf3383c2
|
||||
type: fix
|
||||
title: "Bestiary stat errors from PDF audit"
|
||||
tags: [vagabond-rpg, foundryvtt, bestiary, data-fix]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-18T18:59:59.104229+00:00"
|
||||
updated: "2025-12-18T18:59:59.104229+00:00"
|
||||
---
|
||||
|
||||
Fixed swapped stats between bestiary creature entries in vagabond-rpg-foundryvtt. Beetle Bombardier/Tiger had HD, HP, Armor, Morale swapped. Boar/Boar Giant had speeds swapped (40↔50). Cattle/Crab Giant had speeds swapped (20↔25). Beetle Giant Fire speed corrected to 40. Discovered by re-extracting PDF with pdftotext -raw which produces cleaner output than -layout for two-column PDFs.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 4c5b9fcd-feac-4cce-8773-6a9f745858e0
|
||||
type: fix
|
||||
title: "Clean PDF extraction text for Foundry textareas"
|
||||
tags: [vagabond-rpg, foundryvtt, pdf-extraction, fix]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-18T19:34:33.879088+00:00"
|
||||
updated: "2025-12-18T19:34:33.879088+00:00"
|
||||
---
|
||||
|
||||
When extracting text from PDFs for Foundry VTT compendiums: 1) Strip HTML tags since textareas show raw text not rendered HTML, 2) Fix mid-sentence line breaks from PDF column formatting by joining lines that don't end in sentence punctuation (.\!?:). This ensures descriptions display cleanly in sheet textareas.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: ef15149d-9386-4503-b6e0-c2d23bfae51e
|
||||
type: fix
|
||||
title: "Custom command delete UI showed success but didn't delete"
|
||||
tags: [major-domo, discord.py, fix, bug]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2026-01-28T22:01:40.394465+00:00"
|
||||
updated: "2026-01-28T22:01:40.394465+00:00"
|
||||
---
|
||||
|
||||
The delete confirmation view in views/custom_commands.py showed a success message when user clicked confirm, but never actually called custom_commands_service.delete_command(). Added the missing service call.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: d32832d7-cfce-4618-bb19-1497b11698a6
|
||||
type: fix
|
||||
title: "Discord autocomplete sends display text not value"
|
||||
tags: [major-domo, python, discord, autocomplete, fix]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-13T00:59:43.879353+00:00"
|
||||
updated: "2025-12-13T00:59:43.879353+00:00"
|
||||
---
|
||||
|
||||
When users select from Discord autocomplete dropdown, it sometimes sends the display text (e.g., 'Mason Miller (RP) - 2.50 sWAR') instead of the value ('Mason Miller'). Added _parse_player_name() function with regex to strip position and sWAR info from input. Pattern: r'^(.+?)\s*\([A-Z0-9]+\)\s*-\s*[\d.]+\s*sWAR$'
|
||||
12
graph/fixes/draft-monitor-missing-guild-variable-f78245.md
Normal file
12
graph/fixes/draft-monitor-missing-guild-variable-f78245.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: f7824582-0d80-401e-bd5b-c23ced0b737a
|
||||
type: fix
|
||||
title: "Draft monitor missing guild variable"
|
||||
tags: [major-domo, python, fix, discord, draft]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-13T00:46:25.432142+00:00"
|
||||
updated: "2025-12-13T00:46:25.432142+00:00"
|
||||
---
|
||||
|
||||
Bug: The _post_on_clock_announcement method in tasks/draft_monitor.py referenced 'guild' variable without defining it, causing role pings to silently fail after auto-draft picks. Fix: Added guild lookup from bot.get_guild(config.guild_id) at the start of the method. This was causing the draft results ping to not post the team role mention.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 9fa127bc-3950-495c-896f-32d8a312dae4
|
||||
type: fix
|
||||
title: "Draft monitor now pings team role instead of GM"
|
||||
tags: [major-domo, discord-app-v2, draft, ping, role, fix]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-13T00:41:00.170391+00:00"
|
||||
updated: "2025-12-13T00:41:00.170391+00:00"
|
||||
---
|
||||
|
||||
Changed draft on-clock announcement in tasks/draft_monitor.py to ping the team's Discord role (using team.lname) instead of pinging the GM directly (gmid). Uses discord.utils.get(guild.roles, name=team.lname) pattern from trade_channels.py. Falls back gracefully with warning if role not found.
|
||||
12
graph/fixes/draft-pick-service-api-parameter-fix-b51ca3.md
Normal file
12
graph/fixes/draft-pick-service-api-parameter-fix-b51ca3.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: b51ca30a-aae2-4865-9a62-4c797cbacc26
|
||||
type: fix
|
||||
title: "Draft pick service API parameter fix"
|
||||
tags: [major-domo, python, fix, api, draft]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-09T20:56:04.871403+00:00"
|
||||
updated: "2025-12-09T20:56:04.871403+00:00"
|
||||
---
|
||||
|
||||
Fixed incorrect API parameter names in draft_pick_service.py get_picks_by_team() method. Changed 'round_start' to 'pick_round_start' and 'round_end' to 'pick_round_end' to match the OpenAPI spec at https://sba.manticorum.com/api/openapi.json. This was new/untested code. Also documented that the public OpenAPI spec only contains GET endpoints - PATCH/POST/DELETE are authenticated internal operations not exposed publicly.
|
||||
12
graph/fixes/draft-recent-picks-off-by-one-error-dccfe5.md
Normal file
12
graph/fixes/draft-recent-picks-off-by-one-error-dccfe5.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: dccfe52e-1b02-4171-b188-26afd445f37a
|
||||
type: fix
|
||||
title: "Draft recent picks off-by-one error"
|
||||
tags: [major-domo, discord-bot, draft, fix, off-by-one]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-13T01:15:00.758311+00:00"
|
||||
updated: "2025-12-13T01:15:00.758311+00:00"
|
||||
---
|
||||
|
||||
Fixed off-by-one error in get_recent_picks service method. The method was subtracting 1 from overall_end, but callers already passed currentpick - 1. This caused the Last 5 picks list on OnTheClock embed to skip the most recent pick (showing 124-128 instead of 125-129 when pick 130 was on clock). Removed extra subtraction in draft_pick_service.py. Version 2.24.6.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: bf9b2bc3-bed6-47bd-b4e0-1bbe6147ce2d
|
||||
type: fix
|
||||
title: "Draft results post to result_channel fix"
|
||||
tags: [major-domo, discord-bot, draft, fix]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-13T01:08:30.975064+00:00"
|
||||
updated: "2025-12-13T01:08:30.975064+00:00"
|
||||
---
|
||||
|
||||
Fixed /draft command to post player cards to result_channel. The manual /draft command was only posting draft cards to ping_channel but not result_channel, while auto-draft correctly posted to both. Added code block in commands/draft/picks.py (lines 361-377) to post draft cards to result_channel. Version 2.24.5.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 83dbebd0-b523-4e4d-9351-b1e4fd81999e
|
||||
type: fix
|
||||
title: "DraftList nested Player.team_id extraction bug"
|
||||
tags: [major-domo, python, fix, draft, pydantic, nested-objects]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-11T18:25:14.873571+00:00"
|
||||
updated: "2025-12-11T18:25:14.873571+00:00"
|
||||
---
|
||||
|
||||
Fixed auto-draft failure where player.team_id was None for all DraftList entries. Root cause: Pydantic's default nested object creation calls Player(**data) directly, NOT Player.from_api_data(data). Since Player.from_api_data() extracts team_id from nested team object (line 90), but wasn't being called, player.team_id remained None. Fix: Added DraftList.from_api_data() override that explicitly calls Player.from_api_data() and Team.from_api_data() for nested objects. The check 'player.team_id \!= config.free_agent_team_id' was evaluating 'None \!= 547' = True, skipping ALL players. Files: models/draft_list.py (added from_api_data), tests/test_models.py (added regression test).
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: b9f0edd4-8752-42a4-a4d9-5a984ae741d0
|
||||
type: fix
|
||||
title: "Fix pack type grouping in packs display"
|
||||
tags: [paper-dynasty, python, discord-bot, fix]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2026-01-08T20:22:13.376080+00:00"
|
||||
updated: "2026-01-08T20:22:13.376080+00:00"
|
||||
---
|
||||
|
||||
In cogs/economy_new/packs.py, p_group was only set if pack type already existed in p_data dict, causing new pack types to be silently skipped. Fixed by unconditionally setting p_group and initializing the list if pack type doesn't exist.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 7888f693-4914-437b-97f0-81906fbfe69e
|
||||
type: fix
|
||||
title: "Fix Player model validation in draft pick test"
|
||||
tags: [major-domo, python, test-fix, pydantic]
|
||||
importance: 0.4
|
||||
confidence: 0.8
|
||||
created: "2025-12-10T04:30:50.680312+00:00"
|
||||
updated: "2025-12-10T04:30:50.680312+00:00"
|
||||
---
|
||||
|
||||
Added required fields (wara, image, season, pos_1) to Player instantiation in test_patch_draftpick_success test. The Player Pydantic model requires these fields but the test was only providing id, name, and team.
|
||||
12
graph/fixes/fix-resolution-phase-control-bug-020611.md
Normal file
12
graph/fixes/fix-resolution-phase-control-bug-020611.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 02061144-2ba6-4600-851d-92bd7dac1c9c
|
||||
type: fix
|
||||
title: "Fix resolution phase control bug"
|
||||
tags: [strat-gameplay-webapp, vue, typescript, websocket, fix]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2026-01-14T05:47:38.194919+00:00"
|
||||
updated: "2026-01-14T05:47:38.194919+00:00"
|
||||
---
|
||||
|
||||
Fixed bug where isMyTurn returned false during resolution phase, preventing either player from seeing the dice roller. The batting team now has control during resolution since they read their card. Also added demo mode where myTeamId returns whichever team needs to act for single-player testing.
|
||||
@ -0,0 +1,40 @@
|
||||
---
|
||||
id: 775506ce-ed06-4c36-95f3-73379855b44a
|
||||
type: fix
|
||||
title: "High CPU on Docker host from avahi-daemon and GNOME"
|
||||
tags: [cpu, docker, avahi, gnome, gdm, performance, homelab, fix]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-20T04:36:05.718983+00:00"
|
||||
updated: "2025-12-20T04:36:05.718983+00:00"
|
||||
relations:
|
||||
- target: 62ee21e8-2b56-4d38-a73d-47e2724f08c6
|
||||
type: BUILDS_ON
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
**Problem:** Docker host showing constant ~12% CPU usage from background services.
|
||||
|
||||
**Root Cause:**
|
||||
1. avahi-daemon (mDNS) constantly processing Docker veth interface changes (67+ hours accumulated CPU)
|
||||
2. gvfs-udisks2-volume-monitor (GNOME disk monitor) running unnecessarily on server
|
||||
3. gdm and gnome-shell running on headless server
|
||||
|
||||
**Solution:**
|
||||
```bash
|
||||
# Disable avahi (including socket to prevent respawn)
|
||||
sudo systemctl stop avahi-daemon.socket avahi-daemon
|
||||
sudo systemctl disable avahi-daemon.socket avahi-daemon
|
||||
|
||||
# Disable GNOME desktop
|
||||
sudo systemctl stop gdm
|
||||
sudo systemctl disable gdm
|
||||
|
||||
# Kill lingering processes
|
||||
sudo pkill -f gvfs-udisks2-volume-monitor
|
||||
```
|
||||
|
||||
**Result:** ~12% CPU and 180MB RAM recovered.
|
||||
|
||||
**When to apply:** Any Docker host with desktop environment installed that doesn't need GUI access.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 1aa4308c-aae6-4226-a6c6-a79c767d0540
|
||||
type: fix
|
||||
title: "IL moves bypass transaction freeze for log posting"
|
||||
tags: [major-domo, python, fix, transactions, freeze]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-17T04:17:36.427610+00:00"
|
||||
updated: "2025-12-17T04:17:36.427610+00:00"
|
||||
---
|
||||
|
||||
Refined transaction freeze bypass to allow /ilmove (IL moves) to always post to #transaction-log, even during freeze period. IL moves are intra-team transactions (ML ↔ MiL ↔ IL) that should be immediately visible since they don't reveal competitive information. Changed views/transaction_embed.py lines 294-297 to remove freeze check for immediate submissions. Also removed misleading 'hidden during freeze period' message from success response.
|
||||
12
graph/fixes/missing-handlebars-join-helper-b099f7.md
Normal file
12
graph/fixes/missing-handlebars-join-helper-b099f7.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: b099f713-17ad-4952-a63c-1b21ea75c816
|
||||
type: fix
|
||||
title: "Missing Handlebars join helper"
|
||||
tags: [vagabond-rpg, foundryvtt, handlebars, fix]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-16T20:46:30.576546+00:00"
|
||||
updated: "2025-12-16T20:46:30.576546+00:00"
|
||||
---
|
||||
|
||||
Item sheets for class and perk types failed to render with 'Missing helper: join' error. Templates used {{join arr ", "}} but helper was never registered. Fixed by adding Handlebars.registerHelper('join', (arr, separator) => arr.join(separator)) in vagabond.mjs.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: bf0fd4cf-7d90-4159-8c09-0bc523a7eb30
|
||||
type: fix
|
||||
title: "OAuth callback redirect with URL fragment"
|
||||
tags: [mantimon-tcg, python, oauth, security]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2026-01-28T06:19:13.200899+00:00"
|
||||
updated: "2026-01-28T06:19:13.200899+00:00"
|
||||
---
|
||||
|
||||
Discord OAuth callback now redirects to frontend with tokens in URL fragment (not query params). Fragment is more secure because it's not sent to server, only accessible by frontend JavaScript. Also fixed deps.py import from get_session_dependency to get_session.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 03a346c2-6540-4648-b8c7-b6a312f7d54e
|
||||
type: fix
|
||||
title: "PostgreSQL migration: DateTimeField defaults must be datetime objects"
|
||||
tags: [paper-dynasty, postgresql, migration, fix, peewee]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2026-01-31T21:56:25.802935+00:00"
|
||||
updated: "2026-01-31T21:56:25.802935+00:00"
|
||||
---
|
||||
|
||||
Paperdex and GauntletRun models had DateTimeField(default=int(datetime.timestamp(...)*1000)) which worked in SQLite but fails in PostgreSQL with 'column is of type timestamp without time zone but expression is of type bigint'. Fix: Use DateTimeField(default=datetime.now) instead. Files: app/db_engine.py and db_engine.py
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: c9f0d612-3f33-47ed-953d-682df63c8ed4
|
||||
type: fix
|
||||
title: "PostgreSQL migration: get_team_by_owner returns wrong team"
|
||||
tags: [paper-dynasty, postgresql, migration, fix, discord-app]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2026-01-31T21:50:27.501720+00:00"
|
||||
updated: "2026-01-31T21:50:27.501720+00:00"
|
||||
---
|
||||
|
||||
After PostgreSQL migration, get_team_by_owner() in discord-app returned the gauntlet team instead of the main team because PostgreSQL query ordering is undefined without ORDER BY. SQLite happened to return teams in a consistent order. Fix: Loop through teams and prefer the one without 'gauntlet' in the abbrev. Files: helpers.py and helpers/main.py
|
||||
12
graph/fixes/ranged-attacks-use-awareness-stat-fdc0b9.md
Normal file
12
graph/fixes/ranged-attacks-use-awareness-stat-fdc0b9.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: fdc0b996-2126-4dce-85eb-4e8a8a9e1508
|
||||
type: fix
|
||||
title: "Ranged attacks use Awareness stat"
|
||||
tags: [vagabond-rpg, foundry-vtt, fix, attacks]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-18T01:05:46.015980+00:00"
|
||||
updated: "2025-12-18T01:05:46.015980+00:00"
|
||||
---
|
||||
|
||||
Fixed character-sheet.mjs to use Awareness instead of Dexterity for ranged attacks. The config.mjs and weapon.mjs already had the correct stat - only the sheet had the inconsistency.
|
||||
12
graph/fixes/restrict-injury-logging-to-team-gms-adaf81.md
Normal file
12
graph/fixes/restrict-injury-logging-to-team-gms-adaf81.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: adaf8114-cc4b-4fbd-a0c2-a64943ff534e
|
||||
type: fix
|
||||
title: "Restrict injury logging to team GMs"
|
||||
tags: [major-domo, discord, python, security, fix]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-19T06:13:50.391769+00:00"
|
||||
updated: "2025-12-19T06:13:50.391769+00:00"
|
||||
---
|
||||
|
||||
Security fix for /injury roll command: removed user_id from ConfirmationView so only the player's team GM(s) can click Log Injury button. Previously anyone who ran the command could log injuries for any player. Now anyone can see the roll result but only authorized GMs can record injuries.
|
||||
12
graph/fixes/screw-hole-height-adjustment-005a40.md
Normal file
12
graph/fixes/screw-hole-height-adjustment-005a40.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 005a40a0-8e86-43e8-8c2d-a8823c8fc17e
|
||||
type: fix
|
||||
title: "Screw hole height adjustment"
|
||||
tags: [openscad-models, openscad, 3d-printing]
|
||||
importance: 0.3
|
||||
confidence: 0.8
|
||||
created: "2025-12-21T00:07:38.649947+00:00"
|
||||
updated: "2025-12-21T00:07:38.649947+00:00"
|
||||
---
|
||||
|
||||
Adjusted main screw hole height from 5.6mm to 6.0mm in extended GFCI plate for better fit.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 369f032e-a6f7-4ad9-a38c-945aa862cd98
|
||||
type: fix
|
||||
title: "Spell cast dialog buttons and scrollbar fix"
|
||||
tags: [vagabond-rpg, foundryvtt, fix, ui]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-17T20:47:12.001050+00:00"
|
||||
updated: "2025-12-17T20:47:12.001050+00:00"
|
||||
---
|
||||
|
||||
Fixed spell cast dialog favor/hinder buttons by removing duplicate event listeners - parent class already adds them via super._onRender(). Added scrollbar support to all roll dialogs with overflow-y: auto, max-height: 80vh, and custom scrollbar styling on .window-content element.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 4e7066fc-b0db-4479-97f3-376bb9c8cba5
|
||||
type: fix
|
||||
title: "Standardized sWAR display to 2 decimals"
|
||||
tags: [major-domo, python, formatting, swar, fix]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-10T02:16:52.867543+00:00"
|
||||
updated: "2025-12-10T02:16:52.867543+00:00"
|
||||
---
|
||||
|
||||
Fixed 10 locations across transactions.py, draft.py, and players.py where sWAR/WAR values were displayed without consistent formatting. All user-facing WAR displays now use :.2f format. Roster displays use >5.2f for right-aligned formatting with 2 decimals.
|
||||
@ -0,0 +1,38 @@
|
||||
---
|
||||
id: 01944bbd-666b-4bed-b33b-422596618b81
|
||||
type: fix
|
||||
title: "Successfully fixed Paper Dynasty API 502 errors via manual Pi-hole DNS cleanup"
|
||||
tags: [paper-dynasty, pihole, v6, dns, "502", fix, cloudflare, homelab]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2026-02-07T15:13:11.809193+00:00"
|
||||
updated: "2026-02-07T15:13:11.809193+00:00"
|
||||
---
|
||||
|
||||
## What We Fixed
|
||||
Paper Dynasty API (pd.manticorum.com) was returning 502 Bad Gateway errors
|
||||
|
||||
## Root Cause Diagnosis
|
||||
1. pd.manticorum.com resolved to 10.10.0.16 (local Pi-hole)
|
||||
2. Pi-hole had NPM proxy rule forwarding to akamai:8002
|
||||
3. NPM couldn't reach akamai backend → 502 error
|
||||
4. User removed NPM proxy rule to use Cloudflare instead
|
||||
5. BUT Pi-hole v6 DNS records remained in TWO locations:
|
||||
- /etc/pihole/pihole.toml (hosts array)
|
||||
- /etc/pihole/hosts/custom.list
|
||||
|
||||
## Manual Fix That Worked
|
||||
ssh pihole "docker exec pihole sed -i '/pd\.manticorum\.com/d' /etc/pihole/pihole.toml /etc/pihole/hosts/custom.list && docker exec pihole pihole reloaddns"
|
||||
|
||||
## Verification
|
||||
# DNS now resolves to Cloudflare
|
||||
dig pd.manticorum.com → 104.21.19.27, 172.67.184.232
|
||||
|
||||
# API works
|
||||
curl https://pd.manticorum.com/api/v2/teams/66 → Success!
|
||||
- KSK (team 42): has_guide = true ✓
|
||||
- Gauntlet-KSK (team 66): has_guide = true ✓
|
||||
|
||||
## Key Learning
|
||||
Pi-hole v6 stores DNS records in BOTH pihole.toml AND hosts/custom.list
|
||||
Must update both files for changes to take effect
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: ed668fcc-2403-4c9c-9606-db173a2a699b
|
||||
type: fix
|
||||
title: "sWAR formatting changed from 1 to 2 decimal places"
|
||||
tags: [major-domo, discord-app-v2, swar, formatting, fix]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-13T00:26:16.360629+00:00"
|
||||
updated: "2025-12-13T00:26:16.360629+00:00"
|
||||
---
|
||||
|
||||
Player sWAR values were displaying with 1 decimal place (e.g., 2.0) but needed 2 decimal places (e.g., 1.97) for proper precision. Changed all .1f formatting to .2f across 9 files: views/players.py, views/embeds.py, views/common.py, commands/examples/enhanced_player.py, commands/teams/info.py, services/roster_service.py, commands/transactions/management.py, utils/transaction_logging.py, tasks/transaction_freeze.py
|
||||
12
graph/fixes/transaction-api-week-start-parameter-bde32b.md
Normal file
12
graph/fixes/transaction-api-week-start-parameter-bde32b.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: bde32b12-5f60-4d69-95b0-d26d72fe4eaa
|
||||
type: fix
|
||||
title: "Transaction API week_start parameter"
|
||||
tags: [major-domo, python, api, fix, transaction]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-22T04:03:28.945283+00:00"
|
||||
updated: "2025-12-22T04:03:28.945283+00:00"
|
||||
---
|
||||
|
||||
The transactions API returns keepers (week=0) when using 'week' parameter. Use 'week_start' instead to filter out earlier weeks and only get transactions from the target week onwards.
|
||||
12
graph/fixes/transaction-freeze-bypass-bug-fix-baefb7.md
Normal file
12
graph/fixes/transaction-freeze-bypass-bug-fix-baefb7.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: baefb777-676d-4c7f-9a43-61cef4ec000b
|
||||
type: fix
|
||||
title: "Transaction freeze bypass bug fix"
|
||||
tags: [major-domo, python, discord, fix, transactions]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-15T23:47:42.683540+00:00"
|
||||
updated: "2025-12-15T23:47:42.683540+00:00"
|
||||
---
|
||||
|
||||
Fixed bug where transactions were posted to #transaction-log even when Current.freeze=True. Added freeze state checks in views/transaction_embed.py before calling post_transaction_to_log() in both scheduled (/dropadd) and immediate (/ilmove) submission handlers. When frozen, transactions are saved to DB but NOT posted to the public channel until Saturday processing.
|
||||
12
graph/fixes/voice-server-default-voice-config-fix-c63f97.md
Normal file
12
graph/fixes/voice-server-default-voice-config-fix-c63f97.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: c63f975c-6e17-4c77-a217-78051a7ee12f
|
||||
type: fix
|
||||
title: "Voice server default voice config fix"
|
||||
tags: [voice-server, python, pydantic, systemd, fix]
|
||||
importance: 0.5
|
||||
confidence: 0.8
|
||||
created: "2025-12-19T06:35:19.999247+00:00"
|
||||
updated: "2025-12-19T06:35:19.999247+00:00"
|
||||
---
|
||||
|
||||
Fixed default voice configuration in voice-server. The Pydantic NotifyRequest model had a hardcoded default voice that bypassed settings.default_voice from .env. Changed voice field to default=None so route handler uses settings. Also added EnvironmentFile directive to systemd service for reliable .env loading.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: ad5fc089-effb-4b32-b7e5-feab34bbe415
|
||||
type: fix
|
||||
title: "Voice server tests for configurable defaults"
|
||||
tags: [voice-server, python, pytest, testing, fix]
|
||||
importance: 0.4
|
||||
confidence: 0.8
|
||||
created: "2025-12-19T06:37:28.669441+00:00"
|
||||
updated: "2025-12-19T06:37:28.669441+00:00"
|
||||
---
|
||||
|
||||
Updated voice-server tests to handle configurable default voice. Tests now check for valid string values rather than hardcoded 'en_US-lessac-medium', allowing default voice to be set via .env without breaking tests. Changed NotifyRequest.voice to default=None so route handler uses settings.default_voice.
|
||||
@ -0,0 +1,18 @@
|
||||
---
|
||||
id: d0d1a325-a308-474a-baf7-6939a76a136b
|
||||
type: general
|
||||
title: "MemoryGraph MCP Installation and Protocol"
|
||||
tags: [pai, claude-code, memorygraph, mcp, setup, configuration]
|
||||
importance: 0.8
|
||||
confidence: 0.8
|
||||
created: "2025-12-06T16:25:59.811824+00:00"
|
||||
updated: "2025-12-06T16:25:59.811850+00:00"
|
||||
relations:
|
||||
- target: 991e1162-d73c-4b6c-a27f-77aa0f9b9a68
|
||||
type: RELATED_TO
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
context: "Both part of PAI infrastructure improvements - NoteDiscovery skill migration and MemoryGraph setup happened in same session as part of context management strategy"
|
||||
---
|
||||
|
||||
Installed MemoryGraph MCP for persistent graph-based memory across sessions. Used SQLite backend (zero config, stores at ~/.memorygraph/memory.db). Installation: pipx install memorygraphMCP, then 'claude mcp add --scope user memorygraph -- memorygraph --profile extended'. Extended profile provides 11 tools including get_memory_statistics. Added Memory Protocol section to ~/.claude/CLAUDE.md with: required recall before complex work, automatic storage triggers (bug fix, git commit, architecture decision, pattern, config, troubleshooting), importance scale (0.8-1.0 critical, 0.5-0.7 standard, 0.3-0.4 minor), tag requirements (project, technology, category), and relationship types (SOLVES, CAUSES, BUILDS_ON, etc.).
|
||||
@ -0,0 +1,18 @@
|
||||
---
|
||||
id: 991e1162-d73c-4b6c-a27f-77aa0f9b9a68
|
||||
type: general
|
||||
title: "NoteDiscovery Skill Creation - MCP to Skill Migration"
|
||||
tags: [pai, claude-code, skills, notediscovery, architecture, migration]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-06T16:25:58.700151+00:00"
|
||||
updated: "2025-12-06T16:25:58.700190+00:00"
|
||||
relations:
|
||||
- target: d0d1a325-a308-474a-baf7-6939a76a136b
|
||||
type: RELATED_TO
|
||||
direction: outgoing
|
||||
strength: 0.5
|
||||
context: "Both part of PAI infrastructure improvements - NoteDiscovery skill migration and MemoryGraph setup happened in same session as part of context management strategy"
|
||||
---
|
||||
|
||||
Converted NoteDiscovery from MCP to Skill for more dynamic CRUD operations. MCP required restart for changes and had static tool definitions. Skill approach provides: natural language routing, on-demand context loading, composable operations, immediate extensibility via SKILL.md edits. Created ~/.claude/skills/notediscovery/ with SKILL.md (triggers, workflows, folder conventions) and client.py (HTTP client with session auth, auto-loads .env). Client supports search, read, save, delete, tags, graph operations plus convenience methods (append_to_note, search_or_create, note_exists). Credentials stored in .env with 600 permissions. Removed MCP from .mcp.json and mcp-manager skill registry.
|
||||
12
graph/general/roadmap-update-for-vagabond-rpg-946dfa.md
Normal file
12
graph/general/roadmap-update-for-vagabond-rpg-946dfa.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 946dfa83-aef3-46d1-98d7-305ec382b7c6
|
||||
type: general
|
||||
title: "Roadmap update for Vagabond RPG"
|
||||
tags: [vagabond-rpg, foundry-vtt, documentation]
|
||||
importance: 0.3
|
||||
confidence: 0.8
|
||||
created: "2025-12-18T16:36:28.991203+00:00"
|
||||
updated: "2025-12-18T16:36:28.991203+00:00"
|
||||
---
|
||||
|
||||
Updated PROJECT_ROADMAP.json with notes on recent enhancements: crit threshold stepper in dialogs, separate damage roll buttons for attacks/spells, attack skills trained toggle, ranged uses Awareness, and Active Effect reference documentation.
|
||||
12
graph/general/scouting-reports-regeneration-8c3e67.md
Normal file
12
graph/general/scouting-reports-regeneration-8c3e67.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: 8c3e67ee-3987-4e1a-9fbb-5f9d59ec080e
|
||||
type: general
|
||||
title: "Scouting reports regeneration"
|
||||
tags: [paper-dynasty, scouting, workflow]
|
||||
importance: 0.3
|
||||
confidence: 0.8
|
||||
created: "2025-12-23T15:17:35.672984+00:00"
|
||||
updated: "2025-12-23T15:17:35.672984+00:00"
|
||||
---
|
||||
|
||||
Ran pd-cards scouting all to regenerate scouting CSVs for all cardsets. Scouting must be run globally without --cardset-id flag to include all cards and overwrite the CSV files.
|
||||
12
graph/general/stl-export-for-offset-plate-ed8155.md
Normal file
12
graph/general/stl-export-for-offset-plate-ed8155.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: ed815546-1da5-49bc-93cd-7ff5808c0077
|
||||
type: general
|
||||
title: "STL export for offset plate"
|
||||
tags: [openscad-models, openscad, 3d-printing]
|
||||
importance: 0.3
|
||||
confidence: 0.8
|
||||
created: "2025-12-21T00:22:49.201615+00:00"
|
||||
updated: "2025-12-21T00:22:49.201615+00:00"
|
||||
---
|
||||
|
||||
Exported gfci-paddle-switch-extended-offset.stl from OpenSCAD model.
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
id: 7f81616e-aa4f-4f39-afe6-bd578d922793
|
||||
type: general
|
||||
title: "Vagabond RPG complete spell reference"
|
||||
tags: [vagabond-rpg, spells, magic, ttrpg, reference]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2025-12-12T16:53:04.283658+00:00"
|
||||
updated: "2025-12-12T16:53:04.283658+00:00"
|
||||
relations:
|
||||
- target: fc01b027-18c5-492d-8ef7-df7cc02b23e9
|
||||
type: BUILDS_ON
|
||||
direction: outgoing
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
Full spell text for all 45+ Vagabond RPG spells stored in NoteDiscovery at gaming/vagabond-rpg/spells-full-text. Each spell includes: Damage Base, full effect description, and Crit bonus. Spells include: Amplify, Animate, Apoplex, Aqua, Babble, Beast, Bless, Blink, Burn, Charm, Color, Confuse, Control, Cure, Disintegrate, Dispel, Enchant, Enflesh, Erupt, Exalt, Fade, Fear, Fog, Forge, Freeze, Frostburn, Gas, Goop, Guide, Gust, Hold, Hymn, Junk, Kinesis, Knock, Leech, Levitate, Life, Light, Mend, Mirage, Moon, Morph, Mute, Polymorph, Portal, Raise, Rust, Shade, Shrink, Sleep, Speak, Sprout, Tempo, Terraform, Truth, Ward, Zap. Query NoteDiscovery for specific spell details.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: ff370796-b7c0-46b6-9118-4f3784eae041
|
||||
type: general
|
||||
title: "Voice server operations documentation"
|
||||
tags: [voice-server, documentation, systemd, operations]
|
||||
importance: 0.4
|
||||
confidence: 0.8
|
||||
created: "2025-12-19T06:22:30.515263+00:00"
|
||||
updated: "2025-12-19T06:22:30.515263+00:00"
|
||||
---
|
||||
|
||||
Created OPERATIONS.md with systemd management commands, journalctl log viewing, API examples, configuration reference, and troubleshooting guide for the voice-server project.
|
||||
@ -0,0 +1,12 @@
|
||||
---
|
||||
id: ff9ac81b-301c-4cbd-9c7a-43c306c51407
|
||||
type: general
|
||||
title: "Voice server OPERATIONS.md urgent flag docs"
|
||||
tags: [voice-server, documentation]
|
||||
importance: 0.3
|
||||
confidence: 0.8
|
||||
created: "2025-12-19T15:18:01.323574+00:00"
|
||||
updated: "2025-12-19T15:18:01.323574+00:00"
|
||||
---
|
||||
|
||||
Updated OPERATIONS.md to document the urgent flag feature for higher volume playback. Also fixed voice example to use lessac-high instead of removed lessac-medium.
|
||||
@ -0,0 +1,51 @@
|
||||
---
|
||||
id: 06bdf21f-dcc8-4951-bc80-45c4309987b0
|
||||
type: problem
|
||||
title: "Bambu Studio / Orca Slicer OpenGL rendering fails on NVIDIA Wayland"
|
||||
tags: [bambu-studio, orca-slicer, nvidia, wayland, opengl, egl, wxwidgets, 3d-printing, nobara, fedora]
|
||||
importance: 0.9
|
||||
confidence: 0.8
|
||||
created: "2025-12-11T05:51:03.440364+00:00"
|
||||
updated: "2025-12-11T05:51:03.440364+00:00"
|
||||
---
|
||||
|
||||
Both Bambu Studio and Orca Slicer (wxWidgets-based slicers) fail to render 3D preview on NVIDIA RTX 4080 SUPER + Wayland (Nobara/Fedora). Root cause: EGL_BAD_PARAMETER error - wxWidgets EGL implementation incompatible with NVIDIA Wayland.
|
||||
|
||||
SYMPTOMS:
|
||||
- App launches but 3D preview area is completely black/blank
|
||||
- Setup wizards show blank content
|
||||
- X button doesn't close windows (must pkill -9)
|
||||
- Error in logs: 'Could not create default EGL display: EGL_BAD_PARAMETER'
|
||||
|
||||
ATTEMPTED FIXES (all failed on Wayland):
|
||||
- __GLX_VENDOR_LIBRARY_NAME=nvidia
|
||||
- GDK_BACKEND=x11 (XWayland)
|
||||
- MESA_LOADER_DRIVER_OVERRIDE=zink
|
||||
- Disabling enable_opengl_multi_instance in config
|
||||
- Orca Slicer (same wxWidgets issue)
|
||||
|
||||
WINE ATTEMPT:
|
||||
- Wine install works for slicing/preview
|
||||
- Network plugin fails to load (bambu_networking.dll)
|
||||
- Error: 'can not Load Library' - Wine can't execute networking DLL
|
||||
- Useless without network features
|
||||
|
||||
SOLUTION:
|
||||
- Log into X11 session (Plasma X11) instead of Wayland
|
||||
- At SDDM login screen, select session type before logging in
|
||||
- User has auto-login enabled (SDDM config: /etc/sddm.conf)
|
||||
|
||||
NEXT STEPS:
|
||||
1. User logs out to get SDDM login screen
|
||||
2. Select 'Plasma (X11)' session
|
||||
3. Test Bambu Studio or Orca Slicer in X11
|
||||
4. If works, can create wrapper script with GDK_BACKEND=x11 for Wayland sessions
|
||||
|
||||
FILES:
|
||||
- Bambu Studio AppImage: ~/Applications/Bambu_Studio_linux_fedora-v02.04.00.70.AppImage
|
||||
- Orca Slicer AppImage: ~/Applications/OrcaSlicer.AppImage
|
||||
- Bambu config: ~/.config/BambuStudio/BambuStudio.conf
|
||||
|
||||
RELATED ISSUES:
|
||||
- https://github.com/bambulab/BambuStudio/issues/4626
|
||||
- https://github.com/bambulab/BambuStudio/issues/5038
|
||||
@ -0,0 +1,30 @@
|
||||
---
|
||||
id: f79584ea-e89d-4ba6-9b10-bc78d35eb92f
|
||||
type: problem
|
||||
title: "Duplicate constants.py files cause import pollution"
|
||||
tags: [paper-dynasty, python, architecture, import-chain, technical-debt]
|
||||
importance: 0.6
|
||||
confidence: 0.8
|
||||
created: "2025-12-08T03:46:37.031117+00:00"
|
||||
updated: "2025-12-08T03:46:37.031117+00:00"
|
||||
relations:
|
||||
- target: 54bb1474-3df8-4cf1-bab9-3ef4d4b3e42e
|
||||
type: SOLVES
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
Paper Dynasty discord-app has two constants.py files:
|
||||
1. discord-app/constants.py (root) - authoritative, updated regularly
|
||||
2. discord-app/helpers/constants.py - created during refactoring, becomes stale
|
||||
|
||||
helpers/__init__.py does:
|
||||
from helpers.main import * # Gets PD_SEASON from root
|
||||
from .constants import * # OVERWRITES with stale value!
|
||||
|
||||
This causes helpers.PD_SEASON to differ from constants.PD_SEASON even when both files are in the same codebase.
|
||||
|
||||
Future Fix Options:
|
||||
1. Remove helpers/constants.py entirely, use root constants.py only
|
||||
2. Have helpers/constants.py import from root: from constants import *
|
||||
3. Use explicit imports instead of wildcard star imports
|
||||
@ -0,0 +1,33 @@
|
||||
---
|
||||
id: 1052e91d-58ed-4308-87e8-e01d1143a146
|
||||
type: problem
|
||||
title: "Gitea API 403 Forbidden - insufficient token scopes"
|
||||
tags: [gitea, api, authentication, "403", token, scopes, troubleshooting, homelab]
|
||||
importance: 0.7
|
||||
confidence: 0.8
|
||||
created: "2026-02-04T05:10:33.498045+00:00"
|
||||
updated: "2026-02-04T05:10:33.498045+00:00"
|
||||
relations:
|
||||
- target: 13c13f73-fe1d-4227-a3d1-45498f8d3d3b
|
||||
type: REQUIRES
|
||||
direction: incoming
|
||||
strength: 0.5
|
||||
---
|
||||
|
||||
PROBLEM: Gitea API returned 403 Forbidden with message 'token does not have at least one of required scope(s): [read:user]'
|
||||
|
||||
ROOT CAUSE: API token was created without proper scopes/permissions selected in Gitea web UI.
|
||||
|
||||
SOLUTION: When creating Gitea API tokens:
|
||||
1. Go to Settings > Applications > Generate New Token
|
||||
2. MUST select appropriate scopes:
|
||||
- 'read:user' - required for user info endpoints
|
||||
- 'write:repository' or 'repo' - required for branch protection
|
||||
- Or select 'repo' (full repository access) which includes both
|
||||
|
||||
TESTING: Verify token scopes with:
|
||||
curl -H 'Authorization: token YOUR_TOKEN' https://git.manticorum.com/api/v1/user
|
||||
|
||||
ERROR PATTERN: Look for 'does not have at least one of required scope(s)' in 403 responses.
|
||||
|
||||
RELATED: For authenticated user's repos, use /api/v1/user/repos instead of /api/v1/users/{username}/repos
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user