Commit Graph

178 Commits

Author SHA1 Message Date
Gaurav Bajpai
db1aca7221
fix: address PRizm review findings from internal port PR @W-22196528@
Addresses 4 critical findings surfaced during PRizm code review of the
internal plugin port of this skill (internal PR #19). Applying the same
fixes here keeps the external canonical source and the internal port in
sync.

1. Test cleanup discipline: switch `test_invalid_json_raises` from
   `try/finally` to `self.addCleanup(p.unlink, missing_ok=True)` — the
   unittest-idiomatic way to guarantee temp-file cleanup regardless of
   how the test exits.

2. `floor()` description in bdt-function-catalog.md: the old row was
   self-contradictory ("toward zero" AND "toward next integer up" in
   the same cell). Replace with a single coherent definition: rounds
   toward negative infinity; for negatives rounds away from zero
   (e.g., `floor(-2.3) = -3`).

3. Split-node documentation in bdt-node-catalog.md: the old doc claimed
   `split` routes rows into downstream branches via `branches[]` with
   per-branch predicates. That is not the canonical schema. Per
   `SplitParametersInputRepresentation` in core-262-public, `split` is
   a string-splitting operation: one `sourceField` + `delimiter` →
   N `targetFields` (one row in, one row out; columns added). Rewrote
   the section with the correct parameters, lineage effect, gotchas,
   and a canonical example. Row-routing belongs in `filter` nodes.

4. Sample `assets/sample_bdts/append_and_split.json`: the old sample
   used the invented `branches[]` shape AND routed the same split into
   two downstream outputs that each expected different rows — which is
   not how `split` works. Rewrote the sample so:
     - `appendV2` unions two order sources (unchanged intent).
     - `split` uses canonical `{sourceField, delimiter, targetFields}`
       splitting `CustomerFullName__c` into first + last name columns.
     - One downstream output consumes the new columns (removes the
       fake two-branch fan-out).

Tests: 92/92 passing. Sample parses and runs through `bdt_analyze.py
summary` cleanly (5 nodes: 2 load + 1 appendV2 + 1 split + 1 outputD360).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 10:19:36 +05:30
Gaurav Bajpai
fc4d14bce0
test(bdt): unit tests + adversarial fixtures @W-22196528@
Adds the full test suite for bdt_analyze.py: 92 unit tests backed by
9 JSON fixtures (4 normative + 5 adversarial). All tests stdlib-only,
runnable via `python3 -m unittest tests.test_bdt_analyze`.

tests/test_bdt_analyze.py coverage:

DAG primitives:
- roots() / sinks() / topo_order() on minimal + branching graphs.
- upstream() / downstream() reachability correctness.
- Cycle tolerance: topo_order + traversals do not infinite-loop or
  raise when the graph contains a cycle; cycle is reported via
  broken_references-adjacent signals.
- Broken-reference tolerance: nodes referencing non-existent upstreams
  are handled gracefully; broken_references() enumerates them.

CLI subcommands (happy-path + error-path for each):
- summary, sources, outputs, stages, nodes, node, lineage,
  field-trace, formula, definitions — each exercised in both
  human-readable and --json modes.
- Exit-code discipline: unknown node -> exit 2, malformed input ->
  exit 3, success -> exit 0.
- Unknown-action graceful degradation: nodes whose action isn't in
  the catalog still appear in summary/nodes output with a generic
  label rather than crashing.
- Output size budgets: default-mode outputs are asserted to stay
  within configured character caps.

Field discovery:
- fields_produced() / fields_consumed() / _scrape_field_refs()
  heuristics tested against both clean and noisy formula bodies.
- TestFieldTraceFocus — narrowing tests preventing false-positive
  substring hits in formula text.

Dual-shape input:
- TestInputShapeDetection — editor export vs. Connect API
  single-definition auto-detection.
- TestMultiDefinition — Connect API multi-definition payload:
  definitions subcommand, --definition N routing, out-of-range
  index error handling.

Fixtures (tests/fixtures/):
- minimal.json               — smallest valid editor-export BDT.
- window_and_aggregate.json  — window + aggregate composition.
- api_input_single.json      — Connect API single-definition payload.
- api_input_multi.json       — Connect API multi-definition payload.

Adversarial fixtures (tests/fixtures/adversarial/):
- cycle.json           — graph with a cycle; parser must not hang.
- broken_ref.json      — node referencing a non-existent upstream.
- unknown_action.json  — node with an action not in the catalog.
- no_ui.json           — BDT missing the UI layer entirely.
- empty_nodes.json     — valid envelope but zero nodes.

Suite status: Ran 92 tests, OK.

@W-22196528@
2026-04-23 23:29:05 +05:30
Gaurav Bajpai
9c47f28221
feat(bdt): reference docs + sample BDTs @W-22196528@
Adds the curated reference library the skill loads on demand, plus
four synthetic sample BDTs used by docs, tests, and LLM-mode demos.

references/ (4 curated Markdown files):
- bdt-reference.md        — top-level BDT JSON anatomy: envelope,
                            nodes, edges, UI layer, definitions,
                            businessType semantics. Cites the core-262
                            upstream JSON schema and Connect API spec.
- bdt-node-catalog.md     — every node type (DMO Source, DMO Sink,
                            Filter, Join, Union, Aggregate, Window,
                            Formula, Split, Append, etc.) with its
                            required/optional fields and typical
                            usage. Audited against core-262 enums.
- bdt-function-catalog.md — the expression-language function surface
                            (string, numeric, date, conditional,
                            aggregate). Grouped by category with
                            signature + one-line semantics.
- bdt-window-functions.md — windowing operators (ROW_NUMBER, RANK,
                            LEAD/LAG, running aggregates) with PARTITION
                            BY / ORDER BY grammar and gotchas.

assets/sample_bdts/ (4 synthetic, dependency-free BDTs):
- minimal_dmo_to_dmo.json   — smallest valid BDT (1 source, 1 sink).
- joins_and_filters.json    — join + filter composition.
- window_and_aggregate.json — window function + aggregate in one graph.
- append_and_split.json     — append-then-split branching topology.

Grounding rules enforced in this commit:
- Every claim in references/ cites an upstream source (core-262 JSON
  schema, Connect API reference, or the Data Cloud BDT editor spec).
  No speculative content.
- No raw DITA or internal-only documentation is shipped; references
  are synthesized from public-facing material.
- BusinessTypeEnum values use the canonical camelCase casing from
  core-262 (case-cleanup fix included here).
- Sample BDTs are original synthetic fixtures, not redacted customer
  data. Each is small enough to read end-to-end.

@W-22196528@
2026-04-23 23:29:05 +05:30
Gaurav Bajpai
9f1603ed2f
feat(bdt): Python parser core + CLI subcommands @W-22196528@
Adds scripts/bdt_analyze.py — a generic, stdlib-only DAG parser and
query CLI for Salesforce Data Cloud BDT JSON. 1,379 lines.

Parser primitives:
- DataTransform.from_path / from_dict — accepts three input shapes:
  editor export ({version, nodes, ui, ...}), Connect API
  single-definition ({name, label, type, definition: {...}}), and
  Connect API multi-definition ({name, definitions: [{name, label,
  type, definition}, ...]}).
- Node dataclass with ui_label / ui_description fallback resolution.
- roots() / sinks() / topo_order() — Kahn's algorithm with
  deterministic tie-break for reproducible output.
- upstream() / downstream() traversal resilient to broken refs and
  cycles (does not infinite-loop on self-edges or cycles).
- broken_references(), fields_produced(), fields_consumed(),
  _scrape_field_refs() heuristics for field-trace discovery.

CLI (argparse, 10 subcommands, each supports --json for machine
output):
- summary      — node counts, source/sink counts, stage totals.
- sources      — list source nodes (no upstream).
- outputs      — list sink nodes (no downstream).
- stages       — topologically ordered stages.
- nodes        — flat node listing with labels.
- node <name>  — per-node detail (action, inputs, outputs, fields,
                 UI label/description).
- lineage <node>       — upstream + downstream chain from a node.
- field-trace <field>  — which nodes produce/consume a given field.
- formula <node>       — extract formulas/expressions from a node.
- definitions          — lists definitions in multi-definition
                         payloads; every other subcommand accepts
                         --definition N (default 0) to route into a
                         specific definition within the payload.

Error contract:
- Exit 0 on success, 2 on unknown node/field, 3 on malformed input.
- BdtInputError (exit 3) and BdtNotFoundError (exit 2) classes
  centralize error handling so the CLI shell stays thin.
- Field-trace narrowing refinements prevent false positives from
  substring matches in formula bodies.
- Upstream/downstream walkers harden against broken refs discovered
  during internal-BDT audit.

Design invariants:
- Python owns truth (parsing, DAG math, field discovery). LLM owns
  narrative (explaining what the structure means to a user).
- No external dependencies — stdlib only: argparse, json, pathlib,
  re, sys, collections, dataclasses, typing.
- Output size budgets: every subcommand caps its default-mode output
  so summaries fit in a single LLM context window; --json dumps
  everything for agents that need raw data.

@W-22196528@
2026-04-23 23:29:05 +05:30
Gaurav Bajpai
9be9667779
feat(bdt): scaffold skill directory + SKILL.md body @W-22196528@
Scaffolds the explaining-batch-data-transform skill directory and delivers
the full, production-grade SKILL.md body. 194 lines.

Directory layout established (skills/explaining-batch-data-transform/):
- SKILL.md                 — the entry point this commit adds
- scripts/                 — parser lands in commit 2
- references/, assets/     — reference docs + samples land in commit 3
- tests/                   — unit tests + fixtures land in commit 4

SKILL.md frontmatter:
- name, description, tier, and owner fields matching the library's CI
  validator schema.
- Description covers the full production surface: "Explain, audit, and
  trace Salesforce Data Cloud Batch Data Transform (BDT) JSON — sources,
  sinks, stages, lineage, field traces, formulas, multi-definition
  payloads, and dual input shapes (editor export + Connect API)."

SKILL.md body (12 sections):
1. When to use this skill
2. Inputs you accept (editor export, Connect API single-definition,
   Connect API multi-definition payloads)
3. Mode A — structural survey (summary / sources / outputs / stages)
4. Mode B — per-node explanation (nodes / node)
5. Mode C — lineage + field trace
6. Mode D — formulas and windows
7. Question routing table (user phrasing -> CLI subcommand)
8. Multi-definition payload handling (--definition flag semantics)
9. Troubleshooting (malformed JSON, unknown node refs, broken upstream)
10. Non-goals as explicit "Do not" directives (no execution, no schema
    inference beyond what the JSON states, no speculation about runtime)
11. References + sample BDTs index
12. Exit-code + error-class contract surfaced from bdt_analyze.py

Structure passes the repo's skill-validator (npm run validate:skills):
single top-level H1, required sections present, frontmatter schema
aligned, no broken internal links.

@W-22196528@
2026-04-23 23:29:04 +05:30
Shelby Hubick
2d508c8ac0
@W-21965936@ Add applying and validating SLDS skills to afv-library (#187)
* feat: add SLDS applying and auditing quality skills

Two new skills for SLDS v2 compliance:
- applying-slds: guides artifact selection, styling hooks, utilities, icons
- auditing-slds-quality: scored quality audit with linter + static analysis

Made-with: Cursor

* refactor: rename auditing-slds-quality skill to validating-slds

Renames the skill directory and updates all references in
applying-slds/SKILL.md and applying-slds/checklists.md.

Made-with: Cursor

* fix: improve accuracy and add manual review gate across SLDS skills

Correct hook families, badge modifiers, and severity levels; add a
manual review gate to validating-slds so automated grades alone cannot
declare production readiness; make analyze-quality.cjs portable with
explicit --hooks-index flag; remove dead parseYaml code; add version
field to all three skill frontmatters.

Made-with: Cursor

* chore: retrigger CI

Made-with: Cursor

* fix: quote YAML descriptions and improve color hook disambiguation

- Quote description frontmatter in all three skills for valid YAML
  (inner double quotes now escaped)
- Strengthen Step 4 directive: MUST read color-hooks guide before
  choosing a hook — linter suggestions are unranked
- Add surface vs surface-container disambiguation table
- Add accent hook context table and state progression
- Add standalone-component exception for surface classification
- Add modal background example to examples.md
- Remove redundant brand-button example (covered by new context table)

Made-with: Cursor
2026-04-21 14:43:15 +05:30
Scott Mo
73db45cabf
refactor: mv skill to dev branch (#182)
* refactor: mv skill to separate branch

* feat: add fallbacks to sf site create commands (from fiona)

* fix: target config instrx (from karthik)
2026-04-21 14:43:15 +05:30
thrylokya
f56b68d72c
@fix @W-21829074 - Updated skill instructions to wait for the user input (#177)
Some checks failed
Sync React samples from npm / sync (push) Has been cancelled
* Update SKILL description

* Update SKILL.md

* Update SKILL.md

* Update SKILL.md

* Update SKILL.md

---------

Co-authored-by: Hemant Singh Bisht <hsinghbisht@salesforce.com>
2026-04-21 14:17:29 +05:30
svc-idee-bot
415c721a6e chore(release): 1.7.1 [skip ci] 2026-04-21 06:27:28 +00:00
sf-pragya-kumari
e089a8688a
fix: @W-21915952@ Update SKILL.md to allow user to make changes in the generated flow (#189)
Update SKILL.md to allow user to make changes in created flow to fix issues
2026-04-21 11:57:05 +05:30
kevinv11n-sf
6537cf1a1e
Update README (#197)
* Update README

* Incorporate feedback
2026-04-14 21:33:13 +05:30
svc-idee-bot
7b5c4b1a76 chore(release): 1.7.0 [skip ci] 2026-04-09 11:35:15 +00:00
Steve Hetzel
fb4bac9cf0
feat: replace agentforce-development skill with three specialized skills @W-21937872@ (#184)
feat: replace agentforce-development skill with three specialized skills

Replace the monolithic agentforce-development skill with three focused skills:
- developing-agentforce: For creating and authoring Agentforce agents
- observing-agentforce: For monitoring and debugging agents
- testing-agentforce: For validating agent behavior

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-04-09 17:04:48 +05:30
svc-idee-bot
baad7033bc chore(release): 1.6.9 [skip ci] 2026-04-08 18:55:53 +00:00
Joe
b0d71df452
fix: @W-21889983@ Disallow Modifying React Site Metadata Except for Templated Properties (#185)
fix: remove extra property changes

Co-authored-by: Hemant Singh Bisht <hsinghbisht@salesforce.com>
2026-04-09 00:25:10 +05:30
k-j-kim
574d8dcca2
chore: sync React B2E & B2X (1.120.6) with uiBundle lockfiles and gitignore @W-21940169@ (#179)
chore: sync React B2E (1.120.6) & B2X (1.120.6) samples with lockfiles and gitignore

Add package-lock.json generation for uiBundle directories and .gitignore
writing to the sync scripts so they persist across syncs.

Co-authored-by: gbockus-sf <76090802+gbockus-sf@users.noreply.github.com>
2026-04-08 12:00:47 -05:00
Mohan Raj Rajamanickam
eaf5acdb7f
ci: fail PR if title does not match Conventional Commits format @W-21613569@ [post-tdx] (#146)
add pr title check

Co-authored-by: Hemant Singh Bisht <hsinghbisht@salesforce.com>
2026-04-08 17:08:20 +05:30
svc-idee-bot
c9f4df6069 chore(release): 1.6.8 [skip ci] 2026-04-07 04:05:03 +00:00
k-j-kim
1806c89b28
fix: trigger ui-bundle skill for React app prompts @W-21916680@ (#175)
* fix: trigger ui-bundle skill for React application prompts

Add React-specific trigger language to building-ui-bundle-app description
so prompts like "I want to build a react application" activate the
ui-bundle orchestrator even without existing project files.

* fix: correct stale related-skill reference

Rename generating-experience-react-site to generating-ui-bundle-site
in building-ui-bundle-app related-skills to match the actual skill name.
2026-04-07 09:34:42 +05:30
Scott Mo
ae5008de56
refactor: do not expose lwr skill to main (#174) 2026-04-06 22:02:25 +05:30
svc-idee-bot
31d4fa8b43
chore: sync React B2E (1.120.3) & B2X (1.120.3) samples from npm (#172) 2026-04-06 10:55:44 -05:00
svc-idee-bot
dbd471aa45 chore(release): 1.6.7 [skip ci] 2026-04-03 03:52:50 +00:00
k-j-kim
77108bae20
fix: tighten ui-bundle skill descriptions to reduce false triggers @W-21800526@ (#162)
* fix: tighten skill descriptions to reduce false triggers

- generating-ui-bundle-metadata: remove generic triggers (metadata, new app,
  meta XML, configuration), update command to sf template generate ui-bundle,
  add --template reactbasic flag
- building-ui-bundle-app: reframe as orchestrator for multi-skill ui-bundle
  work, distinguish from generating-lightning-app

* fix: improve ui-bundle skill descriptions to reduce false triggers and improve activation

- Add MUST activate + file-pattern triggers to all 9 ui-bundle skills
- Remove overly specific examples that waste context tokens
- Scope features skill to authentication and search only
- Add boundary language between orchestrator and frontend skills
- Update metadata skill to use sf template generate ui-bundle --template reactbasic

* fix: standardize uiBundles/*/src/ directory trigger across all ui-bundle skills

* fix: remove React references from skill descriptions for framework agnosticism

* fix: standardize uiBundles/*/src/ trigger in agentforce and data skills

* fix: add 'Use this skill when' trigger context to all ui-bundle skill descriptions

* fix: require mobile-responsive UI in building-ui-bundle-frontend skill
2026-04-03 09:22:32 +05:30
svc-idee-bot
4987f86c05 chore(release): 1.6.6 [skip ci] 2026-04-02 17:12:14 +00:00
Jose David Rodriguez Velasco
4ad796346e
fix: condense using-ui-bundle-salesforce-data reference into skill.md @W-21685788 (#161)
* fix(using-ui-bundle-salesforce-data): condense reference into skill

also adds, operation types, script section type and mix instructions as comments in the examples. it also adds a section to avoid the llm being eager to show progress on ui-scaffold

* fix: workaround llm being eager to scaffold ui

* fix: delete testing with sf cli

* fix: add summary table for workflow steps

---------

Co-authored-by: Hemant Singh Bisht <hsinghbisht@salesforce.com>
2026-04-02 22:41:51 +05:30
Justin Horst
7d10760653
chore: Update native mobile app readme with detailed deployment steps (#169) W-21861732:
@W-21861732 fix: convert native mobile rental tenant app README from RTF to Markdown

The README was accidentally saved in RTF format, causing rendering
issues. Stripped RTF formatting and restored plain Markdown.

Co-authored-by: gbockus-sf <76090802+gbockus-sf@users.noreply.github.com>
2026-04-02 10:32:58 -05:00
thrylokya
0a32bc1a53
@fix: @W-21869136 - updated skill description (#168)
* Update SKILL description

* Update SKILL.md

* Update SKILL.md
2026-04-02 19:53:14 +05:30
anuj-sanghavi
d25b24ab86
@W-21866267 fix: ACC skills file updated (#159)
* fix: ACC skills file updated

* hard constraint added for not creating custom agent

* skill description updated
2026-04-02 16:20:54 +05:30
lei-dai-sfdc
7d9fc28b4e
@W-21817314@ Improved lwr and ui bundle site's skill to identify what properties should be updated for when user request for site URL update (#157)
* @W-21817314@ Improved lwr and ui bundle site's skill to identify what properties should be updated for when user request for site URL update

Signed-off-by: Daily Dai <lei.dai@salesforce.com>

* fix skill name

Signed-off-by: Daily Dai <lei.dai@salesforce.com>

* fix skill name

Signed-off-by: Daily Dai <lei.dai@salesforce.com>

* move url update into its own doc md file

Signed-off-by: Daily Dai <lei.dai@salesforce.com>

* clarify search_files is an agent tool instead of command line

Signed-off-by: Daily Dai <lei.dai@salesforce.com>

---------

Signed-off-by: Daily Dai <lei.dai@salesforce.com>
2026-04-02 08:58:57 +05:30
jluftglidden-tilt
8dc6e7d04d
@W-21818163 T/experience sites platform/w 21818163/leave app space blank if web app does not exist (#167)
* Update content.json generation to leave appSpace empty if webapp doesn't exist

* Replace WebApplication with UIBundle
2026-04-02 08:30:01 +05:30
svc-idee-bot
813fe2343a
chore: sync React B2E (1.120.2) & B2X (1.120.2) samples from npm (#165) 2026-04-01 16:51:52 -05:00
svc-idee-bot
483127c4ef
chore: sync React B2E (1.119.5) & B2X (1.119.5) samples from npm (#158)
Co-authored-by: gbockus-sf <76090802+gbockus-sf@users.noreply.github.com>
2026-04-01 00:53:42 -05:00
svc-idee-bot
74ac983776 chore(release): 1.6.5 [skip ci] 2026-04-01 03:34:56 +00:00
jluftglidden-tilt
ea110c0e4a
@W-21712998 T/experience sites platform/w 21712998/rename sites react skill (#142)
* Moving SKILL.md to generating-ui-bundle-site

* Rename configure-metadata-custom-site.md to configure-metadata-custom-site.md

* Rename configure-metadata-digital-experience-bundle.md to configure-metadata-digital-experience-bundle.md

* Moving configure-metadata-digital-experience-config.md to generating-ui-bundle-site

* Moving configure-metadata-digital-experience.md to generating-ui-bundle-site

* Moving configure-metadata-network.md to generating-ui-bundle-site
2026-04-01 09:04:39 +05:30
k-j-kim
0d69b918da
fix: updating ui bundles to the latest @W-21814993@ (#156)
* fix: updating ui bundles to the latest

* fix: updating image url
2026-04-01 08:58:14 +05:30
svc-idee-bot
de191fe8b7 chore(release): 1.6.4 [skip ci] 2026-03-31 22:59:16 +00:00
k-j-kim
2d9a093f9c
fix: replace deprecated sf ui-bundle generate CLI command @W-21338965@ (#155)
fix: replace deprecated sf ui-bundle generate with sf template generate ui-bundle
2026-03-31 17:58:54 -05:00
svc-idee-bot
82ab956dcd chore(release): 1.6.3 [skip ci] 2026-03-31 18:48:38 +00:00
k-j-kim
30245915c2
fix: derive router basename from base href at runtime @W-21338965@ (#154)
fix: derive router basename from <base href> at runtime

Add guidance to building-ui-bundle-frontend skill to always derive
the client-side router basename from the document's <base href> tag
instead of hardcoding it.
2026-03-31 13:48:10 -05:00
svc-idee-bot
edbd8bfd70 chore(release): 1.6.2 [skip ci] 2026-03-31 16:59:50 +00:00
Sheng-Lun Chen
878ee497c4
fix: ensure skill load for guest sharing rule (#127)
fix(generating-experience-lwr-site): ensure skill load for guest sharing rule

Made-with: Cursor

Co-authored-by: Hemant Singh Bisht <hsinghbisht@salesforce.com>
2026-03-31 22:29:31 +05:30
svc-idee-bot
09a26be9d0 chore(release): 1.6.1 [skip ci] 2026-03-31 16:57:39 +00:00
fcwong
902c8d4539
@W-21749060 fix: update first time site creation instructions (#117)
* @W-21749060 fix: update first time site creation instructions

* address comments

---------

Co-authored-by: Hemant Singh Bisht <hsinghbisht@salesforce.com>
2026-03-31 22:24:35 +05:30
irisli0
a07f23abbd
W-21660521 feat: Agentforce Vibes - Unable to assign agent access in permission set (#145)
generating-permission-set agent access
2026-03-31 22:21:02 +05:30
svc-idee-bot
f93a0d1137 chore(release): 1.6.0 [skip ci] 2026-03-31 16:48:23 +00:00
Jeff Carey
30052ef628
feat: update theme layout creation instructions (#122)
* feat: update theme layout creation instructions

* fix: revert UI component section

* feat: specify order of operations for theme layout creation

---------

Co-authored-by: Hemant Singh Bisht <hsinghbisht@salesforce.com>
2026-03-31 22:18:03 +05:30
svc-idee-bot
4a1cf7a6e6 chore(release): 1.5.3 [skip ci] 2026-03-31 16:43:44 +00:00
gbockus-sf
dcc18049aa
fix: update details for PR title (#153)
fix: update details for PR title
2026-03-31 11:38:41 -05:00
Kenam
e850eb1a25
W-21831072: Add skill: uplifting-components-to-slds2 (#152)
Add skill: uplifting components to slds2

Made-with: Cursor
2026-03-31 21:03:28 +05:30
kevinv11n-sf
ce365224ac
Remove rules (#125) 2026-03-31 18:02:29 +05:30