Conversation
Each skill now follows a consistent structure (Overview, When to Use, domain-specific section, Process, Common Rationalizations, Verification, Related Skills, Suggested Bundled References/Scripts, Unverified Claims). Frontmatter descriptions are in third person and include "Use when" trigger phrases. All 7 skills pass scripts/validate-skills.sh. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Captures the audit findings and 4 workstreams (per-skill reference bundling, 3 high-leverage scripts, validator hardening + evals, discoverability polish) that the /batch run executes against this branch. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Document the script execution convention for sent-skills v0.3.0: what lives in top-level scripts/ (repo-wide tooling) vs per-skill scripts/, the Python 3.11 stdlib-only contract, fixture and --help requirements, the recommended SKILL.md invocation pattern, the three shipped scripts, and the checklist for adding new ones. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Promotes the previously command-only Sent router into a real skill at skills/sent/SKILL.md so Claude auto-invokes routing whenever the user mentions Sent broadly (without naming a channel) — instead of only when the user types /sent. The slash command is reduced to a thin shim matching the shape of the other shim commands and now invokes the new skill rather than restating the routing logic. - NEW skills/sent/SKILL.md (Overview, When to Use, routing table for the 7 vertical skills, clarifying questions, when not to route, related skills with link to references/sent-glossary.md) - EDIT .claude/commands/sent.md → 7-line shim invoking sent-skills:sent Validator passes (8 skills OK). Per plan.md WS4 / unit 12. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- README.md: add Command ↔ skill mapping table; update Repo layout to show per-skill references/ and scripts/ subdirectories. - CLAUDE.md: add the same mapping table; document that reference paths in SKILL.md resolve relative to the SKILL.md file; document per-skill scripts/ as Python 3.11+ stdlib-only with paired good.json/bad.json fixtures. - CONTRIBUTING.md: require eval cases at evals/<skill>.yaml for new skills; add gerund-form naming guidance for new skills (existing names frozen); clarify references location (single-skill vs cross-cutting). - docs/skill-anatomy.md: add Per-skill bundling section and Eval cases section; reconcile older "Shared by multiple skills" guidance with new per-skill layout. - .claude-plugin/plugin.json: bump version 0.2.0 → 0.3.0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds trigger-quality eval cases (one YAML per skill, including a forward-looking sent.yaml meta-dispatcher case) and a thin bash printer that brackets each YAML for manual human review in a fresh Claude Code session. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds five best-practice checks to scripts/validate-skills.sh, all of
which pass against the current 7 in-repo skills:
- description in third person (FAIL) — strips "quoted phrases" first
so verbatim user triggers don't trip the check
- no XML angle brackets in description (FAIL)
- no Windows-style backslash paths in body outside code fences (FAIL)
- vague description openers (Helps/Manages/Tools for/...) (WARN only)
- extend reserved name list to include 'meta' and 'google' (FAIL)
Reference-existence and cross-skill-existence checks are intentionally
deferred to v0.4 to keep this unit decoupled from the other batch units.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
unit-8: add scripts/README.md
unit-11: add markdown link check to CI
unit-12: promote /sent to a meta-dispatcher skill
unit-13: docs + plugin v0.3.0 bump
unit-10: add evals/ directory and manual eval runner
unit-9: extend validator with 5 conservative checks
Manually rebased onto dev because the worker's worktree branched from pre-baseline main, conflicting with the optimized SKILL.md on dev. Per-skill content is identical to PR #1. - Move references/rbm-agent-spec.md → skills/rcs-agent-onboarding/references/ - Add rcs-launch-evidence-packet.md, rcs-fallback-patterns.md - Add glossary cross-link to Related skills Closes #1 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Manually rebased onto dev (worker branched from pre-baseline main). Per-skill content is identical to PR #3. - Move references/multi-tenancy-patterns.md → skills/sender-profile-architect/references/ - Add sender-profile-data-model.md, profile-boundary-examples.md - Add glossary cross-link to Related skills Closes #3 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Manually rebased onto dev (worker branched from pre-baseline main). Per-skill content is identical to PR #4. - Move references/waba-embedded-signup-spec.md → skills/waba-embedded-signup/references/ - Add waba-onboarding-runbook.md, whatsapp-sender-profile-mapping.md - Add glossary cross-link to Related skills Closes #4 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Manually rebased onto dev (worker branched from pre-baseline main). Per-skill content is identical to PR #5. - Add template-validation-matrix.md, template-ui-wireflows.md, template-status-handling.md - Add negative trigger to description (excludes Jinja/Handlebars/email templates) - Add glossary cross-link to Related skills Closes #5 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Manually rebased onto dev (worker branched from pre-baseline main). Per-skill content is identical to PR #8. - Move references/tcr-use-cases.md → skills/sms-10dlc-registration/references/ - Add 10dlc-evidence-checklist.md, 10dlc-rejection-remediation.md - Add validate_10dlc_packet.py (stdlib only) + good/bad fixtures - Add glossary cross-link to Related skills - Update bundled-resources table to reflect shipped fixtures Closes #8 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…analyzer Manually rebased onto dev (worker branched from pre-baseline main). Per-skill content is identical to PR #9. - Move references/mdr-status-codes.md → skills/messaging-performance-analyzer/references/ - Add performance-diagnosis-playbook.md - Add analyze_mdr_funnel.py (stdlib only) + good/bad fixtures - Add glossary cross-link to Related skills - Replace aspirational script names in bundled-resources table with the shipped one Closes #9 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Manually rebased onto dev (worker branched from pre-baseline main). Per-skill content is identical to PR #11. - Move references/waba-template-categories.md → skills/waba-template-author/references/ - Add waba-template-examples.md, template-rejection-playbook.md - Add lint_waba_template.py (stdlib only) + good/bad utility fixtures - Add glossary cross-link to Related skills - Update bundled-resources table to reflect shipped fixtures Closes #11 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
User provided a comprehensive snapshot of docs.sent.dm covering: dashboard walkthrough, quickstarts (first message, first template, channel setup, account setup, try Sent), glossary, full API reference (auth, rate limits, idempotency, sandbox mode, errors, data models), and the dev OpenAPI spec URL. This unlocks ground-truth grounding for the 14 reference files created in the batch run. Most "Unverified claims" sections in skills can now be removed or tightened to point at this snapshot. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…apshot - rbm-agent-spec.md: confirm Sent's RCS model is not self-service (email support@sent.dm), Agent appears post-approval; lock in Sent-side terminology (RCS Agent, Branded Sender, Rich Card, Carousel Card up to 10 cards, Suggestion Chip); push Google-side identifiers and per-carrier rejection codes external (link, don't mirror). - rcs-launch-evidence-packet.md: cross-check evidence list against the verified KYC/compliance form fields; deduplicate what the dashboard form already captures vs the RCS-specific additions; carrier-side review criteria remain external. - rcs-fallback-patterns.md: confirm channel array `["rcs","sms"]` is the documented fallback shape (no `fallback_policy` field); enumerate only verified `message.<event>` sub-types (queued/routed/sent/delivered/ read/failed); remove guessed events `message.channel_selected` and `message.fallback_triggered`; flag force-fallback and per-carrier override knobs as unverified. - SKILL.md: tighten "Unverified claims" — remove the `fallback_policy` bullet (confirmed not exposed), soften the RCS-rollout-status bullet to point users at Activities + webhook events. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Reconciles references/sent-glossary.md against the verified Sent docs snapshot (references/_inputs/sent-docs-v3-2026-05-19.md): - Restructures alphabetically (Numerals, A-X) instead of by domain. - Adds the snapshot grounding HTML comment at the top. - Adds missing terms: API Key, Available Channels, Balance (CustomerBalance), Business Account (WABA), Channel Provider, Contact, Contact ID, Customer / Customer ID, Default Channel, Delivery Status, E.164 Format, Endpoint, FastEndpoints, Formatting, InstantiatedPhones, KYC, Marketing Message, Message Activity, Message Body, Pagination, Phone Number Validation, Pricing, RCS Agent, Region Code, Rich Card, Carousel Card, Suggestion Chip, Branded Sender, Sandbox, Sender ID, SMS, System User Access Token, Template Category, Template Status, Transaction, Unified Messaging Intelligence, Utility Message, UUID, Validation, Variable Substitution, Webhook, WhatsApp Business API, WhatsApp Template, Authentication Message. - Clarifies that v3 needs only x-api-key (x-sender-id is v2 legacy). - Clarifies that PAUSED is Meta-side only; Sent template statuses are PENDING / APPROVED / REJECTED. - Aligns the delivery-status enum to QUEUED -> ROUTED -> SENT -> DELIVERED -> READ, plus FAILED and RECEIVED. - Preserves existing accurate entries (Sender Profile, MDR, Conversation, TCR, Brand, Campaign, Vetting, Embedded Signup, FBL, System User, Tech Provider, Messaging Limit Tier, Quality Rating, Granular Scope, X-Hub-Signature-256, RBM, Launch, Fallback Policy, Capabilities, Cloud API, Phone Number ID, wamid, 10DLC, 24-hour window, Messaging Profile, Tenant template). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… snapshot
- sender-profile-data-model.md: rewrite around the verified Profile resource
({id, name, icon, description, short_name, role, status, created_at, settings})
and v3 single-key auth; add Profile -> Channels (SMS/WhatsApp/RCS) -> Webhooks
diagram; cross-link /v3/brands and /v3/brands/{id}/campaigns for 10DLC.
- multi-tenancy-patterns.md: add verified rate-limit tiers (standard 200/min
burst 50, sensitive 10/min burst 5, message Starter 60/Growth 300/Enterprise
custom), idempotency facts (per-customer scope, 24h TTL, ^[a-zA-Z0-9_-]{1,255}$),
and webhook event_filters shape {<parent>: [<sub_type>, ...]}.
- profile-boundary-examples.md: confirm x-sender-id is per-profile (dashboard
legacy) and the Owner/Admin/Billing/Developer role model; correct the
per-department example to reflect a single account-level x-api-key.
- SKILL.md: rewrite Unverified claims around v3 reality (account-level API key,
verified status enum incomplete|pending_review|approved|rejected, verified
webhook payload fields); update description, when-to-use, frontmatter
comment, and example data model accordingly.
- references/10dlc-evidence-checklist.md: rewrite around Sent's verified
compliance form fields (legal_business_name, business_registration_number,
business_type, industry_category, ein, business_address, business_phone,
contact_email; use-case selection from {Authentication, Notifications,
Marketing, Customer Service, High Volume}; opt-in URL; opt-out via
Compliance → Opt Keywords tab; US extras: live website + privacy policy).
Add country-specific extras table (AU, BE, PL, ZA, SE, TH, UK).
- references/10dlc-rejection-remediation.md: prepend Layer 0 with Sent
account-state error codes (AUTH_006/007/005, BUSINESS_003/005) so account
state is diagnosed before assuming TCR/carrier rejection. Soften TCR/
carrier rejection strings (they are external taxonomy).
- references/tcr-use-cases.md: add top section mapping Sent's 5-option
compliance-form selector to TCR's deeper taxonomy. Note that opt-out
keywords are managed on Sent in the Opt Keywords tab, not embedded in
each sample message. Mark TPS / vetting-score / carrier rejection codes
as external.
- SKILL.md: tighten "Unverified claims" — drop the tcr_brand_id/
tcr_campaign_id and per-sample-opt-out claims (the snapshot confirms
/v3/brands and /v3/brands/{id}/campaigns endpoints exist and that
opt-out is a separate form field). Keep throughput/carrier-cap and
country-specific compliance claims as external.
- scripts/validate_10dlc_packet.py + fixtures: rename fields to match the
verified compliance form, enforce use_cases[*].selection enum, validate
business_phone (E.164) + contact_email, require STOP in opt_keywords.stop
(separate from sample messages). Fixtures re-verified — good.json exits
0, bad.json exits 1 with 7 issues.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- template-validation-matrix.md: confirm component support matrix (SMS body only; RCS/WhatsApp full); confirm header types TEXT/IMAGE/VIDEO/DOCUMENT; confirm button types QUICK_REPLY/URL/PHONE_NUMBER; confirm categories UTILITY/MARKETING/AUTHENTICATION; correct WhatsApp body 1024→1028; add Sent-confirmed character-limit table; soften WhatsApp name+language immutability to product-governance language consistent with SKILL.md. - template-ui-wireflows.md: rename the four creation flows to the exact dashboard names (Create from Scratch, Import from Meta, Create From Definition, Create from Sample); add app.sent.dm/dashboard/templates surface and search/filter/per-row actions; remove PAUSED from the Flow 6 transition diagram; note the 24-48h WhatsApp review SLA. - template-status-handling.md: replace PAUSED-as-badge framing with the Sent-confirmed four-state enum (Draft/Pending/Approved/Rejected) and explicit "no PAUSED in Sent" callout; add the Pending-still-sends-SMS rule; reframe webhook discovery as <field>.<event> with GET /v3/webhooks/event-types for exact names; soften name/language/category lock to product-governance. - SKILL.md: drop the now-confirmed PAUSED and component-limit caveats; rewrite the immutability and webhook caveats with snapshot-accurate framing; align section 6 creation-path names with the dashboard. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- references/waba-template-categories.md: add grounding header, document Sent's three categories (UTILITY/MARKETING/AUTHENTICATION) and three statuses (APPROVED/PENDING/REJECTED, no PAUSED), and replace the Cloud-API submission shape with Sent's CreateTemplateRequest schema (body.content + body.variables, header.type enum, button.type enum, channels, sandbox). Drop LOCATION as a Sent header type. - references/waba-template-examples.md: rewrite every utility, marketing, and authentication example to the real Sent CreateTemplateRequest shape. - references/template-rejection-playbook.md: add grounding header, document BUSINESS_005 (send against PENDING/REJECTED template), and call out that Meta-side PAUSED is not reflected in Sent's template status; cross-ref sent-skills:messaging-performance-analyzer for post-approval diagnosis. - SKILL.md: tighten Unverified-claims (drop PAUSED + schema items now confirmed in the snapshot, keep external Meta policy caveat), strengthen the PAUSED rationalization, and fix the documented Sent status set. - scripts/lint_waba_template.py: add header-format and button-type enum validation aligned with Sent's CreateTemplateRequest; require url on URL buttons and phone_number on PHONE_NUMBER buttons; warn on Cloud-API-only OTP buttons. Existing good/bad fixtures still exit 0/1 respectively. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Update messaging-performance-analyzer references against references/_inputs/sent-docs-v3-2026-05-19.md so the skill keys diagnoses on real Sent error codes instead of generic buckets. - mdr-status-codes.md: rewrite around Sent's normalized error catalog (AUTH_*, VALIDATION_*, RESOURCE_*, BUSINESS_*, CONFLICT_001, SERVICE_001, INTERNAL_*), add the 3 send-time ERR_* codes that surface in the message description field, add the verified webhook payload envelope, confirm the QUEUED -> ROUTED -> SENT -> DELIVERED -> READ (+ FAILED, RECEIVED) lifecycle, and move provider-level codes to a clearly illustrative-only section. - performance-diagnosis-playbook.md: replace the generic decision tree with symptom -> Sent code mappings keyed on real codes (stuck QUEUED -> BUSINESS_002/003/008; sync batch failure -> AUTH_*/BUSINESS_*/VALIDATION_*; per-recipient FAILED -> ERR_CONSENT_BLOCKED/ROUTE_DENIED/TEMPLATE_PARAMS_INVALID; missing webhooks -> is_active/consecutive_failures/ last_successful_delivery_at). - SKILL.md: tighten the "Unverified claims" section, dropping the MDR-is-not-an-endpoint and provider-bucket disclaimers (snapshot now confirms both surface and normalized codes), and retain only the cohort-threshold heuristic and external provider IDs disclaimers. - analyze_mdr_funnel.py: add --show-errors flag that tallies ERR_* codes parsed from FAILED message descriptions. Existing behavior and exit codes unchanged; good.json still exits 0, bad.json still exits 3. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… docs snapshot
Align skill + references with confirmed Sent v3 behavior from
references/_inputs/sent-docs-v3-2026-05-19.md.
SKILL.md
- Replace stale "Unverified claims" with confirmed facts: no public
Embedded Signup endpoint (Channels page is dashboard-only); webhook
envelope is {field, sub_type, timestamp, payload} with sub-types
<field>.<event>; WhatsApp-specific sub-types still need discovery.
- Fix stale /v3/webhooks/{id}/events reference (not in snapshot);
substitute POST /v3/webhooks/{id}/test which is documented.
waba-embedded-signup-spec.md
- Drop ~245 lines of Meta-Graph mirroring (per CLAUDE.md "never mirror
Meta API docs"). Link to Meta's Embedded Signup / Cloud API / FBL
docs instead.
- Confirm Sent surface: no public Embedded Signup endpoint; dashboard
Channels → WhatsApp is the customer-facing surface; /v3/profiles/
{id}/complete is the documented completion endpoint (sensitive,
idempotent, 10/min burst 5); x-api-key is the v3 auth header.
- Document the confirmed webhook envelope and explain how to discover
WhatsApp sub-types empirically.
waba-onboarding-runbook.md
- Rewrite as the dashboard flow per the task spec: KYC + Meta Business
Portfolio pre-flight, Continue Channel Setup, phone selection (hard
to change later), Facebook/Meta login + WABA + permission grant,
Meta payment (separate from Sent billing), completion confirmation,
API credential retrieval from /dashboard/api-keys.
- Anchor failure modes to verified error codes (AUTH_005/006/007).
whatsapp-sender-profile-mapping.md
- Replace invented Profile schema with the real v3 schema (id, name,
icon, description, short_name, role, status, settings).
- Remove invented endpoints DELETE/PATCH /v3/profiles/{id}/channels/
whatsapp and channels.whatsapp.state field (not in snapshot).
- Confirm POST /v3/profiles/{id}/complete; note x-sender-id is
per-profile, dashboard-exposed, v2 legacy.
- Cross-link to sent-skills:sender-profile-architect.
All three reference files now carry the standard grounding header.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
groundtruth: tighten rcs-agent-onboarding against Sent docs snapshot
groundtruth: align sent-glossary with Sent docs snapshot
groundtruth: tighten sender-profile-architect against Sent docs snapshot
groundtruth: tighten sms-10dlc-registration against Sent docs snapshot
groundtruth: tighten template-builder-ui against Sent docs snapshot
groundtruth: tighten waba-template-author against Sent docs snapshot
groundtruth: tighten messaging-performance-analyzer against Sent docs snapshot
groundtruth: tighten waba-embedded-signup against Sent docs snapshot
CI link check failed on placeholder URLs inside sample SMS message
content (acme.example/security, acme.example/t/1234,
example.com/track/1029). RFC 2606 reserves .example, .test, .invalid,
.localhost TLDs and example.{com,net,org} subdomains as guaranteed-
unresolvable for documentation use. Add them to ignorePatterns so
sample message bodies don't break CI.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
sent-skillsv0.2.0 → v0.3.0. 38 commits, 66 files, +6,868/−1,474. Restructures the plugin from "skills with top-level references" to "self-contained per-skill bundles," adds three executable validators, hardens the validator, adds an evals suite, promotes/sentto a real meta-dispatcher skill, and grounds every reference doc against a captured Sent v3 docs snapshot.Executed via two
/batchrounds totalling 21 parallel-worker PRs (13 build + 8 ground-truth alignment). Seeplan.mdfor the full restructure roadmap.What changed
Per-skill bundling (WS1)
references/into per-skillskills/<name>/references/so each skill is portable as a standalone zip.references/sent-glossary.mdkept as the only cross-cutting reference; cross-linked from every skill's "Related skills" section.Three executable scripts (WS2)
skills/waba-template-author/scripts/lint_waba_template.py— validates WhatsApp template JSON before Meta submission (placeholder numbering, category/promo-phrase checks, header/button enum validation aligned with Sent'sCreateTemplateRequestschema).skills/sms-10dlc-registration/scripts/validate_10dlc_packet.py— pre-flight 10DLC packet validator aligned with Sent's compliance form.skills/messaging-performance-analyzer/scripts/analyze_mdr_funnel.py— computes MDR funnel drop-off per stage (QUEUED → ROUTED → SENT → DELIVERED → READ),--show-errorsflag tallies Sent'sERR_*send-time codes._good/_badJSON fixtures.scripts/README.mddocuments the script convention.Validator hardening + evals + CI (WS3)
scripts/validate-skills.shgains 5 conservative checks: third-person description (no first/second-person verbs), no XML tags in description, no Windows path separators, vague-verb warning, extended reserved names (meta,google).evals/<skill>.yamlfor all 8 skills with 4–6 trigger cases each (should_trigger/should_not_trigger/ambiguous);scripts/run-evals.shis a manual eval runner..github/workflows/validate-skills.ymlgains amarkdown-link-checkstep.Discoverability + meta-dispatcher (WS4)
skills/sent/SKILL.mdmeta-dispatcher routes generic Sent questions to the right vertical skill./sentslash command reduced to a thin shim.README.mdandCLAUDE.md.CLAUDE.mddocuments the per-skill reference path convention (paths in SKILL.md are relative to the SKILL.md file).CONTRIBUTING.mdadds gerund-form naming guidance for new skills, eval requirement, per-skillreferences/rule.docs/skill-anatomy.mdadds per-skill bundling and eval cases sections.template-builder-uito prevent over-triggering on generic templating engines (Jinja, Handlebars, email templates)..claude-plugin/plugin.jsonversion bumped to0.3.0.Ground-truth alignment (second
/batchround)references/_inputs/sent-docs-v3-2026-05-19.md(canonical input for skill content).<!-- Grounded against ... -->provenance comment.mdr-status-codes.md: AUTH_, VALIDATION_, RESOURCE_, BUSINESS_ (esp. 002 rate limit, 003 balance, 004 all-opt-out, 005 template not approved, 007 channel unavailable), CONFLICT_001, SERVICE_001, INTERNAL_*, plus the 3 send-time codes (ERR_CONSENT_BLOCKED, ERR_ROUTE_DENIED, ERR_TEMPLATE_PARAMS_INVALID).sender-profile-data-model.md(status enum, role enum, settings shape).template-validation-matrix.md(WhatsApp body 1028, header 60, footer 60; SMS 160/segment) — caught a 1024→1028 typo.CreateTemplateRequestschema inwaba-template-examples.md.Test plan
bash scripts/validate-skills.shexits 0 (8 skills validated, including newsentmeta-skill).good.json→ exit 0,bad.json→ exit non-zero with descriptive stderr./plugin marketplace add+/plugin install sent-skills@sent-skillsagainst this branch. Confirm/plugin listshowssent-skills v0.3.0.bash scripts/run-evals.shand spot-check a fewshould_trigger/should_not_triggerqueries in a fresh Claude session with the plugin installed.cd skills && zip -r waba-template-author.zip waba-template-author/produces a self-contained bundle (only cross-link to top-levelsent-glossary.mdis acceptably absent).Open follow-ups (intentionally deferred, not blocking v0.3.0)
🤖 Generated with Claude Code