Commit Graph

2307 Commits

Author SHA1 Message Date
555e1ffd5a syncro: finalize deploy-agent (installer URL = per-client vaulted secret, MSI)
Decoded the Syncro RMM installer URL from 4 client samples:
base64(v1-{customer_id}-{A}-48753-{policy_folder_id}). 48753 = our account id (constant);
customer_id + policy_folder_id are API-readable; A is an unguessable per-client security token
NOT exposed anywhere in the API -> the URL is NOT constructible and must be harvested per client
and vaulted. Installer is an MSI -> deploy uses msiexec /qn /norestart.

deploy-agent now reads clients/<slug>/syncro-agent-installer (credentials.installer_url) from
the vault (cascades-tucson, grabb-durando, reliant, howard-test seeded) and pushes via GuruRMM.
Findings recorded in test-findings.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 16:46:47 -07:00
12bb9f1544 syncro: capture Phase-1 live-test findings (email-delivery trap + response shapes)
Test campaign on Howard Test sandbox (customer 36118743) surfaced traps the skill must not
re-learn:
- invoice/estimate email endpoints return 200 "Email sent" even with NO recipient
  (customer.email null) -> never report delivery from the 200; verify customer.email first.
- customer.email is UNIQUE tenant-wide; PUT /customers failure returns
  {success:false,message:[...]} not {customer:{...}} -> check .success.
- POST/PUT /contacts return a FLAT object (.id), not {contact:{...}}; contact recipient
  flags (primary/receives_invoices) are ignored via API.
- POST /contracts write succeeds but body doesn't echo the object; /contracts?customer_id
  doesn't filter server-side -> GET-verify + client-filter.

New living log .claude/standards/syncro/test-findings.md; critical items folded into
syncro.md Hard Rules + Verified Response Shapes. Correction logged to errorlog.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 16:46:46 -07:00
996041406c sync: auto-sync from GURU-5070 at 2026-07-10 15:57:23
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-07-10 15:57:23
2026-07-10 15:57:55 -07:00
1f56098652 syncro: expand skill to full Syncro API surface (assets/RMM/deploy) + verified capability model
Add comprehensive Syncro coverage beyond PSA core:
- New .claude/standards/syncro/api-reference.md: complete verified inventory of ~180
  endpoints across 38 resource types (generated from live OpenAPI 3.0 spec + tenant
  probe 2026-07-10), with worked GET/POST/PUT/DELETE templates and token-capability matrix.
- /syncro: asset read intelligence (patches, installed_applications), asset create/update,
  policy-folder move (move-asset), RMM alerts, and deploy-agent (hybrid installer push via
  GuruRMM using SyncroSetup --console --allow-force-reboot).
- move-asset ships a capability preflight (GET /policy_folders?customer_id -> 401 = missing
  Assets-Policy-Change) + mandatory post-write verify, because an under-scoped token returns
  HTTP 200 and silently no-ops the move.

Correct the "Syncro RMM is API-impossible" belief: it was a token-scope gap, not an API
limit. Live-verified the asset move (flip-and-restore 692253->692278->692253). Token scope
today: Howard + Winter full; Mike (vaulted ...ebbeb3) still 401 pending re-vault.

Corrects memory reference-syncro-rmm-api-gui-only; correction logged to errorlog.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 15:45:26 -07:00
46d2ae7a5b sync: auto-sync from HOWARD-HOME at 2026-07-10 15:11:39
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-07-10 15:11:39
2026-07-10 15:12:08 -07:00
830a86ea95 wiki: goldstein - full network + remote-access topology (UniFi gateways, Site Magic, OpenVPN, roaming playbook) (#32384) 2026-07-10 15:03:13 -07:00
a0690793bc guru-scan: bump gitlink to 3ca5ba7 (RKill whitelist + scan-log protection)
Point the superproject at the tested guru-scan commit: RKill -w process
whitelist (spares the PowerShell host + running GuruRMM/Syncro/Datto EDR/
ScreenConnect/Bitdefender/MSP360/Splashtop agents), Datto EDR folders added to
the HitmanPro/Emsisoft exclusion list, and cleanup guard so scan logs/archives
are never deleted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 14:47:29 -07:00
0fdeabde3d sync: auto-sync from HOWARD-HOME at 2026-07-10 14:44:39
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-07-10 14:44:39
2026-07-10 14:45:46 -07:00
Winter Williams
df46f56e59 sync: auto-sync from GURU-BEAST-ROG at 2026-07-10 14:25:09
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-07-10 14:25:09
2026-07-10 14:25:55 -07:00
Winter Williams
299c053795 sync: auto-sync from GURU-BEAST-ROG at 2026-07-10 14:03:06
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-07-10 14:03:06
2026-07-10 14:03:53 -07:00
Winter Williams
8350a4aeaf sync: auto-sync from GURU-BEAST-ROG at 2026-07-10 13:15:01
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-07-10 13:15:01
2026-07-10 13:16:44 -07:00
1041db8587 sync: auto-sync from GURU-5070 at 2026-07-10 12:36:41
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-07-10 12:36:41
2026-07-10 12:37:18 -07:00
ebeb0ec1f6 wiki: compile instrumental-music-center (update) — refresh prepaid hours (10.0), fold 2026-07-08 log source, bump last_compiled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 11:20:28 -07:00
ecc0c8cd82 sync: auto-sync from HOWARD-HOME at 2026-07-10 11:12:18
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-07-10 11:12:18
2026-07-10 11:12:54 -07:00
Winter Williams
07404759f3 sync: auto-sync from GURU-BEAST-ROG at 2026-07-10 10:06:22
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-07-10 10:06:22
2026-07-10 10:07:09 -07:00
Winter Williams
3286a47090 sync: auto-sync from GURU-BEAST-ROG at 2026-07-10 09:58:26
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-07-10 09:58:26
2026-07-10 09:59:18 -07:00
f95809cd9d sync: auto-sync from Mikes-MacBook-Air.local at 2026-07-10 09:04:22
Author: Mike Swanson
Machine: Mikes-MacBook-Air.local
Timestamp: 2026-07-10 09:04:22
2026-07-10 09:04:29 -07:00
e78152a706 sync: auto-sync from Mikes-MacBook-Air.local at 2026-07-10 08:30:31
Author: Mike Swanson
Machine: Mikes-MacBook-Air.local
Timestamp: 2026-07-10 08:30:31
2026-07-10 08:30:39 -07:00
017dcdf04c voip: VWP park extension 107 (Payroll) - shared mailbox
Extension 107 (Payroll) marked as PARKED pending decision on shared mailbox setup.
Removed from CSV bulk import (11 -> 10 users).
Updated all documentation to reflect new counts: 13 matched, 1 shared, 4 parked.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:59:00 -07:00
2f35163866 harness: read Syncro keys from vault, stop hardcoding the repo root
Two defects found while running /wiki-compile, both from tooling assuming
a path instead of resolving it.

1. Plaintext Syncro API keys. Mike's and Howard's live PSA keys were
   copy-pasted into three command files, a script, and two catalog docs --
   despite both already being vaulted at msp-tools/syncro and
   msp-tools/syncro-howard. Replaced with reads from the SOPS vault via a
   new sourced helper, .claude/scripts/syncro-env.sh. Write paths fail
   closed; read-only paths degrade to skipped enrichment rather than a
   wrong key. Per-user mapping is unchanged, so Syncro attribution is too.

2. Hardcoded repo root. wiki-compile/wiki-lint/inject-standards and
   gen_b64.py hardcoded D:/claudetools; this machine is C:/claudetools.
   syncro.md also read ~/.claude/identity.json before the repo copy -- the
   same bug that made remediation-tool's consent-audit report a fully
   consented tenant as RED. Root now resolves from the script's own
   location, with identity.json claudetools_root as the override.

get-identity.sh had a chicken-and-egg bug: it read ${CLAUDETOOLS_ROOT:-.}
but never set it, so every caller had to already know the root. It now
self-resolves and exports CLAUDETOOLS_ROOT + VAULT_ROOT.

Verified: all three command setup blocks authenticate against live Syncro;
get-identity.sh works from any cwd and honors a pre-set root; gps-rmm
autoenroll resolves its key from the vault. security-review: no findings.

NOTE: both keys remain valid in git history. Rotation in the Syncro portal
is the required follow-up -- this commit does not resolve that exposure.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 07:56:33 -07:00
c34cdb3a39 voip: VWP note phone MAC assignments for Kayla and Jesse III
Extension 109 (Kayla Guerrero) - Phone MAC last 4: 73b7
Extension 117 (Jesse III) - Phone MAC last 4: 6cf5

Documented for device assignment workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:55:32 -07:00
ec1cb40b62 voip: VWP note phone MAC assignment for Chris
Extension 113 (Chris Guerrero) - Phone MAC last 4: 755b

Documented for device assignment workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:49:42 -07:00
f9b44cfb68 voip: VWP note phone MAC assignment for Tammy
Extension 106 (Tammy) - Phone MAC last 4: 6a36

Documented for device assignment workflow after second CSV batch.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:49:14 -07:00
1ca456b03f voip: VWP note phone MAC assignment for Rose
Extension 103 (Rose Guerrero) - Phone MAC last 4: 5217

Documented for device assignment workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:43:26 -07:00
250eb8ecfe voip: VWP note phone MAC assignment for Ron
Extension 110 (Ron Winger) - Phone MAC last 4: 6509

Documented for device assignment workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:42:42 -07:00
5641532429 voip: VWP note phone MAC assignment for J.R.
Extension 105 (J.R. Guerrero) - Phone MAC last 4: 7441

Documented for device assignment workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:41:52 -07:00
1b0eeb5595 voip: VWP note phone MAC assignment for Ty
Extension 114 (Ty Fetters) - Phone MAC last 4: 6d01

Documented for device assignment workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:41:21 -07:00
b4972497a7 voip: VWP note phone MAC assignment for Kitchen shared phone
Extension 111 (Kitchen) - Phone MAC last 4: 958e
Shared phone extension (no M365 account required)
Updated counts: 3 extensions parked (down from 4)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:40:43 -07:00
a70ec28bdc voip: VWP note phone MAC assignment for Shelly
Extension 104 (Shelly) - Phone MAC last 4: 96b8

Documented for device assignment workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:39:02 -07:00
7f8fb5d9c5 voip: VWP note phone MAC assignment for Toni
Extension 115 (Toni) - Phone MAC last 4: 6cf9

Documented for device assignment workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:38:25 -07:00
d477970ab8 voip: VWP note phone MAC assignments for Jesse Sr and Bart
Extension 102 (Jesse Sr) - Phone MAC last 4: 7559
Extension 116 (Bart) - Phone MAC last 4: a890

Documented for device assignment workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:37:01 -07:00
522594dedb wiki: compile cascades-tucson (update)
Fold 4 session logs since last_compiled=2026-07-01:
- 2026-07-02 caregiver phone login / PSO-Caregivers FGPP
- 2026-07-02 Shelby Trozzi Company Web Docs share + mapped drive
- 2026-07-09 Charity Menle caregiver rename
- 2026-07-09 Chris Knight accounting mailbox delegation

Surgical update mode (not --full): 735 of 739 lines left byte-for-byte
intact. Adds Company Web Docs share record, Shelby vault path (path only),
4 History rows; refreshes Syncro hours/tickets (37.5 hrs, 0 open).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 07:36:49 -07:00
06ed9ba562 voip: VWP clarify ext 106 (Tammy) and park ext 108 (Shannon)
Extension 106 (Tammy) matched to acctpay@valleywideplastering.com
Extension 108 (Shannon) parked pending clarification
Updated counts: 14 matched, 4 unmatched/parked

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:13:58 -07:00
25af453f61 feat(voip): Extension 117 clarification - Jesse III external email
CLARIFIED (2026-07-10):
- Extension 117: Jesse III
- Email: jesse@nescoap.com (external domain)
- Similar to ext 114 (Ty@CASARICA.NET - external domain)
- Status: Ready to add to second CSV batch

UPDATED:
- Matched users: 12 -> 13 (Jesse III now matched)
- Unmatched users: 6 -> 5 (removed Jesse III from unmatched list)
- Will be included in second CSV import with other clarified/shared extensions

FILES MODIFIED:
- extension-mapping.md: Updated ext 117 to show jesse@nescoap.com
- PROVISIONING-STATUS.md: Moved ext 117 to clarified section
- README.md: Updated user counts and user summary

CURRENT STATUS:
- 11 users in CSV ready for bulk import (102-116 minus gaps)
- 2 users for separate provisioning (101 Natalya, 117 Jesse III)
- 5 users still need clarification (106, 108, 111, 112, 118)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:09:35 -07:00
736d43f482 feat(voip): Extension 101 clarification - Natalya is receptionist
CLARIFIED (2026-07-10):
- Extension 101: Natalya (Receptionist)
- M365 Account: Customer Service (customerservice@valleywideplastering.com)
- Phone: Test phone from yesterday (MAC 805e0cdd71b1 / Last 4: 71b1)
- Status: Phone already registered, ready for user provisioning

UPDATED:
- Matched users: 11 -> 12 (Natalya now matched)
- Unmatched users: 7 -> 6 (removed Natalya from unmatched list)
- Created provision-natalya-101.md with step-by-step commands

FILES MODIFIED:
- extension-mapping.md: Updated ext 101 to show customerservice@ match
- PROVISIONING-STATUS.md: Added clarified section for ext 101
- README.md: Updated user counts and added provision-natalya-101.md link
- provision-natalya-101.md: NEW - Complete provisioning guide for receptionist

NEXT ACTIONS:
1. Upload 11-user CSV to PacketDial (unchanged)
2. Provision extension 101 separately (commands documented)
3. Remaining 6 unmatched extensions need clarification

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-10 07:09:35 -07:00
033019df18 sync: auto-sync from GURU-5070 at 2026-07-10 06:59:57
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-07-10 06:59:57
2026-07-10 07:00:29 -07:00
bf95a10685 sync: auto-sync from HOWARD-HOME at 2026-07-09 20:26:12
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-07-09 20:26:12
2026-07-09 20:26:40 -07:00
2fba62b7df sync: auto-sync from HOWARD-HOME at 2026-07-09 20:23:39
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-07-09 20:23:39
2026-07-09 20:24:08 -07:00
db10206aea feat(voip): VWP complete provisioning prep + setup documentation
Critical RPS provisioning URL fix + CSV bulk import ready + complete VoIP setup guide

CRITICAL FIX:
- RPS server URL corrected: http://ndp.ucaasnetwork.com/cfg (was ftp://p.packetdials.net)
- Discovered ACG has TWO whitelabel accounts (WLC vs OIT/PacketDial)
- Test phone (805e0cdd71b1) now registered immediately after fix (Status 1)

USER PROVISIONING:
- M365 account matching: 11 matched users, 7 unmatched (need clarification)
- CSV bulk import prepared (vwp-users-import.csv)
- Strategy: users WITHOUT devices initially (add phone extension: no)
- Device assignment workflow: incremental as phones distributed

COMPLETE VOIP SETUP DOCUMENTED:
- DID (phone number) management + routing options
- Call queues (ring groups) - recommended queues for VWP
- Auto-attendants (IVR menus) - main menu design
- Time frames (business hours routing)
- Additional features (hunt groups, voicemail-only, fax-to-email)
- All components with API commands + examples

FILES CREATED (7):
- README.md: Quick navigation hub + domain info
- PROVISIONING-STATUS.md: Current status + next steps
- SESSION-SUMMARY-2026-07-09.md: Complete session documentation (18 pages)
- COMPLETE-CLIENT-SETUP.md: Full VoIP setup guide (15 pages)
- DEVICE-ASSIGNMENT-COMMANDS.md: Copy-paste command reference
- extension-mapping.md: Extension to M365 account mapping
- vwp-users-import.csv: Bulk import file (READY for upload)

IMPLEMENTATION PHASES:
Phase 1 (In Progress): Basic connectivity - CSV ready for upload
Phase 2 (Planned): Main line setup - queue + auto-attendant + DID
Phase 3 (Planned): Business hours routing - time-based call handling
Phase 4 (Optional): Additional features per client needs

NEXT ACTIONS:
- Upload CSV to PacketDial web UI (manual step)
- Get client clarification on 7 unmatched users
- Assign devices as phones distributed (per-phone workflow documented)

Domain: vwp.91912.service
Main Number: 480-705-9500
E911: a-6a395c03d4cfe (301 N 56TH ST, CHANDLER AZ)
YMCS Site: 1e7578a6fe0e41cfb5a3e8b40933ffee

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-09 20:21:57 -07:00
eb04287396 sync: auto-sync from HOWARD-HOME at 2026-07-09 20:14:58
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-07-09 20:14:58
2026-07-09 20:16:45 -07:00
ab987bf9e1 wiki(sif-oidak): close the onmicrosoft.com UPN rename as not actionable
Removing onmicrosoft.com from M365 usernames needs sifoidak.com verified as a custom
Entra domain, which needs a DNS TXT record at GoDaddy. Mike confirmed ACG has no
registrar access to that account, so UPNs stay on sifoidak.onmicrosoft.com and new
users follow the same convention. Recorded as decided rather than blocked so it is
not re-proposed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 20:16:05 -07:00
d9f877661e wiki(sif-oidak): correct identity model, add printer + onboarding runbook
Sif-oidak was documented as a hybrid AD/M365 environment. It is not: there is no
Entra Connect on either DC, no AD object carries msDS-ConsistencyGuid, and every
M365 user has onPremisesSyncEnabled=null. AD and M365 are disjoint, and email is a
third system entirely (sifoidak.com at GoDaddy; the O365_BUSINESS SKU carries the
EXCHANGE_S_FOUNDATION no-mailbox stub).

That mismatch caused a real failure: Dwayne Ortega had a cloud account only, so he
could not log in to a domain-joined workstation. Created his AD account and recorded
the two-account onboarding rule.

Also documented: printer error 740 (Point-and-Print driver install needs admin,
UAC prompt never surfaces), a GPO pushing the MX-6240N queue from the wrong server,
SIF-SERVER2 confirmed as a backup DC, and refreshed stale laptop agent UUIDs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 20:16:04 -07:00
5a463ae133 sync: auto-sync from GURU-5070 at 2026-07-09 15:56:52
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-07-09 15:56:52
2026-07-09 15:57:31 -07:00
6942827391 sync: auto-sync from Mikes-MacBook-Air.local at 2026-07-09 14:52:07
Author: Mike Swanson
Machine: Mikes-MacBook-Air.local
Timestamp: 2026-07-09 14:52:07
2026-07-09 14:52:17 -07:00
Winter Williams
07268cd741 sync: auto-sync from GURU-BEAST-ROG at 2026-07-09 13:39:12
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-07-09 13:39:12
2026-07-09 13:40:02 -07:00
57c23fc8d7 sync: auto-sync from Mikes-MacBook-Air.local at 2026-07-09 12:31:21
Author: Mike Swanson
Machine: Mikes-MacBook-Air.local
Timestamp: 2026-07-09 12:31:21
2026-07-09 12:31:30 -07:00
2e92a2d38d sync: auto-sync from GURU-5070 at 2026-07-09 11:06:29
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-07-09 11:06:29
2026-07-09 11:12:33 -07:00
9926e5f2cc sync: auto-sync from HOWARD-HOME at 2026-07-09 11:00:18
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-07-09 11:00:18
2026-07-09 11:01:24 -07:00
Winter Williams
252d22048b sync: auto-sync from GURU-BEAST-ROG at 2026-07-09 10:09:06
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-07-09 10:09:06
2026-07-09 10:12:27 -07:00
b3ea44a8ff sync: auto-sync from HOWARD-HOME at 2026-07-08 18:20:05
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-07-08 18:20:05
2026-07-08 18:20:34 -07:00