portal-bulk-ops — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited portal-bulk-ops (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Bulk changes touch many resources, so a mistake multiplies. Run them through the `portal-bulk-operator` agent (.claude/agents/) or the `/portal-bulk` command — this skill is the thin discipline they follow. The per-block authoring rules still apply on every edit: see `assets/conventions.md` (binding, the $ trap, scoped CSS, safety) and the global `zportal` skill. For bulk data writes back to a database, do not hand-roll SQL in a loop — use the global `db-modifications` skill (the /api/db_modifications/run service).
your one-command revert if the batch goes wrong. (Writes are also mirrored to version control when configured — vc_status / vc_log — and any single resource is revertible via restore_resource.)
list_resource (resource="block", etc.) to build the exact set you'll touch.Resolve it to concrete ids; don't operate on a fuzzy "all blocks like X" — name them.
value (rename/restyle/retag/rebind/placement). Show it and get explicit confirmation before any mutation. No silent bulk writes.
get_resource resource="block" first to read current state, including its existing `ui_queries`.json_data + css; fix errors before writing.update_block — and RE-SEND the existing `ui_queries` verbatim. Omitting it wipes thebinding and the block goes blank. This is the #1 bulk footgun.
(an atomic read-modify-write: mode:"merge" to append/update/remove, mode:"replace" + confirm:true when the page must become exactly the list — it preserves customized grid.layouts and survivors' hidden flags). Never fire parallel per-block placement writes — they race and corrupt page order / drop blocks.
list_resource/get_resource a sample (and any rebound blocks) to confirmthe changes landed and bindings survived. Spot-check live data still flows on rebinds.
the `snapshot_portal` taken in step 1 to undo the whole batch.
place_blocksis the atomic placement primitive; never concurrent per-block placement writes to the same page.
get_resource resource="block" you did this loop.PORTAL_ALLOW_DATA_WRITES /PORTAL_ALLOW_ADMIN_WRITES); content/block writes are on by default. Bulk DB writes go through the global `db-modifications` skill, not raw loops.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.