Commit Graph

1841 Commits

Author SHA1 Message Date
6e96ec42e8 sync: auto-sync from GURU-5070 at 2026-06-21 18:07:41
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-21 18:07:41
2026-06-21 18:08:32 -07:00
a35a732b95 coord: add msg purge --before command for cleaning dealt-with messages
Adds c_msg_purge to coord.py + SKILL.md doc. Deletes coordination messages older than a
date cutoff via DELETE /api/coord/messages/{id}. Safety: --before is required (can't wipe
the store by accident), DRY-RUN by default (previews; --yes to actually delete), optional
--to scopes to one recipient session, paginates over the API's 1000-row limit cap, logs
partial failures. Replaces the ad-hoc curl loop used to purge 208 stale messages this session.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 18:08:32 -07:00
9a9b49c808 chore: advance security-assessment pin (3a2301b) — FR-1 doc + fieldcheck 2026-06-21 18:05:22 -07:00
3aaafd94f8 chore: advance security-assessment pin (66eb7cb) — UI sizing bump 2026-06-21 17:59:21 -07:00
ac6d5953a0 chore: advance security-assessment submodule pin to c82a3c9 (posture scoring + findings merged to main) 2026-06-21 17:56:20 -07:00
dd033289f6 memory: Howard cleared to handle GuruRMM merges/deploys (Mike, 2026-06-21)
Corrects the assumption that GuruRMM merge-to-main (=deploy) is Mike-only. Mike still owns RMM
architecture/direction, but Howard can land prepared+verified branches himself — they no longer
bottleneck on Mike. Updated approval-workflow-tools-vs-projects + MEMORY.md index + logged the
correction in errorlog.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 17:55:45 -07:00
63d750b7d3 sync: auto-sync from Mikes-MacBook-Air.local at 2026-06-21 17:52:26
Author: Mike Swanson
Machine: Mikes-MacBook-Air.local
Timestamp: 2026-06-21 17:52:26
2026-06-21 17:52:30 -07:00
ef55121d95 errorlog lint follow-ups: bitdefender log-gap fix + submodule memory + Windows CORE rules
- bitdefender gz.py: add "missing name" to _EXPECTED_ERROR_MARKERS — closes the last gap in
  Howard's errorlog suppression ("Missing name 'X' in 'options' object" validation errors were
  still logged). Verified all 10 real spam messages now suppressed; genuine errors still log.
- memory feedback_submodule_autosync_discipline: capture the recurring auto-synced-submodule
  rule (worktree or push-by-SHA + ls-remote verify; assert HEAD==origin/main before audits;
  never checkout-- shared files). Recurred on Howard-Home x3 + GURU-5070 this session.
- CLAUDE.md CORE Windows bullet: promote the two top recurring mechanical traps (/tmp path
  mismatch, curl.exe/plink quote-stripping) to always-loaded hard rules so they stop repeating.

Lint of errorlog.md: bitdefender expected-validation spam was ~70% of entries (Howard's
suppression now complete); fabb3421/Mail.Send drift closed earlier this session; wiki-compile
lock-release doc already fixed (entries predate the fix).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 17:48:00 -07:00
eb0a46e2b9 fix(coord): mark broadcast messages as read on server
PROBLEM: Broadcast messages were never being marked as read on the server,
only tracked in a local gitignored seen-file. This caused them to re-appear
in every new session or on different machines.

ROOT CAUSE: check-messages.sh lines 101-104 had a flawed assumption that
broadcasts share a single read_at field that would "clobber" other machines'
unread state. This was wrong - the API supports per-session read tracking.

FIX:
- check-messages.sh now marks broadcasts as read on the server (like personal
  messages), in addition to tracking them in the local seen-file
- Updated comments to reflect correct behavior
- coord SKILL.md now documents auto-mark-read behavior and reply workflow
- Manually marked all 39 accumulated unread broadcasts as read

IMPACT: Broadcast messages will now be properly marked as read and won't
keep appearing across sessions. Fixes user complaint about answered questions
(pfSense cred-path, fabb3421, etc.) continuing to show up.

Logged to errorlog.md as --correction.
2026-06-21 17:47:28 -07:00
e2ad87417e sync: auto-sync from HOWARD-HOME at 2026-06-21 17:45:23
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 17:45:23
2026-06-21 17:45:49 -07:00
68a05d3983 sync: auto-sync from HOWARD-HOME at 2026-06-21 17:40:03
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 17:40:03
2026-06-21 17:40:35 -07:00
f8c33c9019 sync: auto-sync from GURU-5070 at 2026-06-21 17:24:36
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-21 17:24:36
2026-06-21 17:25:26 -07:00
b49cb21fa6 sync: auto-sync from HOWARD-HOME at 2026-06-21 17:08:31
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 17:08:31
2026-06-21 17:09:00 -07:00
8f17c17258 fix(bitdefender): errorlog rule-compliance + moveCustomGroup param + ASCII-clean code
Finalizing the skill to "done, no errors, all skill rules":
- errorlog compliance: gz.py no longer logs EXPECTED API responses (validation,
  method-not-found, not-configured, rate-limit, expected state) or `raw`/selftest
  runs to errorlog.md. Per CLAUDE.md "do not log expected/handled conditions".
  Verified: selftest + probes leave errorlog unchanged.
- moveCustomGroup: param is `parentId`, not `newParentId` (6th doc-vs-live fix
  caught by a full param-shape audit).
- ASCII-clean code: removed all non-ASCII (em-dashes, U+21D2 arrow) from scripts
  (avoids cp1252 encode errors; aligns with the ASCII-markers rule).
- api-reference updated.

Verified: 18/18 read commands rc=0 live; selftest 75/75; parser builds; ASCII
markers + vault load + errorlog helper present.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 17:06:46 -07:00
f55feb07fa sync: auto-sync from HOWARD-HOME at 2026-06-21 16:54:31
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 16:54:31
2026-06-21 16:55:00 -07:00
3c4b108865 sync: auto-sync from HOWARD-HOME at 2026-06-21 16:16:19
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 16:16:19
2026-06-21 16:16:47 -07:00
aefbc8fce2 sync: auto-sync from HOWARD-HOME at 2026-06-21 16:14:48
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 16:14:48
2026-06-21 16:15:20 -07:00
be9d6c3979 sync: auto-sync from HOWARD-HOME at 2026-06-21 14:37:51
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 14:37:51
2026-06-21 14:38:49 -07:00
bfc6631c36 sync: auto-sync from HOWARD-HOME at 2026-06-21 14:37:28
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 14:37:28
2026-06-21 14:38:01 -07:00
603773cf25 fix(bitdefender): correct assignPolicy + isolate/unisolate param shapes (live-verified)
Found during the RMM-TEST-MACHINE full-function test (live tenant):
- assignPolicy: assigning a policyId REQUIRES inheritFromAbove:false in the same
  call, else the API rejects with a misleading "inheritFromAbove should not be
  used with policyId" error. Fixed assign_policy to always send it; dropped the
  wrong --inherit-from-above flag.
- isolate/unisolate: the API takes a SINGLE endpointId per call, NOT an
  endpointIds array (errored "not expected"). Client now loops per endpoint.
  unisolate fails while the isolate task is in progress — wait + retry.
- api-reference updated with the live-verified shapes.

Full function test PASSED on RMM-TEST-MACHINE: install(offline kit/SYSTEM) ->
enroll -> move(ZZ-RMM-TEST) -> assign-policy(GPS Base, applied) -> set-label ->
scan -> reconfigure -> isolate -> unisolate -> quarantine/blocklist read ->
managed uninstall(deleteEndpoint). selftest 75/75.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 14:26:44 -07:00
6fed424b47 sync: auto-sync from HOWARD-HOME at 2026-06-21 14:18:27
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 14:18:27
2026-06-21 14:19:01 -07:00
f1a32b6701 sync: auto-sync from HOWARD-HOME at 2026-06-21 14:06:40
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 14:06:40
2026-06-21 14:07:22 -07:00
00f5f1d491 sync: auto-sync from HOWARD-HOME at 2026-06-21 13:52:24
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 13:52:24
2026-06-21 13:53:09 -07:00
1c8fc09590 sync: auto-sync from HOWARD-HOME at 2026-06-21 13:31:49
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 13:31:49
2026-06-21 13:32:50 -07:00
eeaaa566d7 sync: auto-sync from HOWARD-HOME at 2026-06-21 13:18:04
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 13:18:04
2026-06-21 13:19:10 -07:00
d0c2e8825a sync: auto-sync from HOWARD-HOME at 2026-06-21 13:12:05
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 13:12:05
2026-06-21 13:13:09 -07:00
72bf65ef2f sync: auto-sync from HOWARD-HOME at 2026-06-21 13:04:37
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 13:04:37
2026-06-21 13:05:31 -07:00
861893dc33 sync: auto-sync from HOWARD-HOME at 2026-06-21 12:58:42
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 12:58:42
2026-06-21 12:59:30 -07:00
d53f306ebb sync: auto-sync from HOWARD-HOME at 2026-06-21 12:54:55
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 12:54:55
2026-06-21 12:55:37 -07:00
1836bfd34d sync: auto-sync from HOWARD-HOME at 2026-06-21 12:25:00
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 12:25:00
2026-06-21 12:25:45 -07:00
ef0398bc6b sync: auto-sync from HOWARD-HOME at 2026-06-21 12:06:23
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 12:06:23
2026-06-21 12:07:08 -07:00
760719e3a5 sync: auto-sync from HOWARD-HOME at 2026-06-21 12:00:27
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 12:00:27
2026-06-21 12:01:12 -07:00
85887fec19 wiki: cross-link uos-server <-> pfsense (unifi-wifi skill halves); add uos-server to index 2026-06-21 11:39:14 -07:00
e23e3e66b4 wiki: compile pfsense (full) — add unifi-wifi pfSense SSH gateway-control tooling 2026-06-21 11:36:30 -07:00
6c0beb5a96 sync: auto-sync from HOWARD-HOME at 2026-06-21 11:27:38
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 11:27:38
2026-06-21 11:28:23 -07:00
96a5dd6e7a sync: auto-sync from HOWARD-HOME at 2026-06-21 11:22:19
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 11:22:19
2026-06-21 11:23:04 -07:00
bb3c40190f sync: auto-sync from HOWARD-HOME at 2026-06-21 10:50:27
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 10:50:27
2026-06-21 10:51:11 -07:00
1e058ea596 docs(bitdefender): mark full API build-out complete in SKILL.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 10:48:07 -07:00
53d7e94c13 feat(bitdefender): complete remaining API modules (build-out 4/N)
- completed remaining modules: packages, reports, quarantine, incidents, push, licensing, integrations
- packages: getPackageDetails (read)
- reports: createReport (gated), getDownloadLinks/report-links (read), deleteReport (gated)
- quarantine: createRemove/RestoreQuarantineItemTask (gated; quarantineItemsIds)
- incidents/edr: getCustomRulesList (read), create/deleteCustomRule (gated), changeIncidentStatus/updateIncidentNote (gated)
- push: sendTestPushEvent (gated); licensing: getMonthlyUsage (read); integrations: getConfiguredIntegrations (read)
- all write methods gated via --confirm and raw; shapes verified via docs + safe validation probes
- selftest 60 -> 75 passing; BUILDOUT tracker: all live modules complete

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 10:46:43 -07:00
5ede4fee26 sync: auto-sync from HOWARD-HOME at 2026-06-21 10:42:33
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-21 10:42:33
2026-06-21 10:43:16 -07:00
a254e5f641 feat(bitdefender): complete Network module (build-out 3/N)
- Completed Network module for bitdefender skill (GravityZone Public API)
- Added getEndpointTags (read), setEndpointLabel (gated), createReconfigureClientTask/reconfigure (gated)
- Confirmed createUninstallTask, getEndpointsByPolicy, getManagedEndpointDetailsByIp, createScanTaskByMailboxes not found under /network
- Fixed endpoint-tags renderer to handle list result (previously crashing _print_kv)
- raw gates setEndpointLabel; reconfigure already gated
- selftest 55 -> 60 passing

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 10:32:26 -07:00
2a1ffab19f feat(bitdefender): complete Companies module (build-out 2/N)
- Completed Companies module for bitdefender GravityZone Public API
- Implemented: getCompanyDetails, getCompanyDetailsByUser, createCompany, suspendCompany, activateCompany, deleteCompany
- Discovered updateCompany and getCompaniesList not available; companies retrieved via network inventory
- Company types: 0=Partner, 1=Customer; createCompany accepts nested licenseSubscription via JSON passthrough
- All write operations require --confirm; raw also restricts createCompany/suspendCompany/activateCompany
- selftest 49 -> 55 passing

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 10:26:14 -07:00
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