51 Commits
Author SHA1 Message Date
Kimi Code 329a9b0998 New skill: commerce-structured-data
Companion to ai-crawler-accessibility-audit, which already covers the crawler
half well (including the answer-engine vs training-bot distinction) but has
zero schema coverage. This fills that gap rather than duplicating it.

Scoped to structured data specifically. Deliberately excludes 'AEO content
strategy' -- comparison articles, parasite posting, manufactured industry
reports ranking yourself top. The last of those means publishing a misleading
document; structured data is a factual description of what you actually sell.

Leads with 'find what is already emitted', because duplicate conflicting schema
is a more common failure than missing schema -- Woo core, the SEO plugin and
the theme each emit their own. Covers AggregateOffer for variable products
where a single Offer misrepresents a size surcharge, per-locale emission on
WPML sites, and the field gotchas: comma decimal separators silently breaking
parsers, JS-injected JSON-LD being invisible to non-JS crawlers, and
non-standard WP table prefixes making a direct-SQL audit fail in a way that
reads as a different problem.
2026-09-07 11:23:40 +02:00
Kimi Code 50add8ae20 wp-s3-media-offload: endpoint bug is RESOLVED, and the real cause is the items table
Retested 2026-09-07: a direct SigV4 PUT to s3.palmasolutions.net succeeds. The
Caddy fix landed the same day the bug was written up and the skill was never
updated, so for two weeks it told readers the endpoint was unusable.

Adds the actual cause of an apparently-dead offload: AS3CF 3.0+ stopped writing
amazonS3_info postmeta and records offloads in <prefix>_as3cf_items, so counting
postmeta reports zero on a working site. Also corrects the backfill recipe --
wp_update_attachment_metadata() does nothing in 4.x, the item handler is the
real API.
2026-09-07 07:10:38 +02:00
Kimi Code 606e2c6f62 bastille-jail-provisioning: how to actually change bastille_prefix
Records the gringo 2026-09-06 migration: zfs set mountpoint fails busy with
child datasets mounted, zfs set -u avoids it entirely, and jail.conf (not just
fstab) carries the path -- missing it means zero jails start.
2026-09-06 22:23:25 +02:00
Kimi Code 06773357ae sandbox-browser-automation: browser cache can go stale, run playwright install chromium
Verified 2026-09-06: a launch failed on a missing chromium_headless_shell-1217
executable because the package moved to a build revision the cache lacked. The
skill previously said no re-download was needed.
2026-09-06 21:32:13 +02:00
MalinandClaude Sonnet 5 cfd518d451 feat: add sitrep-panel skill
Live local HTML progress report (status board, running narrative,
screenshots, newest-first log) served on localhost via a stdlib-only
Python server, so a human can watch a long/delegated agent task
without reading the raw transcript. Adapted from dbl8005/sitrep-panel
(MIT), evaluated and drafted via Codex per this fleet's standard
skill-candidate review process. Bundled server and HTML template
copied unmodified from upstream.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-24 07:34:15 +02:00
Malin fa824ed4e0 feat: new skill new-project-naming-check
Trademark + domain clearance procedure for any new product/project
name, established while naming the Turnero job-board project. Covers:
querying OEPM's real live trademark search (consultas2.oepm.es) rather
than any partial local mirror -- confirmed Vixilia's own bopi_records
backfill is still incomplete (only reached 2012 as of 2026-08-23) and
would give false-clean results for anything registered 2015-2025; and
checking domain availability separately, since a clean trademark result
doesn't imply an available domain (confirmed real case: "Turnero" had
zero trademark hits but both turnero.com and turnero.es were already
taken by unrelated parties).
2026-08-23 20:10:53 +02:00
Malin 8dd10ed81c skill: add wazuh-soc-alert-triage
Codex-evaluated agentic-soc-platform (github.com/FunnyWolf/agentic-soc-platform)
against this fleet's Wazuh deployment and informatiq-dashboard monitoring
integration. Adopted the reusable architecture only (evidence-preserving
normalization, deterministic correlation, approval-gated playbooks,
shadow-mode rollout) - not the platform itself. Rejected BagelHole/DevOps-
Security-Agent-Skills (163 skills, all duplicate/out-of-scope/unsafe) and
guillaumemeyer/watermarks-remover (narrow, no reusable technique beyond
existing c2patool/ExifTool).
2026-08-22 14:14:17 +02:00
MalinandClaude Sonnet 5 0b5e0598c4 skill: add wp-s3-media-offload
Documents the fleet's WP Offload Media pattern (warrior/stray MinIO,
dedicated bucket per site, WPS3Media plugin) and an open production bug
found while applying it to sateulera-dev: the public S3 API endpoint
(Caddy -> warrior) currently rejects all signed writes, unrelated to
credentials or plugin config.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-22 08:32:35 +02:00
Malin ebc71fdcd0 docs: add sandbox-browser-automation skill
Documents what's actually installed for browser automation in this sandbox
(Playwright via Python, no global Node package, browsers pre-cached) and a
DNS-routing quirk on *.palmasolutions.net domains, plus the circular
overflow:hidden badge-clipping bug class found while debugging sateulera-dev.
2026-08-20 21:43:56 +02:00
MalinandClaude Sonnet 5 3b288c0a21 feat: add humanize-generated-content skill
Codifies the existing (but silently skippable) humanize step as a
checked skill after a real content batch published without it —
codex hand-rolled its own generation call instead of going through
content-agent/agent.py, which unconditionally runs both draft_rewrite()
and humanize(). This skill makes the requirement explicit, gives the
safe invocation path, and states how to verify the pass actually ran
rather than trusting a delegate's self-report.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-19 14:47:19 +02:00
MalinandClaude Sonnet 5 6e44673792 docs: add phreak to server fleet map, note pinky's ArchiveBox+trawl
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 13:41:04 +02:00
MalinandClaude Sonnet 5 251498ad58 bastille-jail-provisioning: add FreeBSD-adapted script safety patterns
Merge in a checklist-style "provisioning script safety" section, adapted
from wshobson/agents' bash-defensive-patterns skill (fetched directly
from GitHub, MIT licensed) rather than trusted from its catalog summary.

Covers: shell-choice caution (#!/bin/bash isn't guaranteed on FreeBSD;
bash is a package at /usr/local/bin/bash, not base), a contextual
error-handling philosophy instead of a blanket `set -Eeuo pipefail`,
trap-based cleanup/logging for scripts interrupted mid-jail-creation
(without auto-rollback, which can worsen the known destroy/create IP
churn issue), jail-name/IP input validation before destructive `bastille`
commands, and FreeBSD `mktemp`/`sed -i`/`date` syntax differences from
GNU. Deliberately dropped the upstream's interactive `rm -rI` cleanup
pattern (wrong for unattended SSH automation) and did not import
retry/locking/ShellCheck-gate advice that wasn't actually present in the
real upstream files. Cross-references remote-shell-quoting-safety instead
of duplicating its nested-shell-quoting content.

Also documents the /usr/local/bastille vs /www/bastille bastille_prefix
split already present across this fleet's hosts (gringo/staging vs
granja), which the new script-safety guidance assumes readers already
know not to hardcode.

Full worked patterns and code examples live in the new
references/script-safety.md; SKILL.md keeps the load-bearing summary.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 21:28:05 +02:00
MalinandClaude Sonnet 5 6fa011a9a6 feat: add wordpress-performance-diagnostics skill
Paired skills.sh/autoskills.sh catalog scans (2026-08-15, reports in
granja/_temp/codex-logs/) independently flagged wordpress/agent-skills'
wp-performance module as the best net-new find of the whole scan: a
measurement-first, backend-only WP diagnostic workflow (WP-CLI
doctor/profile, headless Query Monitor, autoload/object-cache/cron
checks) — a strong fit since this fleet's 13+ WordPress sites are all
headless/jailed with no browser-first profiling access.

Adapted from github.com/wordpress/agent-skills (skills/wp-performance)
rather than installed verbatim: swapped the upstream's local/SSH
assumptions for the fleet's actual `bastille cmd ... su -m www`
remote-execution pattern (reusing wordpress-cli-remote-execution's
convention exactly), added a jail/site selector step against the real
granja/staging/gringo inventory, narrowed the always-collect baseline to
four metrics (TTFB, autoload size, object-cache presence, cron health)
with fleet-specific context for each, added redaction guidance for
Valkey/DB credentials that diagnostic output can surface, and replaced
the upstream's hardcoded "WordPress 7.0+" compatibility claim with
per-site version verification.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 21:26:58 +02:00
MalinandClaude Sonnet 5 1d24660303 skills(wordpress-plugin-conventions): merge security/lifecycle checks from wordpress/agent-skills
Per the 2026-08-15 skills.sh and autoskills.sh scans, both flagged
wordpress/agent-skills' wp-plugin-development module (Automattic-origin,
now WordPress-org-hosted) as high-value source material for iWP's plugin
skill: nonce+capability dual-check discipline, late escaping, prepared
SQL, cron idempotency, and uninstall-vs-deactivation guardrails.

Adapted (not copied) against real iWP plugin code in wp-plugins/:
- nonce+capability must-both framing, cited against
  class-iwp-cache-db-cleanup.php's actual AJAX handler
- late-escaping and wp_unslash()/explicit-key superglobal reading
- %i identifier-placeholder version gate (WP 6.2+, most iWP plugins
  floor at 6.0 or lower)
- new "Admin settings" section documenting the real Settings-API vs.
  AJAX-dashboard split across the suite, since the source's generic
  Settings-API-first prescription doesn't match roughly half of iWP's
  plugins
- new cron idempotency section citing the existing wp_next_scheduled()
  guard already used consistently in iwp-cache/iwp-woosales/iwp-booking
- new uninstall-vs-deactivation section flagging that only 3 of ~15
  plugins ship uninstall.php despite most creating options/tables
- new release-packaging checklist tied to iWP's actual IWP_Updater
  version-wiring convention (header/constant/updater param must agree)

Provenance noted inline with source URL. Left out the source's generic
architecture/Settings-API prescription and its detect_plugins.mjs
script (skill's house style is prose-only, no bundled scripts).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 21:26:46 +02:00
MalinandClaude Sonnet 5 d6ad3fa684 Merge multisite/blast-radius safety practices into wordpress-cli-remote-execution
Both the skills.sh and autoskills.sh scans (dispatched this session, see
granja/_temp/codex-logs/{skills-sh-scan,autoskills-sh-scan}.md) independently
flagged wordpress/agent-skills' official wp-wpcli-and-ops module as high-value
source material for this skill: safe search-replace, db export/import,
multisite targeting, and deterministic environment inspection before any
destructive command.

Merged in (adapted to this fleet's bastille cmd + su -m www invocation model,
not the upstream's local/SSH-direct WP-CLI assumption):
- pre-write environment/blast-radius inspection sequence (plain wp-cli calls
  through the existing invocation pattern, not the upstream's Node.js
  wpcli_inspect.mjs script)
- multisite targeting checklist (--url requirement, site list iteration)
- safe search-replace/domain-migration workflow (backup, dry-run, flush)
- db export/import, plugin/theme, and cron/cache-flush guardrails

Ties the upstream --allow-root warning to this fleet's own documented
wp-content ownership-drift incident (docs/server-granja.md) and cites the
real jail counts/CVE rollout from docs/server-granja.md, server-staging.md,
and server-gringo.md for grounding. Provenance noted in the file with source
URLs. Deliberately left out generic plugin-development/performance/PHPStan
material from the same upstream repo — out of scope for this remote-execution
skill.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 21:25:44 +02:00
MalinandClaude Sonnet 5 3b8ef056cb Add mailcow-diagnostics skill for multi-tenant mailcow-dockerized ops
External DNS/SPF/DKIM/DMARC/MTA-STS/TLS/DNSBL diagnostics adapted from
arova-ai/agent-skills' email-server-diagnostics, combined with this
session's own direct mailcow migration experience (geeky/posta/postman
-> spoof consolidation): real container naming pattern
(mailcowdockerized-<service>-mailcow-1), mailcow's own official
helper-scripts/backup_and_restore.sh and update.sh, the acme-mailcow
cert container, and an explicit multi-tenant blast-radius guardrail
since one instance serves many unrelated businesses' domains.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 21:25:05 +02:00
MalinandClaude Sonnet 5 65c01ddb43 feat: add hallmark design skill
Anti-AI-slop design skill (greenfield pages, audits, redesigns, design
extraction from URLs/screenshots) -- installed and validated in an
earlier session, was sitting untracked. Full reference library:
components, macrostructures, themes, genres, verbs (audit/redesign).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 14:29:38 +02:00
MalinandClaude Sonnet 5 051688e196 feat: 10 new skills scouted from spec-kit and deepseek-harness
Sourced via Codex scan of github/spec-kit and deepseek-ai/deepseek-harness
(scan reports in granja/_temp/codex-logs/), then authored by Codex against
this repo's exact SKILL.md format/density, calibrated against
bastille-jail-provisioning/writing-implementation-plans/tdd. Spot-checked
two directly (write-feature-specification, harden-async-lifecycle-code) --
concrete, code-example-backed procedures, not generic advice.

From spec-kit: write-feature-specification, clarify-feature-specification,
audit-requirements-quality, analyze-spec-plan-task-consistency,
converge-implementation-to-spec.

From deepseek-harness: harden-async-lifecycle-code, test-real-entry-paths,
snapshot-agent-behavior, maintain-decision-records,
remove-reasoning-transcript-prose.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 14:28:54 +02:00
Malin 8f34371a9f skills: add wordpress-elementor-safe-cli-editing
Evaluated the Stonewright WP MCP repo (github.com/cosmincraciun97/
stonewright-wp-mcp) per user request -- decided against adopting it or
its MCP server (this fleet already does WP work via shell+WP-CLI, and
its Gutenberg layer is thin wrapping over parse_blocks/serialize_blocks
we can already call directly). Its Elementor V3 _elementor_data
read/write pipeline is genuinely well-engineered, non-obvious, and worth
having as a reference: double-encoding trap, wp_slash-before-persist,
surgical patches that preserve unrecognized settings keys, and
readback+cache-clear+visual verification after write. Distilled into
this skill for CLI/wp-eval-based Elementor edits (not the MCP itself).
2026-08-13 18:16:39 +02:00
Malin 09a96c74dc docs: correct pinky's SSH access note in server fleet map
root@ works fine (standard key, same as every other host) — the
SSH-blocked claim was from a session that only tested malin@pinky.
Adds real survey detail: SDK path, no-JDK-on-host build pattern, the
shared Android emulator container.
2026-08-13 13:57:32 +02:00
Malin 2fe7e44dc1 docs: add pinky to server fleet map
Pinky was missing from the map entirely. Documents its purpose
(Docker/Linux-only workloads, esp. Android SDK/emulator builds) and the
current SSH access gap (root's key not authorized, user is malin) found
while chasing an apuntiq Android build.
2026-08-13 13:32:27 +02:00
Malin 86b06e5b47 Add Obsidian vault memory skill 2026-08-12 18:56:23 +02:00
Malin a44bf184b9 Add API, migration, and browser verification skills 2026-08-12 18:16:17 +02:00
Malin f69f2580b0 docs: gitea-release-workflow — asset downloads work via public host substitution
Confirmed on Gitea 1.27.1 (2026-08-12): browser_download_url in the API
response points at an internal hostname (gitea.barky) but the file
downloads correctly once you swap in the instance's public hostname.
Verified end-to-end with a real binary asset (md5sum match) on a private
repo accessed via token.
2026-08-12 13:06:54 +02:00
MalinandClaude Sonnet 5 ae61c7ce7b skills: add SEO/AEO audit and grounded-JSON-LD skills from citeworthyio/seo-agent
Evaluated citeworthyio/seo-agent for reusable process knowledge. Relevant
to this fleet's WordPress content sites (granja travel news, content-agent
pipeline): a crawl-diagnose-approve-recrawl-measure loop for SEO metadata
changes, a three-layer AI-crawler accessibility audit (robots policy, bot
delivery, readable content), and a fail-closed method for generating and
safely injecting Article JSON-LD. Keyword research and citation-probe
pieces of the source repo were skipped as underdeveloped or too
infra-coupled to be reusable here.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 13:28:29 +02:00
MalinandClaude Sonnet 5 c7ce105e00 skills: add writing-implementation-plans, receiving-code-review, finishing-development-branches
Evaluated obra/superpowers and JuliusBrussee/caveman for gaps in the
existing library. These three fill real ones (plan-to-delegate handoff,
evidence-based review triage, completion vs. integration authority);
adapted for this fleet's Gitea/RLS/multi-delegate conventions. Everything
else in both repos duplicated existing skills or didn't fit (see README
Provenance note on caveman).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 13:21:03 +02:00
Malin fa7c367420 skills: fleet map, default-deny standard, modded-app and vuln-scan skills
- server-fleet-map: add gringo row
- bastille-jail-provisioning: elevate default-deny-outbound to the standard
  for every new jail; reference gringo's live pf.conf
- modded-app-update-pattern: new skill, fork/rebase pattern for locally
  patched apps; uses tailnetatlas on gringo as the concrete example
- dependency-vuln-scanning: new skill, npm audit / pip-audit / osv-scanner
  cadence for deployments and monthly thereafter
2026-08-08 14:01:43 +02:00
MalinandClaude Sonnet 5 be36bcc802 docs: document pf NAT interface-macro silent-no-op bug on shared-IP-alias hosts
Real incident on the staging host: nat on $ext_if from <subnet> to any ->
($ext_if) silently failed to rewrite the source IP when that IP was
already aliased on the same interface, breaking all outbound jail traffic
with no error anywhere - just clean timeouts. Fixed by using an explicit
target IP instead of the interface macro. Cost real debugging time to
trace from "WordPress admin hangs after a PHP upgrade" back to this.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-07 21:04:24 +02:00
MalinandClaude Sonnet 5 106e61cfbb docs: document NPM dedicated-port jail convention and zsh $path footgun
Two real gotchas from today's goddy->gringo Laravel migration: every jail
on an NPM-fronted host needs a dedicated listen port (8000+last-octet),
not just the shared port 80, or NPM cutover silently can't reach it even
though every direct/Host-header test passes. Separately, zsh ties a
variable literally named `path` to $PATH itself - overwriting it broke
every subsequent command in a config-editing script with no clear error.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-07 19:44:23 +02:00
Kimi Code 27e3a2975f docs: list new skills and add external-skill vetting note 2026-08-07 18:58:38 +02:00
Kimi Code 02ecce3e3e feat: add tdd skill 2026-08-07 18:58:34 +02:00
Kimi Code 4cba99eb72 feat: add resolving-merge-conflicts skill 2026-08-07 18:58:34 +02:00
Kimi Code f4c52dee19 feat: add research skill 2026-08-07 18:58:34 +02:00
Kimi Code 950e646e7a feat: add redesign-existing-projects skill 2026-08-07 18:58:34 +02:00
Kimi Code 1c00431a0d feat: add handoff skill 2026-08-07 18:58:34 +02:00
Kimi Code 8d44dba880 feat: add full-output-enforcement skill 2026-08-07 18:58:34 +02:00
Kimi Code 8c126125cb feat: add diagnosing-bugs skill 2026-08-07 18:58:34 +02:00
Kimi Code 779d4ee693 feat: add codebase-design skill 2026-08-07 18:58:34 +02:00
Kimi Code 3e8b3ae917 feat: add code-review skill 2026-08-07 18:58:34 +02:00
MalinandClaude Sonnet 5 7c066c8f65 feat: add linus-torvalds-code-review skill
Adapts the clean (no-profanity) SKILL.md variant from Mte90/linus-torvalds-skill,
distilled from 38,293 real Linus Torvalds code-review moves across two decades
of Linux kernel mailing list emails. The upstream project also ships a profane
"soul" persona variant, deliberately not installed here.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-07 17:36:21 +02:00
Malin 8dbe1eb9c1 docs: document the proxy_pass cutover outage and its fix 2026-08-03 14:29:27 +02:00
Malin 4eff29939e docs: add disk-space-check discipline after a real venus MariaDB outage caused by bulk jail creation 2026-08-03 13:47:46 +02:00
Malin d837c6dc1d docs: add venus-specific gotchas from the first production migration (live sysctl, resolv.conf inheritance, STP display red herring) 2026-08-03 13:38:16 +02:00
Malin eb7c63d1f9 feat: document the dedicated-subnet jail migration pattern, update staging jail identity 2026-08-03 13:17:57 +02:00
Malin c868eae35f fix: wordpress-plugin-rebrand's updater-wiring example could reintroduce the dead-updater bug on singleton-class plugins 2026-08-03 06:25:28 +02:00
Malin 3242dadc47 feat: document the nested-add_action-at-lower-priority hook bug (real incident, 3 plugins affected) 2026-08-03 06:19:50 +02:00
MalinandClaude Sonnet 5 eeb08a0d77 feat: capture staging-verification lessons from iWP Cache deployment
New skill wordpress-plugin-staging-verification: use the persistent
staging-1 jail (real-world plugin set left active) instead of a
disposable clean-room jail, full verification checklist, and the
cosmetic-proc_open-error-vs-real-fatal distinction.

Extended bastille-jail-provisioning: bastille0-loopback-missing gotcha
(pass the interface explicitly), IP-alias-can-silently-fail-after-
recreate gotcha, host-reverse-proxy-vs-jail-IP curl mixup, Valkey as
part of the stock stack (correct FreeBSD package name, ACL auth
requirement).

Extended wordpress-plugin-conventions: drop-in source files
(object-cache.php/advanced-cache.php logic) must be excluded from any
glob-based plugin autoloader, or they redeclare WP core's own
wp_cache_*() functions and fatal -- real bug found and fixed live during
iWP Cache's first staging activation attempt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 21:39:39 +02:00
Malin 6a9c364012 feat: add parallel-delegate-shared-files skill from iWP Cache incident 2026-08-02 21:09:58 +02:00
iWP Claudy 5af3379470 Add design/accessibility/security/sanitization skills 2026-08-02 20:15:46 +02:00
iWP Claudy 39a637410c Initial skill library: 9 skills for delegate briefs
WordPress plugin rebrand/conventions/remote-CLI patterns, Gitea release
workflow, bastille jail provisioning, remote shell quoting safety, server
fleet map, delegate brief writing, and verification discipline -- all
derived from real incidents this session, plus two skills adapted (MIT
license, attributed) from obra/superpowers and andrej-karpathy-skills.
2026-08-02 20:08:29 +02:00