Skip to content

Release v0.3.0: per-skill bundling, ground-truth refs, executable scripts, evals#22

Merged
betimd merged 39 commits into
mainfrom
dev
May 19, 2026
Merged

Release v0.3.0: per-skill bundling, ground-truth refs, executable scripts, evals#22
betimd merged 39 commits into
mainfrom
dev

Conversation

@sent-dm
Copy link
Copy Markdown
Contributor

@sent-dm sent-dm commented May 19, 2026

Summary

sent-skills v0.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 /sent to a real meta-dispatcher skill, and grounds every reference doc against a captured Sent v3 docs snapshot.

Executed via two /batch rounds totalling 21 parallel-worker PRs (13 build + 8 ground-truth alignment). See plan.md for the full restructure roadmap.

What changed

Per-skill bundling (WS1)

  • 6 single-skill references moved from top-level references/ into per-skill skills/<name>/references/ so each skill is portable as a standalone zip.
  • 14 new reference files created (the ones each SKILL.md promised under "Suggested bundled references" but didn't ship).
  • Top-level references/sent-glossary.md kept 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's CreateTemplateRequest schema).
  • 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-errors flag tallies Sent's ERR_* send-time codes.
  • All Python 3.11+, stdlib-only, with _good/_bad JSON fixtures.
  • scripts/README.md documents the script convention.

Validator hardening + evals + CI (WS3)

  • scripts/validate-skills.sh gains 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>.yaml for all 8 skills with 4–6 trigger cases each (should_trigger / should_not_trigger / ambiguous); scripts/run-evals.sh is a manual eval runner.
  • .github/workflows/validate-skills.yml gains a markdown-link-check step.

Discoverability + meta-dispatcher (WS4)

  • New skills/sent/SKILL.md meta-dispatcher routes generic Sent questions to the right vertical skill. /sent slash command reduced to a thin shim.
  • Command↔skill mapping table added to README.md and CLAUDE.md.
  • CLAUDE.md documents the per-skill reference path convention (paths in SKILL.md are relative to the SKILL.md file).
  • CONTRIBUTING.md adds gerund-form naming guidance for new skills, eval requirement, per-skill references/ rule.
  • docs/skill-anatomy.md adds per-skill bundling and eval cases sections.
  • Negative trigger added to template-builder-ui to prevent over-triggering on generic templating engines (Jinja, Handlebars, email templates).
  • .claude-plugin/plugin.json version bumped to 0.3.0.

Ground-truth alignment (second /batch round)

  • Captured docs.sent.dm + v3 OpenAPI URL as references/_inputs/sent-docs-v3-2026-05-19.md (canonical input for skill content).
  • Every reference file now starts with a <!-- Grounded against ... --> provenance comment.
  • Removed hedged language that the snapshot disproves; tightened language that the snapshot confirms.
  • Real Sent error catalog added to 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).
  • Real Profile schema in sender-profile-data-model.md (status enum, role enum, settings shape).
  • Confirmed character limits in template-validation-matrix.md (WhatsApp body 1028, header 60, footer 60; SMS 160/segment) — caught a 1024→1028 typo.
  • Confirmed Sent template status set is APPROVED/PENDING/REJECTED — no PAUSED (Meta-side only).
  • Real CreateTemplateRequest schema in waba-template-examples.md.
  • Glossary aligned with Sent's official terminology (44 new entries, 3 conflicts reconciled).

Test plan

  • bash scripts/validate-skills.sh exits 0 (8 skills validated, including new sent meta-skill).
  • All 3 shipped scripts smoke-test green: good.json → exit 0, bad.json → exit non-zero with descriptive stderr.
  • Reviewer: install plugin in a fresh Claude Code session via /plugin marketplace add + /plugin install sent-skills@sent-skills against this branch. Confirm /plugin list shows sent-skills v0.3.0.
  • Reviewer: run bash scripts/run-evals.sh and spot-check a few should_trigger / should_not_trigger queries in a fresh Claude session with the plugin installed.
  • Reviewer: zip-test portability — cd skills && zip -r waba-template-author.zip waba-template-author/ produces a self-contained bundle (only cross-link to top-level sent-glossary.md is acceptably absent).
  • Reviewer: CI markdown link check runs green on this PR.

Open follow-ups (intentionally deferred, not blocking v0.3.0)

  • 11 of the 14 originally suggested scripts (only 3 shipped this release; rest tracked in SKILL.md bundled-resources tables under "Suggested" status).
  • Automated eval execution against the API (manual runner only in v0.3; automated harness in v0.4).
  • Glossary cross-link wording is inconsistent across skills (3 phrasings in the wild) — normalize in a follow-up.
  • Skill renames to gerund form — deferred indefinitely; new skills should follow the convention.

🤖 Generated with Claude Code

sent-dm and others added 30 commits May 19, 2026 09:56
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-11: add markdown link check to CI
unit-12: promote /sent to a meta-dispatcher skill
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>
sent-dm and others added 9 commits May 19, 2026 10:41
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>
Copy link
Copy Markdown
Contributor

@betimd betimd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approve

@betimd betimd merged commit 5fd4991 into main May 19, 2026
2 checks passed
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