Skip to content

feat(skills): add mass-operations skill - #2

Closed
didrikhegna wants to merge 1 commit into
mainfrom
skill/mass-operations
Closed

feat(skills): add mass-operations skill#2
didrikhegna wants to merge 1 commit into
mainfrom
skill/mass-operations

Conversation

@didrikhegna

Copy link
Copy Markdown
Member

Adds a mass-operations skill covering Crystallize mass operation files — the JSON batch format executed by the mass-operations runner as a BulkTask.

Sits alongside the existing skills at use-crystallize/skills/mass-operations/, following the same SKILL.md + references/ layout and frontmatter convention.

Contents

File Covers
SKILL.md workflow, execution paths, the rules that prevent most failures
references/intents.md all 59 intents, required fields, _ref outputs, idempotency, where resourceIdentifier is honoured
references/templating.md _ref chaining, handlebars, defaults.*, upload, the ten fetch* helpers
references/lifecycle.md CLI and raw API upload/run/monitor, troubleshooting
references/limits.md every enforced limit — batch caps, string/number bounds, structural rules, and the silent ones

Why it's worth having

Mass operations fail in ways local validation cannot catch, and the published docs are wrong on several points. The skill documents what the runner actually does:

  • One invalid operation rejects the entire file. Validation is all-or-nothing, which makes chunking a correctness requirement rather than a nicety.
  • An item upsert with neither itemId nor resourceIdentifier always creates — every run. externalReference is not a lookup key. This is the most common source of duplicated catalogue data.
  • item/unpublish validates but is not supported by the runner, and fails the whole task rather than one operation.
  • A large class of limits fails silently — no error, no log, altered data. Only the first component-type key in a content object is used; null content is coerced to empty and wipes the component; propertiesTable is rebuilt from the shape config; numeric decimalPlaces floors the stored value; choice and selection values not in the config are filtered out.
  • max: 0 means "unset" on a files component but rejects everything on images/videos, and required: false disables the configured min entirely — so omitting required is stricter than setting it to false.

It also fixes documentation discrepancies the skill previously inherited: the task lifecycle has no running state, the upsert return-shape guard is legacy 0.0.1 behaviour, resourceIdentifier is unimplemented on several intents that accept it, and shape/piece component settings must be nested under config — the inline form validates and is then silently discarded.

Notes for review

  • Guidance is grounded in observed runner behaviour rather than the published docs where the two disagree; the skill says so explicitly and tells the reader to trust the runner.
  • Limits are observed values, not contractual API guarantees. The verification line is dated so a reader can judge staleness — worth re-checking when the runner changes.
  • Docs-only, no bundled scripts, consistent with the sibling skills.

🤖 Generated with Claude Code

Documents Crystallize mass operation files - the JSON batch format executed
by the mass-operations runner as a BulkTask.

Covers the 59 intents and their required fields, _ref chaining and handlebars
templating, the upload/run/monitor lifecycle, and an exhaustive limits
reference (batch caps, string/number bounds, structural rules, and the large
class of limits that fail silently rather than erroring).

Corrects several points where the published docs differ from runner behaviour,
including the task status lifecycle, the upsert return shape, where
resourceIdentifier is actually honoured, and component config nesting.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Plopix

Plopix commented Aug 21, 2026

Copy link
Copy Markdown
Member

thx! merged manually

@Plopix Plopix closed this Aug 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants