Commit Graph

735 Commits

Author SHA1 Message Date
09cd134861 sync: auto-sync from HOWARD-HOME at 2026-05-21 14:41:10
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-05-21 14:41:10
2026-05-21 14:41:13 -07:00
7ce0fa2145 sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-21 14:10:00
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-21 14:10:00
2026-05-21 14:10:03 -07:00
8e8a18ce6f access(rob): grant Rob Williams full Syncro access
Updated scope from read-only Syncro to full access: create/update/close tickets,
add comments, bill time, create invoices. Same as any tech.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 14:07:15 -07:00
063b209209 fix: Rob Williams (not Quirarte) 2026-05-21 14:02:25 -07:00
67dd7a457a access: add Rob as limited operator in Discord bot (remediation-tool + IX/Websvr hosting) 2026-05-21 14:02:02 -07:00
a67be0f3f2 sync: auto-sync from HOWARD-HOME at 2026-05-21 12:48:20
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-05-21 12:48:20
2026-05-21 12:48:22 -07:00
5333ed94ed sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-21 11:29:25
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-21 11:29:25
2026-05-21 11:29:28 -07:00
8538ddf112 fix(hooks): locate check-messages.sh on any machine; never exit non-zero
The UserPromptSubmit hook only probed D:/claudetools and C:/claudetools, so
on machines where the repo lives elsewhere (e.g. BEAST at
C:/Users/guru/ClaudeTools) no candidate matched and the for-loop's final test
returned 1 — surfacing a hook error on every prompt AND skipping coord-message
delivery. Now try $CLAUDE_PROJECT_DIR and $HOME/ClaudeTools first (keep D:/C:
for other layouts) and end with `true` so a missing script is a no-op, not an
error.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 10:25:14 -07:00
582c511f33 docs(sync): update skill doc to reflect git add -A and Phase 5b commands sync 2026-05-21 10:24:07 -07:00
5facce2a78 valleywide: add D-drive scan analysis CSVs (VWP source recovery)
Folder listing + full D-drive scan output from the 2026-05-16 VWP source
code recovery work. Text analysis artifacts kept as client record.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 10:21:00 -07:00
0897e5e317 fix(sync): detect untracked-only changes; reconcile timer-era memories
sync.sh: replace `git diff-index --quiet HEAD --` with
`[ -n "$(git status --porcelain)" ]` in both the main-repo (Phase 1) and
vault change-detection, so brand-new untracked files are no longer silently
skipped (the bug Howard hit 2026-04-17). Mark project_sync_script_bug.md
RESOLVED.

.gitignore: exclude the datto BSOD dumps (6 MB zip + 48 MB extracted) so the
detection fix doesn't sweep 54 MB of binaries into the repo.

memory: finish the add_line_item reconciliation — drop legacy "time entry" /
timer-billable framing from feedback_syncro_labor_type and
feedback_syncro_warranty_product (and their index lines); the product-selection
rules themselves are unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 10:19:52 -07:00
a201140e92 memory: reconcile timer memories with Syncro add_line_item switch
Mike's overhaul replaced the timer workflow with add_line_item, and he
already rewrote feedback_syncro_timer_first.md. Reconcile the leftovers:
- MEMORY.md index line for timer_first still stated the superseded
  "timers required" rule as current — rewrite to the add_line_item rule.
- timer_entry response-shape memory is now about a dead workflow — mark
  it HISTORICAL (index + file banner), retained only for manual timer use.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 10:13:37 -07:00
34e61b2ccb sync: copy slash commands to ~/.claude/commands on every sync
Add Phase 5b — one-way repo -> global copy of .claude/commands/*.md after
the pull, so the CLI always loads the latest skills. Idempotent (only
new/changed files) and soft-failing (never aborts a sync). Fixes the drift
where the global command set lagged the repo (e.g. /syncro was ~3 weeks
stale, and feature-request/forum-post/inject-standards/shape-spec were
missing globally) because the automated script skipped the doc's Phase 3.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 10:08:52 -07:00
ce38304715 fix(syncro): appointment_type_id optional; omit unless explicitly specified
Per Winter: leave appointment type blank unless user names one of the known
types. If omitting, include delivery method in ticket subject for calendar
visibility. Applies to both the gather-inputs table and the appointment POST.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 10:06:16 -07:00
1d800cb0ec Session log: Peaceful Spirit billing completion and Syncro skill overhaul
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 10:05:33 -07:00
90748d0901 fix(syncro): omit contact_id by default; Syncro assigns primary automatically
Only set contact_id when ticket is opened by/regarding a named contact.
Removed address_id, appointment_owner, and do_not_invite fields from the
default gather step — these are edge cases, not routine inputs.
Updated preview template to reflect default primary contact behavior.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 10:04:45 -07:00
64a0ba77c2 refactor(syncro): replace timer workflow with add_line_item, lock API sequences
- Billing now uses add_line_item directly; timer_entry/charge_timer_entry removed
- Added Verified Response Shapes table for all endpoints (tested live against ACG internal customer)
- Billing workflow rewritten as strict 5-step locked script with no branches
- Added STOP rule: never try alternative endpoints/formats on unexpected responses
- bot-alerts section: explicit success ([OK] + message_id) and failure ([WARNING]) criteria
- Updated feedback memory to supersede the old timer-first rule

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 10:04:45 -07:00
3a09746468 sync: auto-sync from HOWARD-HOME at 2026-05-20 22:41:35
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-05-20 22:41:35
2026-05-20 22:41:38 -07:00
144bbe3a47 sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-20 19:14:31
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-20 19:14:31
2026-05-20 19:17:13 -07:00
bc984d9c78 sync: auto-sync from HOWARD-HOME at 2026-05-20 17:08:25
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-05-20 17:08:25
2026-05-20 17:08:29 -07:00
6c476066ee Discord bot: pin Howard's ID, add Rob as recognized read-only user
Howard (624667664501178379) gets his ID pinned (full trust). Rob
(261978810713505792) added under a new "Recognized — Restricted
(read-only)" tier: greeted by name, but informational responses only —
no writes, git, system changes, M365, or vault. Restarted bot.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:44:57 -07:00
34a0d73d00 syncro: post a summary + link to #bot-alerts after every write
Add .claude/scripts/post-bot-alert.sh — reusable, soft-failing Discord
poster that reads the bot token from the SOPS vault (bot-token.sops.yaml,
credentials.bot_token) with a .env fallback, so it works from any machine.

Wire it into the /syncro skill: a Hard Rules pointer, a billing-workflow
step (17), and a "Post to #bot-alerts" reference section with the message
format and ticket/invoice/customer link mapping (computerguru.syncromsp.com).
Scoped to write ops (create/update/close/comment/bill/customer); reads post
nothing. Best-effort — never fails the Syncro write it follows.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:43:23 -07:00
8973229c2f Discord bot: pin Mike's Discord ID (264814939619721216)
Replace the placeholder so the owner is recognized from his first
message. Restarted bot to load the change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:30:36 -07:00
81eea1111b Discord bot: record Winter's username alongside her ID
Her Discord username is @Winter (ID 624666486362996755); store both so
the match against the [DISCORD_CONTEXT] block is robust. Restarted bot.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:29:45 -07:00
9fb16a7308 Discord bot: pin Winter's Discord ID for first-message recognition
Replace the (note on first interaction) placeholder with her user ID
624666486362996755 so the bot matches her from the [DISCORD_CONTEXT]
block immediately. Restarted the bot to load the change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:29:16 -07:00
dddf0dc5a5 Session log: Discord bot close-out for CryoWeave SEO task (Winter)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 16:28:42 -07:00
8a6695bb71 Discord bot: grant Winter full access, mark her Syncro SME
Add Winter to the bot's known team members with full trust, and note she
is the go-to person for Syncro questions (also flagged on the /syncro
skill row). Restarted the bot to load the updated system prompt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:26:45 -07:00
c5474cdb3d Session log: Discord bot instruction corrections
Reverse the no-questions rule (bot can/should ask via persistent thread
sessions), add a headless-operation constraint (no Chrome/credential
windows/GUI auth at BEAST), and add a Task Loop (identify requester ->
do work -> anything else? -> offer Syncro -> /save). Restarted the bot
service to load the corrected system prompt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:20:55 -07:00
3d2bcfad55 sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-20 15:22:14
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-20 15:22:14
2026-05-20 15:22:18 -07:00
4c94254477 sync: auto-sync from HOWARD-HOME at 2026-05-20 14:53:36
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-05-20 14:53:36
2026-05-20 14:53:38 -07:00
35d3a39242 client/cascades: britney.thompson M365 offboarding complete — sign-in blocked, license removed, litigation hold
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:42:05 -07:00
517278f66f sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-20 14:38:07
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-20 14:38:07
2026-05-20 14:38:15 -07:00
ae791e321d client/cascades: Phase 2.6 COMPLETE — 13 printers, 4 GPOs, 5 accounts disabled
Detailed context:
- Task: Cascades of Tucson Phase 2.6 — printer migration, GPO deployment, account cleanup
- Changes:
  - phase2-print-server.ps1: all 13 printers complete, Epson driver/share notes added
  - active-directory.md: 5 stale accounts disabled, 4 GPOs created, pending issues cleared, printer share table updated
  - Session log: 2026-05-20 Howard session covering all Phase 2.6 work
- Status: Phase 2.6 complete

Files modified:
- clients/cascades-tucson/docs/migration/scripts/phase2-print-server.ps1
- clients/cascades-tucson/docs/servers/active-directory.md
- clients/cascades-tucson/session-logs/2026-05-20-howard-phase2.6-printers-gpos-account-cleanup.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:04:08 -07:00
dc29e2ff24 client/cascades: phase2-print-server.ps1 — 8 printers installed on CS-SERVER
Rewrote with verified IPs and confirmed drivers. All 8 printers created and
shared via GuruRMM 2026-05-20. Deferred: FrontDesk Epson (needs Epson
Universal driver), Health-206 Konica Minolta (needs KM PCL6 Universal driver).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:04:08 -07:00
ba8526eae7 fix: make check-messages.sh hook path-agnostic for D: and C: roots
Hook now tries D:/claudetools then C:/claudetools so it works on both
Mike's machine and Howard's without either needing machine-local config.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:04:08 -07:00
75e3d38de8 client/cascades: n.castro cleanup, share docs, hook path fix
- active-directory.md: disable n.castro (AD + M365), fix stale Alma.Montt
  pending entry (she is intentionally cloud-only), restructure SMB shares
  section into new Phase 2.5 / legacy / system buckets (verified live via
  GuruRMM Get-SmbShare 2026-05-20)
- settings.json: remove hardcoded D:/claudetools UserPromptSubmit hook
  (machine-specific path belongs in settings.local.json only; Howard's
  machine is C:/claudetools)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:04:08 -07:00
098e1d4156 sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-20 10:58:31
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-20 10:58:31
2026-05-20 10:58:35 -07:00
1f8a9dbc8d Session log: EOP access fix + Alma Montt mailbox investigation (Cascades Tucson)
- Fixed Exchange.ManageAsApp missing from Security Investigator app registration
- Granted role directly in Cascades tenant via Graph API
- Investigated Alma Montt mailbox: no delivery blocks found, specific sender TBD

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 10:39:15 -07:00
020ae0cc1c feat: Discord bot — per-session rules, user identity, and DISCORD_CLAUDE.md
- Add DISCORD_CLAUDE.md as the Discord bot's dedicated system prompt,
  replacing the main CLAUDE.md for bot sessions. Covers: no-interactive
  rules, Discord user authorization, vault/remediation guidance, /save
  after every task, and formatting rules for Discord.

- config.py: add discord_system_prompt field (default: projects/discord-bot/
  DISCORD_CLAUDE.md, overridable via env var).

- client.py: _load_system_prompt() now loads discord_system_prompt path
  with fallback to CLAUDE.md if file is missing.

- message_handler.py: inject [DISCORD_CONTEXT] header into every agent
  message containing Discord username, display name, user ID, channel,
  and guild so the agent always knows who is asking.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 10:11:36 -07:00
377ab3a63f sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-20 09:02:03
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-20 09:02:03
2026-05-20 09:02:06 -07:00
f4b935b394 sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-20 08:25:48
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-20 08:25:48
2026-05-20 08:25:53 -07:00
35ee135b0f sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-20 07:37:32
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-20 07:37:32
2026-05-20 07:37:43 -07:00
35c1270941 sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-20 06:52:41
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-20 06:52:41
2026-05-20 06:52:58 -07:00
5b99e4b80b sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-20 05:51:25
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-20 05:51:25
2026-05-20 05:51:29 -07:00
7bca175176 sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-20 05:10:44
Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-20 05:10:44
2026-05-20 05:13:16 -07:00
d246992d09 Session log: Coordination hook auto-initialization fix
Comprehensive session log documenting the fix for broken coordination hooks
across all machines. The UserPromptSubmit hook now auto-creates the required
.claude/current-mode file with "general" as default if missing.

Session highlights:
- Root cause analysis of missing machine-local mode file
- Implementation of auto-creation logic in check-messages.sh
- Documentation updates in CLAUDE.md and ONBOARDING.md
- Successful deployment and sync with 15 remote commits
- Zero manual setup required for future machines

Impact: Fixes coordination hooks permanently, prevents fresh-clone failures

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-20 05:10:24 -07:00
b62ea2d4e7 sync: auto-sync from HOWARD-HOME at 2026-05-19 22:36:25
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-05-19 22:36:25
2026-05-19 22:36:27 -07:00
7da6a81aa4 fix: add C:/claudetools to sync.sh candidate path list
HOWARD-HOME installs to C: not D:, causing sync.sh to fail with
"Not in a git working tree" on that machine.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 22:33:04 -07:00
468f4287bf client/cascades: session log + AD doc update 2026-05-20
Phase 2.5 complete. Folder redirection GPO decision documented — deferred
to Phase 3 (blocked on domain joins). Pending items carried forward.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 22:32:20 -07:00
3328a24742 client/cascades: Phase 2.5 AD groups and shares — COMPLETE
Created SG-Mgmt-RW, SG-Sales-RO, SG-Activities-RW in OU=Groups.
Created SMB shares Management, Sales, Activities, Server on D:\Shares
with ABE enabled and correct NTFS ACLs per group.
Scripts run on CS-SERVER via GuruRMM 2026-05-20. AD doc updated to live state.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 22:32:20 -07:00