Commit Graph

1799 Commits

Author SHA1 Message Date
8a64bc48e6 feat(bitdefender): complete Accounts module (build-out 1/N)
- Completed Accounts module for bitdefender skill (GravityZone Public API)
- Added 5 methods: getAccountDetails, createAccount, updateAccount, deleteAccount, configureNotificationsSettings
- Write methods require --confirm; raw also gates createAccount/updateAccount/configureNotificationsSettings
- Param shapes validated against official docs and safe validation probes
- configureNotificationsSettings is a setter with no required param; warning documented against empty payload on live tenant
- selftest 42 -> 49 passing

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 10:22:01 -07:00
4cf34f5221 feat(bitdefender): doc-verify assignPolicy/push + add full-API build-out tracker
- assign_policy: add inheritFromAbove option; mark VERIFIED via official docs
  (policyId/targetIds/forcePolicyInheritance/inheritFromAbove; not applied to
  ENFORCED-policy targets).
- setPushEventSettings: documented serviceType (splunk/cef/jsonRPC), TLS 1.2+
  receiver requirement, subscribeToEventTypes event-flag map; webhook receiver
  pattern noted.
- api-reference.md: cite GravityZone Support Center as authoritative source.
- add references/BUILDOUT.md — master checklist to implement every API method
  module-by-module; seeded with current done/todo/dead state.
- memory: reference_gravityzone_support (+ index).

selftest 42/42.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 10:14:23 -07:00
5dc5f5f82d sync: auto-sync from HOWARD-HOME at 2026-06-21 10:06:17
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 10:06:17
2026-06-21 10:07:01 -07:00
23668cee45 sync: auto-sync from HOWARD-HOME at 2026-06-21 10:02:32
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 10:02:32
2026-06-21 10:04:47 -07:00
d622a05b84 feat(bitdefender): expand GravityZone control surface + correct policy docs
Re-verified the live tenant's full API scope and wrapped the modules the key
allows but the skill didn't expose. New CLI subcommands:
- assign-policy (gated) — apply an existing policy to endpoints/groups
  (param shape policyId+targetIds verified live)
- reports, accounts, notif-settings, scan-tasks — read
- push-settings / push-stats / push-set (gated) — push event service
  (status param verified; needs a receiver URL to enable)

Corrections from live probing:
- policies are NOT shallow: getPolicyDetails returns the FULL granular config.
  Removed the false "shallow" warning; documented read+assign, console-only authoring.
- raw now gates assignPolicy + setPushEventSettings.
- documented dead modules (patchmanagement/phasr/maintenancewindows/integrations,
  incidents.getIncidentsList) and unconfigured-push handled cleanly (rc0, no errorlog).

selftest 29/29 -> 42/42, all green against the live tenant.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 10:03:19 -07:00
1f65facb6f docs: record kept-split mailbox architecture decision (2026-06-21)
/mailbox (ACG own-mail, single-tenant 1873b1b0) and client send (suite
Exchange Operator b43e7342, multi-tenant) stay separate on purpose: 1873b1b0
is single-tenant so it cannot serve clients; consolidating onto exchange-op was
rejected (privilege creep on casual own-mail + loses Contacts). Documented the
why in commands/mailbox.md scope boundary + feedback memory so it stops being
re-litigated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 09:51:43 -07:00
1e937324be sync: auto-sync from GURU-KALI at 2026-06-21 09:47:57
Author: Mike Swanson
Machine: GURU-KALI
Timestamp: 2026-06-21 09:47:57
2026-06-21 09:47:59 -07:00
f55b8d2556 docs: purge stale fabb3421 narrative — Mail.Send already lives in the 365 app suite
Mail.Send is NOT an open decision or a 'blocked' item: the Exchange Operator
tier (b43e7342) already holds Graph Mail.Send + Mail.ReadWrite +
MailboxSettings.ReadWrite (the suite's IR victim-notification mail path).
/mailbox (ACG own-mail) separately uses the dedicated ComputerGuru Mailbox app
1873b1b0. The deleted fabb3421/Claude-MSP-Access app is now referenced only as
DELETED/do-not-use across all live surfaces.

Corrected: remediation-tool gotchas.md (removed 'suite has no mail scopes /
mailbox BLOCKED / decision-not-executed'), commands/mailbox.md (header +
Attribution no longer name the deleted app as active), feedback memory
(promoted 'suite has Mail.Send — settled' to a headline), breach-report
template, .grok mirrors, credentials.md, CATALOG_SHARED_DATA.md, and wiki
(internal-infrastructure, glaztech, dataforth). Removed dead plaintext secret
for the deleted app from CATALOG_SHARED_DATA.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 09:46:54 -07:00
6897e515c9 sync: auto-sync from HOWARD-HOME at 2026-06-21 06:58:45
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 06:58:45
2026-06-21 06:59:30 -07:00
eb8b370be4 sync: auto-sync from GURU-5070 at 2026-06-20 20:51:22
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-20 20:51:22
2026-06-20 20:52:41 -07:00
c175e68df9 sync: auto-sync from Mikes-MacBook-Air.local at 2026-06-20 20:01:12
Author: Mike Swanson
Machine: Mikes-MacBook-Air.local
Timestamp: 2026-06-20 20:01:12
2026-06-20 20:01:17 -07:00
c75b6c5669 wiki: full recompile cascades-tucson + dataforth (RF/voice applied state; mail stack, FreePBX, shares, cert pipeline; live Syncro hours) 2026-06-20 14:19:29 -07:00
354754e5df feat: add gitea skill for bulletproof git/submodule operations
Comprehensive git/Gitea operations skill extracting battle-tested patterns from
sync.sh into reusable commands for the fleet. Makes submodule management,
status checks, and common git operations bulletproof across all machines.

Core features:
- Submodule operations: init, update, sync, status, fix
- Repository operations: status, health, fetch, pull, push, commit
- Utilities: verify-identity, inject-creds
- Auto-fixes: collision resolution, detached HEAD recovery, identity reconciliation
- Proper error handling with meaningful exit codes

Key fixes from sync.sh patterns:
- Credential injection from parent to submodules
- Untracked file collision resolution (preserves content)
- Identity reconciliation from identity.json
- Graceful degradation for transient failures

Usage examples:
  bash .claude/skills/gitea/scripts/gitea.sh submodule fix projects/radio-show
  bash .claude/skills/gitea/scripts/gitea.sh health
  bash .claude/skills/gitea/scripts/gitea.sh status --verbose

This fixes the radio-show submodule issue and provides tools for future git
operations without manual intervention.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-06-20 08:44:47 -07:00
d2f9a96d8f sync: auto-sync from HOWARD-HOME at 2026-06-20 08:05:51
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-20 08:05:51
2026-06-20 08:06:56 -07:00
ddf17454c2 sync: auto-sync from HOWARD-HOME at 2026-06-20 07:34:29
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-20 07:34:29
2026-06-20 07:36:01 -07:00
4c51be5a6d harness: fix guard detection failure on macOS bash 3.2
Replace mapfile (bash 4.0+) with bash 3.2-compatible while-read loop.
macOS ships bash 3.2.57 (last GPLv2 version); mapfile silently failed,
leaving STAGED array empty, so no security checks ran (conflict markers,
secrets, private keys all missed). Guard self-test now passes 12/12.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-06-20 06:17:02 -07:00
1e6010f145 sync: auto-sync from GURU-BEAST-ROG at 2026-06-19 19:54:43
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-06-19 19:54:43
2026-06-19 19:55:10 -07:00
e0c7a7abf6 wiki: compile jimmy (seed) — Jimmy Company / BLASTER2 onboarding + backup state 2026-06-19 16:37:01 -07:00
6149497ad1 sync: auto-sync from GURU-5070 at 2026-06-19 15:52:19
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-19 15:52:19
2026-06-19 15:53:37 -07:00
d861337191 clients/jimmy: BLASTER2 onboarding remediation note (2026-06-19) — NLA, Kaseya removal, MSP360 backup retention + console handoff 2026-06-19 15:53:36 -07:00
4b7f3c40e4 rmm: Blaster2 (Jimmy Company) onboarding diagnostic baseline — RED (3 crit: Kaseya, Win10 EOL, RDP no-NLA) 2026-06-19 15:53:36 -07:00
768f543d70 sync: auto-sync from GURU-BEAST-ROG at 2026-06-19 14:29:53
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-06-19 14:29:53
2026-06-19 14:30:22 -07:00
2806fb741a errorlog: auto-logged entries from cascades voice/syncro session 2026-06-19 13:18:47 -07:00
d4347bc45f cascades: Kitchen server phone bad/removed; Bistro phone relocated to Kitchen; Bistro replacement pending (28 active Poly, 37 voice devices) 2026-06-19 13:16:51 -07:00
f8d5bee88e sync: auto-sync from GURU-5070 at 2026-06-19 11:55:18
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-19 11:55:18
2026-06-19 11:56:40 -07:00
90015c96f4 sync: auto-sync from GURU-5070 at 2026-06-19 11:52:15
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-19 11:52:15
2026-06-19 11:53:35 -07:00
24db16b601 sync: auto-sync from GURU-BEAST-ROG at 2026-06-19 11:10:55
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-06-19 11:10:55
2026-06-19 11:11:21 -07:00
60bfb314b8 wiki+log: cascades voice VLAN migration COMPLETE (38 devices); band-selection diagnosis; Vertical 5GHz-lock handoff (pending) 2026-06-19 10:53:51 -07:00
a5d47be143 cascades voice inventory: COMPLETE — 29/29 Poly on VOICE (Kitchen server confirmed via vlan:30; controller IP field caches) 2026-06-19 10:48:02 -07:00
b51b21ed7c cascades voice inventory: +John Trozzi rm422 (.237) on VOICE; 28/29 Poly, only Kitchen server left 2026-06-19 10:43:25 -07:00
c05cc91717 cascades voice inventory: +John Trozzi rm422 (new, on VLAN20); Kitchen server fell back to .1 — 2 left to voice-key (27/29) 2026-06-19 10:40:08 -07:00
78a7e3c869 cascades voice inventory: VLAN migration COMPLETE — 28/28 Poly on VOICE (+Kitchen server, all 6 stragglers re-keyed 2026-06-19) 2026-06-19 10:32:10 -07:00
7eb7174e91 cascades voice inventory: +Bistro phone re-keyed; 27/28 Poly, 1 straggler left (Kitchen) 2026-06-19 10:30:14 -07:00
6d8f968cd1 cascades voice inventory: +Library phone (4th floor) re-keyed; 26/28 Poly, 2 stragglers left 2026-06-19 10:26:57 -07:00
1087d6e0f2 cascades voice inventory: +Movie Theater room phone (.234, 2nd floor) re-keyed; 25/28 Poly, 3 stragglers left 2026-06-19 10:24:06 -07:00
d2fec5056a cascades voice inventory: +Recreation room phone (.233, rm 132) re-keyed; 24/28 Poly, 4 stragglers left 2026-06-19 10:20:13 -07:00
5afe99ef33 cascades voice inventory: +Zachary Nelson (.232, Accounting Asst) re-keyed to VOICE; 23/28 Poly done, 5 stragglers left 2026-06-19 10:19:10 -07:00
1a70df56ff sync: auto-sync from GURU-BEAST-ROG at 2026-06-19 09:39:56
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-06-19 09:39:56
2026-06-19 09:40:24 -07:00
2a7253ae85 cascades: Vertical 5GHz-lock request letter (Poly handsets band-selection fix) 2026-06-19 09:39:48 -07:00
11d4bfbf65 sync: auto-sync from GURU-5070 at 2026-06-19 09:10:40
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-19 09:10:40
2026-06-19 09:11:51 -07:00
b66843096a sync: auto-sync from GURU-5070 at 2026-06-19 08:40:35
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-19 08:40:35
2026-06-19 08:41:57 -07:00
416f2a3d91 sync: auto-sync from GURU-KALI at 2026-06-19 08:28:07
Author: Mike Swanson
Machine: GURU-KALI
Timestamp: 2026-06-19 08:28:07
2026-06-19 08:28:10 -07:00
cd478caa04 self-check: drop /autotask from baseline commands
/autotask exists nowhere as a Claude command (no .claude/commands/autotask.md in
the repo; only a Grok skill by that name). It was a GURU-5070-specific artifact in
the provisional manifest and produced a spurious RED on every other machine. Removing
it clears the false FAIL fleet-wide.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 07:08:52 -07:00
dafcec5bce migrate: compliance-gated re-clone + per-machine state recovery script
Adds .claude/scripts/migrate-to-submodules.sh — self-contained, distributable by
raw URL since old clones can't pull. Detects compliance (history merge-base vs
origin, RECLONE.md+submodule offline fallback); leaves compliant clones untouched;
otherwise re-clones AND recovers the gitignored per-machine state a clone never
carries (identity.json, settings.local.json, .mcp.json, grepai, per-project
.env/.venv/.attachments), surfaces stranded unpushed commits, and FLAGS large
purged data for manual move (never re-imports it into git). Closes RECLONE.md's
"recover any uncommitted work" gap that stranded identity.json + the discord-bot venv.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 06:57:05 -07:00
a5ce67b988 wiki: compile cascades-tucson (full) — RF optimization night (2.4 power + data-driven 5GHz DFS, retry halved) 2026-06-19 05:05:15 -07:00
fb835fe756 unifi-wifi: data-driven channel selection — add survey-report, kill non-DFS bias
Codifies the scan-first/data-driven workflow proven on Cascades (where the baked-in
non-DFS bias picked the congested channels and a data-driven DFS plan halved 5GHz retry):

- NEW survey-report.py: rolls survey-collect JSON into the fleet per-channel/per-band-group
  measured busy% table + cleanest/dirtiest ranking + a suggested clean 40MHz palette. The
  decision-driver that was missing (we built it by hand).
- channel-plan.sh: na palette is now DATA-DRIVEN, not hardcoded non-DFS. Adds --channels
  (explicit palette) + --dfs ok|avoid|only; default considers ALL 40MHz primaries and lets
  measured busy% choose. Adds load-balancing + a local-search pass -> strong co-channel to 0.
- survey-collect.sh: per-AP "cleanest" report no longer pre-filters out DFS (DFS is usually
  cleanest here); marks DFS with *, points at survey-report.
- SKILL.md: documents the mandatory scan -> survey-report -> channel-plan --channels -> apply
  -> validate order + the Cascades lesson.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 05:00:47 -07:00
e5193b4f13 sync: auto-sync from HOWARD-HOME at 2026-06-19 04:51:32
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-19 04:51:32
2026-06-19 04:52:16 -07:00
7ff723d614 cascades 5GHz: data-driven clean-DFS channel plan APPLIED + validated (retry halved)
Did it right this time: completed the full channel survey (74/74) FIRST, let the
data choose. Survey proved DFS channels are 4-5x cleaner here (2-3% busy) than
non-DFS (149/157 = 12-28%, the property's worst). Per Howard: built the plan on
the 8 clean DFS 40MHz blocks (52/60/100/108/116/124/132/140), per-AP locally-
cleanest + neighbor graph-colored -> 0 co-channel, 3.5% avg busy. Applied to 72
non-mesh APs (width 40 too); mesh excluded; voice nudged back to 5GHz.

VALIDATED: 5GHz retry 8.7->3.8 avg (-56%), median 8.2->2.1 (-74%); 2.4 ~baseline;
satisfaction median 99; voice 31/31 (17 Poly on 5GHz, 3 coverage-cases on 2.4);
all 72 APs holding DFS, 0 radar vacates.

Kept tonight: 2b (2.4 power) + DFS plan + BSS-transition. 6GHz still WPA3-blocked.
auto_upgrade still OFF. Follow-up: recurring dfs-check radar monitor.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 04:37:19 -07:00
cc66da4f63 cascades 5GHz fix attempted (3a/3b) then ROLLED BACK; net kept = 2b only
Correction to earlier "deferred" report: after Howard pushed (5GHz needs fixing
regardless of 6GHz), I attempted width40 + non-DFS channel plan autonomously.
It did NOT validate live: 5G retry flat (8.7->8.4), 2.4 retry up (12->16) from
voice phones scattering to 2.4. ROOT CAUSE: the non-DFS channels here (149/157)
carry the heaviest EXTERNAL interference while DFS was cleaner -> forcing non-DFS
traded clean DFS for congested non-DFS. Rolled 5GHz back to baseline (channel+80MHz).
Kicked the 8 stuck Poly phones -> 6 back to 5GHz (rest are coverage-gap rooms).

End state recovered: satisfaction 98.4/med99, voice 31/31. Kept: 2b (2.4 power)
+ BSS-transition. 5GHz unchanged from start. auto_upgrade left OFF.

Doing 5GHz right needs the per-channel survey (choose channels by real cleanliness,
not non-DFS policy), reconsider non-DFS-only, 6GHz unblock (WPA3), band-steer voice.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 03:08:31 -07:00
3c85d2cfda cascades 2AM RF run: Phase 2b applied (2.4 power->medium x47); 2a/3a/3b deferred
Autonomous 2 AM window. APPLIED + verified: disabled 3AM auto-upgrade; 2.4
power Low/auto->MEDIUM on 47 radios (42 over-thinned floors 1-4 + 5 MemCare
floors 5/6), leaving 24 disabled + 5 mesh-auto untouched; CSCNet BSS-transition
on. Non-regressive (satisfaction 98.7->98.6, fleet 2.4 retry 12.0->11.7, 5G
8.7->7.4, MemCare 2.4 15.6->13.1); 30/31 voice phones online.

DEFERRED: 6GHz on CSCNet BLOCKED (Wpa3MandatoryFor6GHzBand — CSCNet is WPA2/PPSK;
needs supervised WPA3 conversion of the 427-client SSID). 3a/3b (width40 +
non-DFS channel plan, 19->0 dry-run) held for a supervised window since the
6GHz relief valve precondition failed and it's a coupled 74-AP change.

3AM auto-upgrade left OFF (re-enable when ready). Rollback source dev2.json.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 02:16:26 -07:00