Commit Graph

538 Commits

Author SHA1 Message Date
864f4d0a33 syncro: document Invoice Message (note field) + auto block-rate hint for non-block customers
The on-screen "Invoice Message" text block IS the invoice `note` field, editable via
PUT /invoices/{id} {"note": "..."} (response {"invoice": {...}}). Verified on the ACG
internal test account (#67741: set/verify/restore).

Billing flow now sets a one-line upsell hint on the invoice note — "Interested in
discounted labor? Ask us about block-rate pricing." — ONLY for customers with no prepaid
block (prepay_hours == 0). Block customers (prepay_hours > 0) get no hint; never clobber
a non-empty note.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 08:48:25 -07:00
313fd0ac3d onboarding-diagnostic: fix two Server-SKU false positives
Both surfaced on GND-SERVER (Server 2019 DC), would mis-grade every Windows Server:

1. OS EOL: build numbers are SHARED between client and server SKUs (17763 = Win10
   1809 AND Server 2019; 14393 = 1607/Server2016; 26100 = 24H2/Server2025). The map
   only had client dates, so Server 2019 (supported to 2029) was flagged EOL-2020 =
   false critical. Now branch on SKU ($caption -match 'Server') with a Server EOL map.

2. Stability disk errors: ids 7/51/153 are shared across providers; provider 'disk'
   = real I/O error, but 'Microsoft-Windows-Kernel-Boot' id 153 = "VBS disabled" boot
   noise. The unfiltered fallback counted that noise as disk errors (false warning on
   healthy boxes). Now count only true storage providers, no unfiltered fallback.

Parses clean. Re-run on GND-SERVER should drop from RED to AMBER (both false findings gone).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 08:18:27 -07:00
5f347dcf79 memory: AAD Connect AdminSDHolder writeback-permission pattern
Reference memory + index entry: diagnosing/fixing AAD Connect "completed-export-errors"
(8344 INSUFF_ACCESS_RIGHTS) where AdminSDHolder strips the connector account's write
permission on a protected admin object. Covers msDS-KeyCredentialLink (Russo) and
msExchSafeSendersHash (Glaztech); csexport /f:x diagnosis + dsacls AdminSDHolder grant.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 07:45:32 -07:00
d4d526ae26 sync: auto-sync from HOWARD-HOME at 2026-06-16 07:44:03
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-16 07:44:03
2026-06-16 07:44:15 -07:00
69987190fc unifi-wifi: roadmap — pfSense gateway compatibility layer (§ E)
Capture the "UniFi APs/switches behind a pfSense gateway" topology (Cascades, our
office, several clients) as a first-class roadmap item: make the gateway verbs
(gw-audit / gw-control / VPN) work against pfSense via a thin driver behind the
same verbs (gw-audit already detects num_gw=0 = third-party firewall).

Includes the verb->pfSense mapping (NAT port-forwards, filter rules,
easyrule block-ips, native OpenVPN/IPsec/WireGuard), ranked backend options
(REST-API pkg vs stock SSH easyrule/pfSsh.php vs diag_command.php vs config.xml),
existing vaulted pfSense creds (Cascades + office), and open decisions. SKILL.md
status block notes the proposed layer.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 07:39:53 -07:00
eb87710b9a unifi-wifi: add gw-control.sh — gateway router actions (port-forward + WAN firewall)
The write companion to gw-audit. Closes/scopes internet-facing port-forwards and
toggles WAN firewall rules at the USG/UXG/UDM via the RW controller REST admin.

Actions: pf-list / pf-disable / pf-enable / pf-delete / pf-set-ports / pf-set-src,
fw-list / fw-disable / fw-enable, block-ips (WAN address-group + WAN_IN drop rule).
Reads via Mongo (no cred); writes via login->CSRF->REST (rest/portforward,
rest/firewallrule, rest/firewallgroup). DRY-RUN default, --apply gated on
infrastructure/uos-server-network-api-rw, rollback saved to .claude/tmp.

Dry-run validated on Grabb & Durando (USG-3P): identifies the live "VPN" forward
(80,443,1723 -> 192.168.242.200) + the "GRE" WAN_IN accept that back an
internet-exposed, brute-forced PPTP. Closes the ROADMAP firewall/port-forward item.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 07:35:55 -07:00
48592bd16b sync: auto-sync from HOWARD-HOME at 2026-06-16 07:26:57
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-16 07:26:57
2026-06-16 07:27:06 -07:00
03b429d10a sync: auto-sync from HOWARD-HOME at 2026-06-16 01:20:51
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-16 01:20:51
2026-06-16 01:21:00 -07:00
4e797dbf61 sync: auto-sync from HOWARD-HOME at 2026-06-16 01:13:51
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-16 01:13:51
2026-06-16 01:13:59 -07:00
6557cdb5bb sync: auto-sync from HOWARD-HOME at 2026-06-16 01:09:44
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-16 01:09:44
2026-06-16 01:09:53 -07:00
af2feb1dfb sync: auto-sync from HOWARD-HOME at 2026-06-16 00:58:45
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-16 00:58:45
2026-06-16 00:58:54 -07:00
60b763df0c sync: auto-sync from HOWARD-HOME at 2026-06-16 00:40:03
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-16 00:40:03
2026-06-16 00:40:12 -07:00
ae3d760c37 sync: auto-sync from HOWARD-HOME at 2026-06-16 00:24:18
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-16 00:24:18
2026-06-16 00:24:27 -07:00
35a0cca2c6 sync: auto-sync from HOWARD-HOME at 2026-06-16 00:03:10
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-16 00:03:10
2026-06-16 00:03:21 -07:00
a62bd65be7 sync: auto-sync from HOWARD-HOME at 2026-06-15 23:43:51
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-15 23:43:51
2026-06-15 23:44:00 -07:00
e5f07afd90 sync: auto-sync from HOWARD-HOME at 2026-06-15 23:34:02
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-15 23:34:02
2026-06-15 23:34:11 -07:00
60d0a2bf87 sync: auto-sync from HOWARD-HOME at 2026-06-15 23:24:56
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-15 23:24:56
2026-06-15 23:25:05 -07:00
cb421c44fb sync: auto-sync from HOWARD-HOME at 2026-06-15 22:06:13
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-15 22:06:13
2026-06-15 22:06:20 -07:00
bf74f967eb sync: auto-sync from HOWARD-HOME at 2026-06-15 21:59:42
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-15 21:59:42
2026-06-15 21:59:51 -07:00
c99615df7e sync: auto-sync from HOWARD-HOME at 2026-06-15 20:40:48
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-06-15 20:40:48
2026-06-15 20:40:59 -07:00
6772c96fef sync: auto-sync from GURU-5070 at 2026-06-15 20:03:03
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 20:03:03
2026-06-15 20:03:17 -07:00
7eab5ed030 sync: auto-sync from GURU-5070 at 2026-06-15 19:38:20
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 19:38:20
2026-06-15 19:38:35 -07:00
b36b882568 sync: auto-sync from GURU-5070 at 2026-06-15 18:57:26
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 18:57:26
2026-06-15 18:57:39 -07:00
94ff0d61ee sync: auto-sync from GURU-5070 at 2026-06-15 18:45:55
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 18:45:55
2026-06-15 18:46:11 -07:00
9a2f806c67 sync: auto-sync from GURU-5070 at 2026-06-15 18:28:49
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 18:28:49
2026-06-15 18:29:02 -07:00
ca548687e7 sync: auto-sync from GURU-5070 at 2026-06-15 18:24:52
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 18:24:52
2026-06-15 18:25:08 -07:00
00de88fd38 sync: auto-sync from GURU-5070 at 2026-06-15 18:09:05
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 18:09:05
2026-06-15 18:09:29 -07:00
f6bd451d52 sync: auto-sync from GURU-5070 at 2026-06-15 18:03:38
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 18:03:38
2026-06-15 18:03:55 -07:00
236604924a sync: auto-sync from GURU-5070 at 2026-06-15 17:58:51
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 17:58:51
2026-06-15 17:59:06 -07:00
4ef6a9a3b0 sync: auto-sync from GURU-5070 at 2026-06-15 17:49:06
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 17:49:06
2026-06-15 17:49:23 -07:00
9581d87589 harness: scratch graduation pipeline (push side + spec) + flarum first test case
- graduation-push.sh: tar+scp scratch -> BEAST graduation-inbox over Tailscale (decoupled
  from /save, soft-fail if BEAST off). Tested: 241 files -> BEAST.
- docs/graduation-pipeline.md: full spec (push -> Ollama triage on BEAST GPU via API ->
  reviewed sanitize+git-mv). Secrets never enter git; ride the encrypted link to BEAST only.
- tmp-promotion-check.sh: rewritten pure-builtin (0.4s) after the per-file grep/fork loop
  hung /save for 4 min on Windows at ~240 scratch files. Deep triage moves to the pipeline.
- forum-post: GRADUATED the canonical flarum poster from scratch ->
  skills/forum-post/scripts/flarum-post.py (s9e markdown->XML + DB insert machinery), with
  the hardcoded IX SSH + Flarum DB passwords swapped to vault lookups. First pipeline test case.
- Vaulted the Flarum DB cred (services/flarum-community.sops.yaml) + sanitized the two
  plaintext copies in forum-post.md.
- errorlog: logged the WSL-stub correction + BEAST-Ollama-CPU(vram=0) finding + the
  promotion-check hang, all via the new log helper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 12:55:48 -07:00
d9c710be31 sync: auto-sync from GURU-5070 at 2026-06-15 12:15:54
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 12:15:54
2026-06-15 12:16:10 -07:00
55acc7f98a sync: auto-sync from GURU-5070 at 2026-06-15 11:54:35
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 11:54:35
2026-06-15 11:54:50 -07:00
9b9513f69e memory: dream cleanup — dedup DM memory, correct Mail.Send fact, fix index dup
- Merge duplicate DM memories into canonical feedback_dm_wrapping_commands_to_mike
  (points at the productized discord-dm skill; keeps UA/Cloudflare-1010 + 50109
  gotchas); git rm the session-created feedback_dm_wrapped_command_lines duplicate.
- feedback_365_remediation_tool: record that Exchange Operator HAS Graph Mail.Send/
  Mail.ReadWrite (corrects an earlier "suite has no Mail.Send") + the EXO-vs-Graph
  token-audience gotcha + Get-MessageTraceV2 + fresh-onboard EXO 401 propagation.
- Remove a duplicate MEMORY.md index line --apply-safe added from a false-orphan.
- Log the memory-dream false-orphan/dup-index defect to errorlog for skill linting.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 11:54:00 -07:00
9960da5f9a harness: fleet-wide functional-error + correction + friction logging
Add .claude/scripts/log-skill-error.sh — the canonical agent error log helper
(writes errorlog.md in DATE | MACHINE | skill | [type] error format, soft-fails).
Three categories: execution failures (default), user corrections (--correction),
and preventable self-inflicted friction (--friction; cite ref= when it repeats a
documented gotcha). Goal: stop paying tokens twice for the same avoidable mistake.

- CLAUDE.md: make logging mandatory for all skills + corrections + friction.
- skill-creator: new skills must wire in the helper (guidance + checklist).
- Retrofit every skill script's genuine failure branches to call the helper
  (b2/bitdefender/mailprotector/packetdial/coord python CLIs; remediation-tool
  + onboard365 bash; vault, rmm-auth, post-bot-alert, agy, grok, 1password,
  run-onboarding-diagnostic). Handled conditions + self-tests left alone.
- errorlog.md: broaden header to cover skills + harness + corrections; seed this
  session's corrections (INKY, Mail.Send token-audience, omnibox-strictness) and
  friction (git-bash /tmp, env-persistence, argv-limit, PowerShell var-case).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 11:40:25 -07:00
6e1c65877f sync: auto-sync from GURU-5070 at 2026-06-15 11:20:33
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 11:20:33
2026-06-15 11:20:56 -07:00
dc5c09b40b sync: auto-sync from GURU-5070 at 2026-06-15 09:41:53
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-15 09:41:53
2026-06-15 09:42:17 -07:00
153be4abec sync: auto-sync from GURU-BEAST-ROG at 2026-06-15 06:28:46
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-06-15 06:28:46
2026-06-15 06:28:51 -07:00
b186856d6f sync: auto-sync from GURU-BEAST-ROG at 2026-06-15 06:25:30
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-06-15 06:25:30
2026-06-15 06:25:39 -07:00
c5d4d3527c sync: auto-sync from GURU-5070 at 2026-06-14 20:04:14
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-14 20:04:14
2026-06-14 20:05:02 -07:00
30933bd35d sync: auto-sync from GURU-5070 at 2026-06-14 10:33:33
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-14 10:33:33
2026-06-14 10:33:49 -07:00
9b1c5c391d harness: fix py-vs-python3 doc gap — add py.sh resolver, repoint skill/command docs
The skill/command DOCS instructed Claude to run a bare `py ...`, which is the
Windows py-launcher — absent on Linux/macOS (exit 127, hit on GURU-KALI). A blind
py->python3 swap is wrong too: python3 is a broken MS Store shim on some Windows
boxes where `py` is the correct launcher.

Fix mirrors the resolution the .sh skill scripts already do:
- New .claude/scripts/py.sh: picks the interpreter that actually RUNS —
  identity.json python.command first, then py -> python3 -> python, each
  validated with `-c 'import sys'` so the MS Store stub is skipped. exec's it.
- Repointed all DOC invocations (10 files, ~70 sites) from `py ...` to
  `bash "$CLAUDETOOLS_ROOT/.claude/scripts/py.sh" ...` (incl. the `py -c` and
  `py -` heredoc forms in checkpoint.md / mailbox.md).
- Left the .sh skill scripts untouched — they already resolve py/python/python3.
- errorlog.md: marked the GURU-KALI entry RESOLVED.

Depends on CLAUDETOOLS_ROOT (seeded by ensure-settings-env.py); py.sh also
self-resolves the repo root via git/cwd as a fallback.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 09:48:54 -07:00
a6b6b4e80a sync: auto-sync from GURU-BEAST-ROG at 2026-06-14 09:07:13
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-06-14 09:07:13
2026-06-14 09:07:21 -07:00
f67db6f1f2 sync: auto-sync from GURU-BEAST-ROG at 2026-06-14 07:08:13
Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-06-14 07:08:13
2026-06-14 07:08:23 -07:00
6e5a389539 sync: auto-sync from GURU-5070 at 2026-06-13 12:10:56
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-13 12:10:56
2026-06-13 15:49:30 -07:00
be8604b4fb sync: auto-sync from GURU-5070 at 2026-06-13 06:16:25
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-13 06:16:25
2026-06-13 06:16:44 -07:00
ac3dbbbec9 sync: auto-sync from GURU-5070 at 2026-06-12 17:44:04
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-12 17:44:04
2026-06-12 17:44:21 -07:00
401ecca9a2 sync: auto-sync from GURU-5070 at 2026-06-12 13:21:22
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-12 13:21:22
2026-06-12 13:21:39 -07:00
9b02a508d6 core: restore 'vault + document EVERY in-session credential' rule; memory: IX WHM API token method + feedback
Triggered by ~1h lost on 2026-06-12 when the IX WHM access method was forgotten and
password auth no longer worked. CLAUDE.md Key rules now mandates vaulting via the vault
skill + thorough documentation for any credential surfaced in a session.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 10:52:30 -07:00
401ed7d4e0 wiki-compile: use fuzzy Syncro query= + fallback ladder (not exact name=)
Phase 2a used `customers?name=` which is near-exact and missed slug/name spelling
mismatches — e.g. slug gonzvar-tax-services vs Syncro "Gonzvar Tax Service"
(singular), causing a false "not in Syncro". Switch to `query=` (fuzzy) with a
fallback ladder (first word, then de-pluralized token) before concluding not-found.
2026-06-12 08:22:48 -07:00