Skip to content

Pure Phoenix Inventory, 2026-04-28

URL: https://mkdocs.justinsforge.com/memory/handoffs/pure-phoenix-inventory-2026-04-28/

Canonical inventory of forge state at the start of the Pure Phoenix refactor. Generated by three parallel Explore agents on 2026-04-28. This file is the source of truth for what exists, what is in scope for cleanup, what gets renamed, and what stays. Updated as phases close.

Plan: /home/justinwieb/.claude/plans/yes-lets-go-into-pure-phoenix.md Doctrine: FORGE-DOCTRINE.md

Decisions Locked (from AskUserQuestion 2026-04-28)

Decision Resolution
JustinWieb scope Legacy site only. Brand directories (JustinWieb-VR, JustinWieb-Tech) and personal-identifier mentions stay.
Greg bot fate Hard delete, no replacement. Mobile chat-control surface surrendered.
Mount watchdog Folded into Phase 4.6 Drive subsystem redesign. Watchdog stays alive as bridge through Phase 3.
Naming form Tiered. Tier A forge-<function> for infrastructure (no env prefix, no -01 for singletons). Tier C friendly aliases (Sol, Venus, Vector) for personal endpoints.

Em-Dash Audit

Total fleet count: 2,883 em-dashes across 287 files. Hard rule per Section 9: zero allowed.

Distribution: 92% concentrated in memory/. 33% of persona-name uses are code-level identifiers, 67% prose.

Top 30 offending files:

Em-dashes File
280 memory/daily/2026-04-27.md
130 memory/daily/2026-04-13.md
112 memory/daily/2026-04-21.md
87 scripts/integrations/telegram/inbox_brain.py
87 comms/inbox/parent-session-wellness-status.md
85 memory/daily/2026-04-23.md
80 memory/handoffs/forge-state-report-2026-04-28.md
65 memory/handoffs/forge-cleanup-inventory-2026-04-28.md
63 memory/handoffs/version-audit-2026-04-27.md
53 memory/handoffs/worker-builder-playbook-2026-04-23.md
53 memory/handoffs/jwvr-brand-travel-ops-2026-04-21.md
53 memory/handoffs/building-the-brain-life-os-inbox-2026-04-27.md
51 recent.md
51 memory/handoffs/decorator-crab-master-plan-2026-04-21.md
51 memory/daily/2026-03-15.md
43 memory/handoffs/forge-refactor-2026-04-28.md
42 memory/handoffs/device-energy-storage-2026-04-21.md
41 memory/handoffs/trading-bot-plan-2026-04-21.md
41 .claude/agents/chief-director.md
39 memory/daily/2026-04-24.md
36 memory/handoffs/forge-cleanup-2026-04-28.md
35 memory/daily/2026-04-28.md
34 memory/handoffs/frigate-reolink-optimization-2026-04-21.md
33 CLAUDE.md
30 memory/handoffs/notion-scaffold-life-os-jwvr-2026-04-28.md
29 memory/handoffs/wellness-stack-improvements-2026-04-28.md
27 sites/justinkrystal.com/README.md
27 memory/handoffs/telegram-3bot-fleet-plan-2026-04-23.md
24 memory/handoffs/arch-optimization-2026-04-21.md
23 docs/refactor/claude-md-notes-2026-04-28.md

Purge happens in Phase 2.2, programmatic with reviewed-batch (CP-6).

Naming Surfaces (renames in Phase 4.1)

Tier A: Infrastructure (must rename)

Systemd unit files (forge/infra/systemd/):

Current New Notes
forge-context-api.service unchanged already compliant
forge-dispatcher.service unchanged already compliant
forge-home-base.service forge-tmux-anchor.service DONE 2026-04-28 (Phase 4.1): unit renamed, daemon-reload, enabled, active. References swept across README + scripts/README + infra/systemd/{install,uninstall}.sh + steering draft.
forge-inbox-webhook.service unchanged already compliant
forge-mkdocs.service unchanged already compliant
forge-telegram-bot.service retired hard delete per Q2
forge-telegram-inbox.service forge-inbox-capture.service persona to function
forge-telegram-ava.service forge-lifeos-coordinator.service persona to function

LXC containers on Finn (Proxmox pct/qm rename) — DONE 2026-04-28 in Phase 4.1:

VMID Type Old New IP
100 VM homeassistant forge-homeassistant (Proxmox display only; internal HA hostname untouched) 192.168.86.70
101 LXC plex forge-plex (config; applies on next container reboot) 192.168.86.73
102 LXC media-server forge-media-server (config) 192.168.86.74
103 VM ubuntu-dev console (Proxmox display + OS hostnamectl set) 192.168.86.50
105 LXC adguard forge-adguard (config) 192.168.86.75
106 LXC n8n forge-n8n (config) 192.168.86.82
107 LXC immich forge-immich (config) 192.168.86.83
108 LXC frigate forge-frigate (config) 192.168.86.84
110 LXC minecraft forge-minecraft (config) 192.168.86.23

Fleet machines (per Section 3 personal endpoint amendment merged 2026-04-28):

Current New Notes
Finn Finn (kept) Proxmox host, personal endpoint per Section 3 amendment
UDev Console dev VM, portmanteau forbidden, friendly alias under amendment

SSH config aliases (~/.ssh/config):

9 aliases need updating to match new hostnames. biz-apps alias removed entirely (Batch 3.3).

Telegram bots:

Current New Notes
@GregTwoPointO_Bot retired hard delete per Q2
@jw_inbox_bot @forge_inbox_capture_bot new BotFather token
@Ava_JForgeBot @forge_lifeos_coordinator_bot new BotFather token
@Manager_JForgeBot @forge_notify_outbound_bot new BotFather token

Tier C: Personal endpoints (kept per Section 3 amendment 2026-04-28)

Sol (Mac), Venus (iPhone), Vector (Windows PC), Finn (Proxmox host), Console (dev VM, replaces UDev). system-map/fleet.md documents the function so LLM has the alias-to-role mapping.

Directory rename (executed 2026-04-28 as part of Phase 2.4)

forge/nexus/ renamed to forge/system-map/ via git mv. Cross-references swept across all forge .md, .py, .sh, .json, .yml, .yaml, .service, .conf files via sed -i 's|nexus/|system-map/|g'. Capital-N persona references in CLAUDE.md doctrine ("Greg / Ava / Nexus") kept intentionally as historical retired-name examples.

Bot redo (deferred from Phase 4.2 to its own design pass)

Justin signaled 2026-04-28 that the bot fleet needs a redo, not just a rename. Phase 4.2 stays parked until a pure-phoenix-bot-redesign-2026-XX-XX.md sub-handoff produces a fresh architecture (functional split, brain unification, token strategy, capture pipeline scope, tool-surface allocation, cost discipline, voice-friendliness). Recommended sequencing: spin the bot redesign after Phase 2 lands so new bots are built on the new substrate.

Cleanup Targets (Section 14B)

Target Refs Resolution Phase
Cursor Pro 0 DONE 2026-04-28: verified gone 3.1
Japandi Noir 0 DONE 2026-04-28: verified gone 3.1
VR Alliance 1 DONE 2026-04-28: stripped from forge-state-report 3.1
TNappe 1 DONE 2026-04-28: stripped from forge-state-report 3.1
TickTick 56 (3 n8n JSONs) DONE 2026-04-28: 3 JSONs moved to infra/n8n/workflows/_legacy/ 3.1
Ntfy 64 DONE 2026-04-28: stripped from scripts/notify.sh (FORGE_NTFY_TOPIC, FORGE_NTFY_SERVER, send_ntfy fn, dispatch refs) 3.1
JustinWieb (legacy site only) 0 DONE 2026-04-28: sites/justinwieb.com/ does not exist 3.1.5
justinkrystal.com prose refs 49 (non-DNS) DONE 2026-04-28 in Phase 3.6: 19-file sed sweep across forge tree 3.1 / 3.6
security-check cron 21 DONE 2026-04-28: cron entry removed, script archived to memory/_archive/cron-pre-phoenix-2026-04-28/ 3.2
infra-check cron 16 DONE 2026-04-28: same archive path 3.2
business-check cron 10 DONE 2026-04-28: same archive path 3.2
mount-watchdog cron 13 KEEP through Phase 3 as bridge, retire during Phase 4.6 3.2 / 4.6
biz-apps 11 DONE 2026-04-28: SSH alias removed from ~/.ssh/config. CT 104 already destroyed earlier. 3.3
Greg / OpenClaw 61 DONE 2026-04-28 (except @BotFather delete by Justin manually): service stopped + disabled + unit removed from /etc/systemd/system/, bot.py + service file + telegram.env archived to memory/_archive/greg-openclaw-pre-phoenix-2026-04-28/. Active prose scrubbed from system-map (architecture, fleet, network-sharing-plan, README, lm-studio-setup archived) + auto-context hook. Doctrine + LESSONS + CLAUDE retired-name references kept as historical examples. 3.4
Minecraft world backup 4 DONE 2026-04-28: cron removed, backup.sh archived to memory/_archive/cron-pre-phoenix-2026-04-28/minecraft-backup.sh, 143MB of snapshots moved from /mnt/storage/minecraft-backups/ to cold archive at /mnt/storage/forge-archive/minecraft-backups-2026-04-28/. Live MC server on CT 110 unaffected. 3.5
justinandkrystal.com to justinkrystal.com (DNS) n/a DISCOVERY 2026-04-28: justinandkrystal.com was never a Cloudflare zone; live site has always been justinkrystal.com. No DNS work needed for the rename itself. Forge-internal subdomain migration to justinsforge.com staged in pure-phoenix-phase-3-6-dns-migration-2026-04-28.md for sign-off. 3.6

Persona-Name Code-Level Identifiers (Phase 4.2 cleanup)

File Identifier Count
scripts/integrations/telegram/ava_bot.py Ava_JForgeBot 1 (bot class/service ref)
scripts/integrations/telegram/bot.py Greg 2 (bot logic)
scripts/hooks/auto-context.py Greg 1 (script logic)
scripts/checkpoint.sh Greg 2 (shell refs)
system-map/lm-studio-setup.md Greg 6 (setup docs)

Lower-priority prose mentions (170 total): - Greg: 107 across memory/daily/, memory/handoffs/, system-map/, CLAUDE.md - Venus: 32 (device/brand mentions, preview scripts, daily logs) - Ava_JForgeBot / Manager_JForgeBot: 13 in refactor docs and state reports - Nexus: 5 in archive references

Flat-Directory Status (Section 8)

Already largely compliant. forge/scripts/integrations/ is single-level under _lib/, telegram/, eight-sleep/, garmin/, minecraft/, wellness/. No deep persona-style nesting found. Brand and site directories already kebab-case. Aggressive flat refactor unnecessary; CP-3 conservative scope (rename only on touch) is the chosen approach.

MEMORY.md Status

  • ~/.claude/projects/-home-justinwieb-forge/memory/MEMORY.md: 182 lines, 23.8KB. Compliant with Section 12 cap (200 lines, 25KB).
  • forge/MEMORY.md: does not exist. Only canonical MEMORY.md is at the Claude project level.

Slim-down still planned in Phase 2.4 to convert dense entries into topic files for index purity, but no urgent overage.

Cron Inventory (live as of 2026-04-28)

*/5  * * * * /home/justinwieb/forge/scripts/monitors/security-check.sh
*/10 * * * * /home/justinwieb/forge/scripts/monitors/infra-check.sh
*/15 * * * * /home/justinwieb/forge/scripts/monitors/business-check.sh
*/10 * * * * /home/justinwieb/forge/scripts/monitors/mount-watchdog.sh
0    4 * * * /home/justinwieb/forge/scripts/integrations/minecraft/backup.sh

Phase 3.2 retires the first three. mount-watchdog stays through Phase 4.6. Minecraft backup handled in Phase 3.5.

Files Created / Modified by Phase 0

File Action
forge/FORGE-DOCTRINE.md created
forge/CLAUDE.md banner added pointing to doctrine
forge/memory/handoffs/pure-phoenix-inventory-2026-04-28.md this file

Phase 4.7 (system-wide quota observability) + open-items cleanup DONE 2026-04-28T23:39

Surface Action
heartbeat.py, morning-brief.py, forge_wellness_daily_summary.py, forge_memory_auto_capture.py, forge_memory_auto_dream.py each call_sonnet() wrapped with forge_quota_tracker.record(...).
forge_dispatcher.sh launch + complete events recorded for each pipe-mode worker spawn.
forge_tmux_anchor_session.sh skipped (interactive claude invocation, not -p; already covered by ~/.claude/stats-cache.json).
crontab 30 4 * * * forge_quota_tracker.py --write-summary added (after auto-dream 04:00).
forge_gdoc_to_drive.sh rewritten to upload via forge_gdrive_write.py (API path, no FUSE dependency). Smoke-tested live + cleaned up.
Mount-watchdog cron doctrine-violation status closed in LESSONS.md. Cron stays alive as human-convenience infra (Files.app on Sol/Venus).
eval.json no-em-dashes baseline 67 -> 65 (tightened).
eval.json naming-taxonomy-services severity warning -> error (whitelist empty).
~/.claude/projects/-home-justinwieb-forge/memory/reference_quota_tracker.md + MEMORY.md created/updated.

Quota tracker now records calls from 7 forge invokers + merges with stats-cache.json for interactive sessions. Aggregator writes nightly to data/claude-quota/summary.json.

8 of 8 eval green throughout.

Phase 4.2 (bot redesign) DONE 2026-04-28T23:25

Surface Action
forge_quota_tracker.py created. record + aggregate + merge_with_stats_cache. Foundation for Phase 4.7.
forge_telegram_brain.py created. persona-aware facade (capture persona = 7 tools, coordinator = 28). Wraps every Sonnet call with quota_tracker.record().
forge_telegram_capture_bot.py + forge_telegram_coordinator_bot.py created. Thin pollers, voice + text, call brain.handle(persona=...).
infra/systemd/forge-inbox-capture.service + forge-lifeos-coordinator.service created. Hardened (NoNewPrivileges, ProtectSystem, ReadWritePaths).
forge_telegram_push.sh new selectors capture/coordinator/notify; legacy aliases map to notify.
forge_notify.sh send_manager reads telegram-notify-outbound.env.
forge_telegram_inbox_webhook.py calls capture persona; iOS Shortcut endpoint on port 7400 unchanged.
heartbeat.py, morning-brief.py, forge_telegram_nudge_fire.py rewired to push via notify selector.
forge_eval_check_service_names.sh whitelist emptied (Phase 4.2 retired ava + inbox unit names).
~/.forge-secrets/telegram-{inbox-capture,lifeos-coordinator,notify-outbound}.env created chmod 600. Verified via getMe.
~/.claude/projects/-home-justinwieb-forge/memory/reference_telegram_fleet.md + MEMORY.md created/updated. Replaces 4 separate per-bot topic files.
Old systemd units archived to memory/_archive/cron-pre-phoenix-2026-04-28/.

Cutover verified live: capture brain wrote test row to Notion Inbox; quota tracker recorded the call. notify.sh pushed to outbound bot.

Justin owes: delete @jw_inbox_bot, @Ava_JForgeBot, @Manager_JForgeBot, @jw_updates_bot via @BotFather.

Phase 4.6 (Drive subsystem redesign, forge side) DONE 2026-04-28T22:48

Surface Action
forge_gdrive_search.py created. rclone lsjson wrapper, JSON output, --in / --id / --recursive / --max / --files-only / --dirs-only / --name / --ext.
forge_gdrive_read.py created. rclone cat / copyto, supports --id, --out, --as md\|docx\|pdf\|... for native Google Doc export.
forge_gdrive_write.py created. rclone copyto, supports --stdin --as-name <fn>, --mkdir-parents, --import-as docx\|md\|... for convert-to-Google-Doc.
forge_gdrive_move.py created. rclone moveto + rmdir, --mkdir-parents.
forge_gdrive_index_extend.py created. Mirrors Drive subtrees as markdown into forge/data/gdrive-cache/ via pandoc; extends /recall coverage.
forge_search_index.py ROOTS extended to include data/gdrive-cache.
infra/n8n/workflows/gdrive-search.json scaffold using SSH + Execute Command pattern.
infra/n8n/workflows/README-gdrive-phase-4-6.md n8n integration playbook (SSH vs native Drive node).
data/gdrive-cache/ created with 5 sample extracted Drive files.
~/.claude/projects/-home-justinwieb-forge/memory/reference_gdrive_subsystem.md created topic file.
MEMORY.md added gdrive subsystem pointer.
LESSONS.md Phase 4.6 closeout entry; mount-watchdog soak gated 2026-05-05.

Auth model: reuses Justin's existing gdrive: rclone remote (full drive OAuth scope). No new credentials.

Verified end-to-end: search, write, move, read, index extend all live against real Drive content. Test artifacts cleaned up.

Mount-watchdog cron stays alive for 7-day soak per CP-4. Retirement gated on 2026-05-05 + /save-to-drive skill migration.

Phase 4.3 (variable + flat-file refactor) DONE 2026-04-28T22:24

Surface Action
scripts/forge_rename_helper.py created. Audits + git mv + path-only rewrite of references. Skips historical paths (memory/daily, handoffs, comms/results, logs, LESSONS.md).
5 wave manifests memory/handoffs/pure-phoenix-phase-4-3-waves/wave{1..5}.tsv
38 script renames scripts/{sites,assets,gdoc,n8n,cloudflare,search,cleanup,monitors,hooks,integrations,checkpoint,dispatcher,notify,fleet-*,home-base-session} flattened to scripts/forge_<context>_<function>.{py,sh}
7 cron entries rewritten via crontab -l \| sed \| crontab - for search-index, retention, mount-watchdog, wellness daily summary, morning wellness check, garmin poll x14, telegram nudge-fire.
4 systemd units re-deployed (sudo cp to /etc/systemd/system, daemon-reload, restart): forge-tmux-anchor, forge-telegram-ava, forge-telegram-inbox, forge-inbox-webhook.
forge/.claude/settings.local.json SessionStart, UserPromptSubmit, Stop hook chains updated to forge_hook_* paths.
Cross-module imports 4 telegram scripts rewrote import inbox_brain etc. to import forge_telegram_inbox_brain as inbox_brain.
parents[N] fix forge_garmin_poll.py adjusted from parents[3] to parents[1] after directory-depth change.
Asset wrapper forge_assets_run.sh updated to dispatch via forge_assets_${cmd}.py instead of ${cmd}.py.
forge_notify.sh variable convention pass (clean_* for inputs, payload_* for outbound JSON, <source>_<entity>_url for endpoints). Canonical example for Phase 4.3.
forge/LESSONS.md self-iteration entry on basename-rewrite hazard + Phase 4.3 closeout.

Smoke tests passed end-to-end; eval harness 8/8 green throughout. Forge_garmin_poll fetched live data from Garmin Connect and posted to Home Assistant successfully after rename.

Phase 4.4 (memory architecture build) DONE 2026-04-28T21:33

File Action
forge/scripts/forge_memory_auto_capture.py created. Stop-hook fact extractor; self-detaches; redacts sensitive patterns before sending to Sonnet 4.6; confidence-gates writes (>=0.85 direct, 0.65-0.85 staged, <0.65 dropped); 5-write per-session cap; logs to LESSONS.md keyed by session_id.
forge/scripts/forge_memory_auto_dream.py created. Nightly multi-pass: A dedup, B stale prune (90d), C promote staged, D orphan-index check. File moves only, never deletes.
forge/scripts/forge_memory_revert.py created. --list to enumerate reversible sessions, --session <id> to roll back, --dry-run for preview.
forge/.claude/settings.local.json Stop hook chain extended to call auto-checkpoint.sh then forge_memory_auto_capture.py.
crontab 0 4 * * * forge_memory_auto_dream.py added (after eval 03:00 and search-index 03:30).
forge/LESSONS.md closeout entry appended.
~/.claude/projects/-home-justinwieb-forge/memory/MEMORY.md added auto-memory pointer.
~/.claude/projects/-home-justinwieb-forge/memory/reference_auto_memory.md created topic file.

Smoke tests passed end-to-end; eval harness still 8/8 green.

Phase 4.5 (eval harness) DONE 2026-04-28T21:23

File Action
forge/eval.json created, 8 initial checks
forge/scripts/forge_eval_harness.py created, supports --staged + --full, severity ladder, regression detection, LESSONS.md writer
forge/scripts/forge_eval_check_mkdocs_urls.sh created
forge/scripts/forge_eval_check_persona_code.sh created
forge/scripts/forge_eval_check_service_names.sh created
forge/.git/hooks/pre-commit created, calls harness --staged, blocks on fatal
crontab added 0 3 * * * forge_eval_harness.py --full --quiet (before search-index 03:30)
forge/LESSONS.md appended Phase 4.5 closeout entry, baselines logged
~/.claude/projects/-home-justinwieb-forge/memory/MEMORY.md added eval-harness pointer in Tools and Surfaces
~/.claude/projects/-home-justinwieb-forge/memory/reference_eval_harness.md created topic file

First full run: 8 of 8 pass. Em-dash count 55 (down from 67 baseline). MEMORY.md 109 lines / 8238 bytes (well under 200/25000 cap).

Whitelisted (deferred to Phase 4.2 bot redesign): - forge-telegram-ava.service, forge-telegram-inbox.service in forge_eval_check_service_names.sh - Ava_JForgeBot, Manager_JForgeBot not in persona-code check (current bot identifiers, not yet retired)

Open Questions (resolved during execution)

  • Em-dash purge approach (programmatic with diff vs per-file): asked at Phase 2.2 entry
  • justinkrystal.com domain ownership: asked at Phase 3.6 entry
  • Minecraft world preservation: asked at Phase 3.5 entry
  • Greg bot final delete via @BotFather (irreversible): asked at Phase 3.4 final step
  • Drive subsystem architecture (mount vs API vs hybrid): asked at Phase 4.6 entry

[Claude Code]