tadforce 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +20 -0
- package/.claude-plugin/plugin.json +13 -0
- package/LICENSE +202 -0
- package/NOTICE +11 -0
- package/README.fr.md +125 -0
- package/README.md +256 -2
- package/assets/logo-mark.svg +24 -0
- package/assets/logo.svg +31 -0
- package/bin/tadforce.js +4 -0
- package/commands/tadforce-review.md +8 -0
- package/commands/tadforce-update.md +6 -0
- package/commands/tadforce.md +10 -0
- package/package.json +60 -4
- package/skills/tadforce/SKILL.md +73 -0
- package/skills/tadforce/references/axes-rules.md +29 -0
- package/skills/tadforce/references/evidence-rules.md +40 -0
- package/skills/tadforce/references/exclusion-heuristics.md +40 -0
- package/skills/tadforce/references/figure-rules.md +42 -0
- package/skills/tadforce/references/markdown-conventions.md +67 -0
- package/skills/tadforce/references/modules/agentforce-ai.md +24 -0
- package/skills/tadforce/references/modules/analytics.md +19 -0
- package/skills/tadforce/references/modules/commerce.md +25 -0
- package/skills/tadforce/references/modules/data-cloud.md +23 -0
- package/skills/tadforce/references/modules/experience-cloud.md +24 -0
- package/skills/tadforce/references/modules/field-service.md +25 -0
- package/skills/tadforce/references/modules/industries.md +21 -0
- package/skills/tadforce/references/modules/integration-platforms.md +19 -0
- package/skills/tadforce/references/modules/marketing.md +24 -0
- package/skills/tadforce/references/modules/omnistudio.md +24 -0
- package/skills/tadforce/references/modules/platform-events.md +19 -0
- package/skills/tadforce/references/modules/revenue-cpq.md +25 -0
- package/skills/tadforce/references/modules/sales-cloud.md +26 -0
- package/skills/tadforce/references/modules/security-shield.md +18 -0
- package/skills/tadforce/references/modules/service-cloud.md +27 -0
- package/skills/tadforce/references/naming-external-systems.md +32 -0
- package/skills/tadforce/references/questions.md +59 -0
- package/skills/tadforce/references/salesforce-skills.md +27 -0
- package/skills/tadforce/references/workflow.md +85 -0
- package/skills/tadforce/references/writing-rules.md +47 -0
- package/skills/tadforce-review/SKILL.md +53 -0
- package/skills/tadforce-update/SKILL.md +48 -0
- package/src/build/brand.js +107 -0
- package/src/build/browser.js +70 -0
- package/src/build/directives.js +293 -0
- package/src/build/export.js +60 -0
- package/src/build/figures.js +119 -0
- package/src/build/mermaid.js +107 -0
- package/src/build/render.js +299 -0
- package/src/build/serve.js +59 -0
- package/src/cli.js +68 -0
- package/src/commands/docs.js +191 -0
- package/src/commands/doctor.js +366 -0
- package/src/commands/init.js +132 -0
- package/src/commands/org.js +151 -0
- package/src/commands/review.js +35 -0
- package/src/commands/spec.js +91 -0
- package/src/commands/update.js +153 -0
- package/src/facts/extractors/apex.js +111 -0
- package/src/facts/extractors/automation.js +85 -0
- package/src/facts/extractors/data.js +94 -0
- package/src/facts/extractors/integration.js +76 -0
- package/src/facts/extractors/misc.js +100 -0
- package/src/facts/extractors/security.js +92 -0
- package/src/facts/extractors/ui.js +120 -0
- package/src/facts/fingerprints.js +32 -0
- package/src/facts/heuristics/exclusions.js +143 -0
- package/src/facts/heuristics/modules.js +85 -0
- package/src/facts/heuristics/naming.js +31 -0
- package/src/facts/heuristics/signals.js +76 -0
- package/src/facts/index.js +197 -0
- package/src/facts/org.js +87 -0
- package/src/facts/xml.js +85 -0
- package/src/sf/sf.js +120 -0
- package/src/util/args.js +21 -0
- package/src/util/config.js +104 -0
- package/src/util/fsx.js +58 -0
- package/src/util/i18n.js +33 -0
- package/src/util/log.js +31 -0
- package/src/util/paths.js +11 -0
- package/src/validate/index.js +126 -0
- package/templates/axes/en/00-document-control.md +3 -0
- package/templates/axes/en/01-summary.md +7 -0
- package/templates/axes/en/02-method.md +9 -0
- package/templates/axes/en/03-findings.md +19 -0
- package/templates/axes/en/04-register.md +3 -0
- package/templates/axes/en/05-roadmap.md +3 -0
- package/templates/axes/en/99-appendix.md +5 -0
- package/templates/axes/fr/00-document-control.md +3 -0
- package/templates/axes/fr/01-summary.md +7 -0
- package/templates/axes/fr/02-method.md +9 -0
- package/templates/axes/fr/03-findings.md +19 -0
- package/templates/axes/fr/04-register.md +3 -0
- package/templates/axes/fr/05-roadmap.md +3 -0
- package/templates/axes/fr/99-appendix.md +5 -0
- package/templates/html/cover.html +12 -0
- package/templates/html/editor.js +502 -0
- package/templates/html/style.css +255 -0
- package/templates/html/template.html +88 -0
- package/templates/i18n/en.json +366 -0
- package/templates/i18n/fr.json +366 -0
- package/templates/manifest/package-tad.xml +543 -0
- package/templates/specs/sections.yml +494 -0
- package/templates/tad/en/00-document-control.md +7 -0
- package/templates/tad/en/01-summary.md +17 -0
- package/templates/tad/en/02-purpose.md +35 -0
- package/templates/tad/en/03-context.md +17 -0
- package/templates/tad/en/04-general.md +29 -0
- package/templates/tad/en/05-functional.md +7 -0
- package/templates/tad/en/06-data.md +71 -0
- package/templates/tad/en/07-application.md +49 -0
- package/templates/tad/en/08-ui.md +41 -0
- package/templates/tad/en/09-integrations.md +53 -0
- package/templates/tad/en/10-security.md +59 -0
- package/templates/tad/en/11-reporting.md +13 -0
- package/templates/tad/en/12-operations.md +25 -0
- package/templates/tad/en/13-nfr.md +9 -0
- package/templates/tad/en/14-decisions.md +3 -0
- package/templates/tad/en/15-outlook.md +3 -0
- package/templates/tad/en/99-appendices.md +119 -0
- package/templates/tad/fr/00-document-control.md +7 -0
- package/templates/tad/fr/01-summary.md +17 -0
- package/templates/tad/fr/02-purpose.md +35 -0
- package/templates/tad/fr/03-context.md +17 -0
- package/templates/tad/fr/04-general.md +29 -0
- package/templates/tad/fr/05-functional.md +7 -0
- package/templates/tad/fr/06-data.md +71 -0
- package/templates/tad/fr/07-application.md +49 -0
- package/templates/tad/fr/08-ui.md +41 -0
- package/templates/tad/fr/09-integrations.md +53 -0
- package/templates/tad/fr/10-security.md +59 -0
- package/templates/tad/fr/11-reporting.md +13 -0
- package/templates/tad/fr/12-operations.md +25 -0
- package/templates/tad/fr/13-nfr.md +9 -0
- package/templates/tad/fr/14-decisions.md +3 -0
- package/templates/tad/fr/15-outlook.md +3 -0
- package/templates/tad/fr/99-appendices.md +119 -0
- package/templates/vendor/LICENSE-html-docx-js.txt +21 -0
- package/templates/vendor/LICENSE-html2canvas.txt +22 -0
- package/templates/vendor/LICENSE-mermaid.txt +21 -0
- package/templates/vendor/html-docx.js +13216 -0
- package/templates/vendor/html2canvas.min.js +20 -0
- package/templates/vendor/mermaid.min.js +2314 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128" role="img" aria-label="TADForce">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
+
<stop offset="0" stop-color="#1E88FF"/>
|
|
5
|
+
<stop offset="1" stop-color="#9B1FE8"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<pattern id="grid" width="12" height="12" patternUnits="userSpaceOnUse">
|
|
8
|
+
<path d="M12 0H0V12" fill="none" stroke="#ffffff" stroke-opacity=".16" stroke-width="1"/>
|
|
9
|
+
</pattern>
|
|
10
|
+
</defs>
|
|
11
|
+
<rect width="128" height="128" rx="30" fill="url(#g)"/>
|
|
12
|
+
<rect width="128" height="128" rx="30" fill="url(#grid)"/>
|
|
13
|
+
<!-- blueprint sheet with a folded corner -->
|
|
14
|
+
<path d="M38 20h38l20 20v62a6 6 0 0 1-6 6H38a6 6 0 0 1-6-6V26a6 6 0 0 1 6-6z" fill="#ffffff"/>
|
|
15
|
+
<path d="M76 20v14a6 6 0 0 0 6 6h14z" fill="#D6E4FF"/>
|
|
16
|
+
<!-- the T: crossbar + compass legs -->
|
|
17
|
+
<path d="M44 50h40" stroke="#0B2545" stroke-width="7" stroke-linecap="round"/>
|
|
18
|
+
<path d="M64 52L55 96" stroke="#0B2545" stroke-width="6" stroke-linecap="round"/>
|
|
19
|
+
<path d="M64 52L73 96" stroke="#0B2545" stroke-width="6" stroke-linecap="round"/>
|
|
20
|
+
<circle cx="64" cy="52" r="6.5" fill="#9B1FE8" stroke="#0B2545" stroke-width="3"/>
|
|
21
|
+
<!-- the line the compass draws -->
|
|
22
|
+
<path d="M50 100q14 7 28 0" fill="none" stroke="#9B1FE8" stroke-width="3" stroke-linecap="round" stroke-dasharray="2 5"/>
|
|
23
|
+
<path d="M44 34h18M44 40h12" stroke="#1E88FF" stroke-width="3" stroke-linecap="round" opacity=".55"/>
|
|
24
|
+
</svg>
|
package/assets/logo.svg
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 700 128" width="700" height="128" role="img" aria-label="TADForce">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
+
<stop offset="0" stop-color="#1E88FF"/>
|
|
5
|
+
<stop offset="1" stop-color="#9B1FE8"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="t" x1="0" y1="0" x2="1" y2="0">
|
|
8
|
+
<stop offset="0" stop-color="#1E88FF"/>
|
|
9
|
+
<stop offset="1" stop-color="#9B1FE8"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<pattern id="grid" width="12" height="12" patternUnits="userSpaceOnUse">
|
|
12
|
+
<path d="M12 0H0V12" fill="none" stroke="#ffffff" stroke-opacity=".16" stroke-width="1"/>
|
|
13
|
+
</pattern>
|
|
14
|
+
</defs>
|
|
15
|
+
<g>
|
|
16
|
+
<rect width="128" height="128" rx="30" fill="url(#g)"/>
|
|
17
|
+
<rect width="128" height="128" rx="30" fill="url(#grid)"/>
|
|
18
|
+
<path d="M38 20h38l20 20v62a6 6 0 0 1-6 6H38a6 6 0 0 1-6-6V26a6 6 0 0 1 6-6z" fill="#ffffff"/>
|
|
19
|
+
<path d="M76 20v14a6 6 0 0 0 6 6h14z" fill="#D6E4FF"/>
|
|
20
|
+
<path d="M44 50h40" stroke="#0B2545" stroke-width="7" stroke-linecap="round"/>
|
|
21
|
+
<path d="M64 52L55 96" stroke="#0B2545" stroke-width="6" stroke-linecap="round"/>
|
|
22
|
+
<path d="M64 52L73 96" stroke="#0B2545" stroke-width="6" stroke-linecap="round"/>
|
|
23
|
+
<circle cx="64" cy="52" r="6.5" fill="#9B1FE8" stroke="#0B2545" stroke-width="3"/>
|
|
24
|
+
<path d="M50 100q14 7 28 0" fill="none" stroke="#9B1FE8" stroke-width="3" stroke-linecap="round" stroke-dasharray="2 5"/>
|
|
25
|
+
<path d="M44 34h18M44 40h12" stroke="#1E88FF" stroke-width="3" stroke-linecap="round" opacity=".55"/>
|
|
26
|
+
</g>
|
|
27
|
+
<text x="152" y="82" font-family="Segoe UI, Inter, Helvetica Neue, Arial, sans-serif" font-size="64" font-weight="800" letter-spacing="-1.5">
|
|
28
|
+
<tspan fill="#0B2545">TAD</tspan><tspan fill="url(#t)">Force</tspan>
|
|
29
|
+
</text>
|
|
30
|
+
<text x="155" y="110" font-family="Segoe UI, Inter, Helvetica Neue, Arial, sans-serif" font-size="14" font-weight="600" fill="#5a6878" letter-spacing="2">THE ARCHITECT'S SCRIBE · NO EVIDENCE, NO SENTENCE</text>
|
|
31
|
+
</svg>
|
package/bin/tadforce.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Apply the review comments saved in a TADForce HTML document and rebuild it with the comments resolved
|
|
3
|
+
argument-hint: "[path to the saved HTML]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `tadforce-review` skill. Comments file: $ARGUMENTS (default: `tadforce/out/TAD_<CODE>.html`, the single file the readers comment through `npx tadforce review`).
|
|
7
|
+
|
|
8
|
+
List the open comments with `npx tadforce review --json`, classify them, apply each correction to the sources and to the knowledge files, record the resolutions in `tadforce/tadforce.config.json`, rebuild with `npx tadforce build --pdf --docx`, and report one line per comment.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Bring an existing Technical Architecture Document up to date with what changed in the org since its last version
|
|
3
|
+
argument-hint: "[org alias]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `tadforce-update` skill. Run `npx tadforce update --json`, rewrite only the sections it lists from the new facts and the changed metadata, rebuild with `npx tadforce build --pdf --docx`, and report what changed in the document.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate the Technical Architecture Document (and the Improvement Axes) of the current Salesforce org, end to end
|
|
3
|
+
argument-hint: "[org alias] [fr|en]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `tadforce` skill to produce the Technical Architecture Document of this Salesforce project, end to end: `doctor` (tools, org connection, metadata, the questions only a human can answer), writing every section, `build` (HTML with editing and comments, PDF, DOCX) and validation, then the Improvement Axes document.
|
|
7
|
+
|
|
8
|
+
Arguments (optional): $ARGUMENTS — an org alias and/or the document language.
|
|
9
|
+
|
|
10
|
+
Start with `npx tadforce doctor --json` and loop on it until `ok: true`, following `skills/tadforce/references/workflow.md`. Ask the framing questions in one batch, each with its recommended answer. Stop only when `npx tadforce validate` reports 0 errors, then hand over the paths, the score and the points to confirm.
|
package/package.json
CHANGED
|
@@ -1,6 +1,62 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tadforce",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Point it at a Salesforce org. Get the technical architecture document a senior architect would write — evidence-based, reproducible, reviewable.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"tadforce": "bin/tadforce.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin",
|
|
11
|
+
"src",
|
|
12
|
+
"templates",
|
|
13
|
+
"skills",
|
|
14
|
+
"commands",
|
|
15
|
+
".claude-plugin",
|
|
16
|
+
"assets/logo.svg",
|
|
17
|
+
"assets/logo-mark.svg",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"NOTICE"
|
|
21
|
+
],
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=20"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"test": "node --test \"test/*.test.js\" && node tools/check-generic.js",
|
|
27
|
+
"test:unit": "node --test \"test/*.test.js\"",
|
|
28
|
+
"check:generic": "node tools/check-generic.js",
|
|
29
|
+
"example": "node bin/tadforce.js build --doc all --pdf --docx --cwd examples/northwind-bank",
|
|
30
|
+
"example:validate": "node bin/tadforce.js validate --doc all --cwd examples/northwind-bank",
|
|
31
|
+
"set-owner": "node tools/set-owner.js"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [
|
|
34
|
+
"salesforce",
|
|
35
|
+
"architecture",
|
|
36
|
+
"technical-architecture-document",
|
|
37
|
+
"documentation",
|
|
38
|
+
"sfdx",
|
|
39
|
+
"sf-cli",
|
|
40
|
+
"agent-skills",
|
|
41
|
+
"claude-code",
|
|
42
|
+
"codex",
|
|
43
|
+
"well-architected",
|
|
44
|
+
"mermaid"
|
|
45
|
+
],
|
|
46
|
+
"author": "Jihad AZAMI HASSANI (Salesforce Technical Architect)",
|
|
47
|
+
"license": "Apache-2.0",
|
|
48
|
+
"homepage": "https://github.com/azamiji/TADForce#readme",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "git+https://github.com/azamiji/TADForce.git"
|
|
52
|
+
},
|
|
53
|
+
"bugs": {
|
|
54
|
+
"url": "https://github.com/azamiji/TADForce/issues"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"fast-xml-parser": "^4.5.0",
|
|
58
|
+
"markdown-it": "^14.1.0",
|
|
59
|
+
"puppeteer-core": "^23.11.1",
|
|
60
|
+
"yaml": "^2.6.1"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tadforce
|
|
3
|
+
description: Generate, end to end, a client-ready Technical Architecture Document (TAD) of any Salesforce org — plus the integrator's internal Improvement Axes — from the org's own metadata. Handles prerequisites, org authorization, wildcard manifest retrieve, deterministic facts, the questions only a human can answer, writing chapter by chapter, HTML (in-browser edit and comment) / PDF / DOCX build and validation. Covers every Salesforce product (Sales, Service, Field Service, Experience, Marketing, Commerce, Industries, CPQ/Revenue, OmniStudio, Data Cloud, Agentforce, CRM Analytics, Shield, integrations). Use when the user asks to document a Salesforce org, write or update an architecture document / solution architecture / as-built / document d'architecture technique, or runs /tadforce.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# TADForce — the architect's scribe
|
|
7
|
+
|
|
8
|
+
You produce the architecture document a senior Salesforce architect would hand to a client: precise, evidence-based, readable, the same structure for every org. **No evidence, no sentence.**
|
|
9
|
+
|
|
10
|
+
The CLI (`npx tadforce …`) does everything deterministic: org access, retrieve, facts, tables, diagrams from metadata, build, validation. You do what needs judgement: ask the right questions, read the code, write the narrative, keep the client's vocabulary.
|
|
11
|
+
|
|
12
|
+
## Golden rules
|
|
13
|
+
|
|
14
|
+
1. **Read-only.** Never deploy, never modify `force-app`, never read business records. TADForce only allows read-only `sf` commands and aggregate queries.
|
|
15
|
+
2. **No evidence, no sentence.** Every statement relies on metadata (P1), a document provided by the project (P2/P3 — functional specifications are in `knowledge/inputs/specs/`), or is written as *to be confirmed*. See `references/evidence-rules.md`.
|
|
16
|
+
3. **Never name a system by guessing.** External systems come from `knowledge/glossary.yml`, confirmed by a human. A field called `LegacyCoreId__c` does not tell you the system is called « Legacy Core ».
|
|
17
|
+
4. **Never document what is decommissioned or excluded.** Ask about the candidates in `facts/questions.json`; record the answers in `knowledge/exclusions.yml`.
|
|
18
|
+
5. **The client's vocabulary is law.** Apply `glossary.yml › terms` everywhere, diagrams included.
|
|
19
|
+
6. **Numbers come from facts.** Write counts as `{{n:apex.classes}}`, links as `{{ref:section-id}}`. Never type a count by hand.
|
|
20
|
+
7. **Client document ≠ internal review.** The TAD is factual and positive. Debt, risks and recommendations go to the Improvement Axes document.
|
|
21
|
+
8. **Technical names in code font must exist** in the inventory (`tadforce validate` checks it).
|
|
22
|
+
9. **Write in the document language** (`tadforce.config.json › language`). Keep Salesforce terms in English (Lead, Queue, Record Type, Named Credential…).
|
|
23
|
+
10. **Ask in batches.** Group your questions; never ask what the facts already answer.
|
|
24
|
+
|
|
25
|
+
## The run
|
|
26
|
+
|
|
27
|
+
Four commands: **doctor → build → review → update**. Follow `references/workflow.md`. In short:
|
|
28
|
+
|
|
29
|
+
| Step | You run | Human action |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| 1. Doctor | `npx tadforce doctor --json`, in a loop until `ok: true`. Answer its `questions` in one message (Block A of `references/questions.md`), then pass the answers as flags: `--confirm --lang … --client … --integrator …\|none --author …\|none --title … [--scope …] [--logo …] [--specs …\|--no-specs]`. Ask Blocks B–D, write `knowledge/*.yml`, then `--facts-reviewed` | log in once in the browser if asked; confirm the answers |
|
|
32
|
+
| 2. Write | loop: `npx tadforce next --json` → read the spec, the facts, the specifications in `knowledge/inputs/specs/`, the code → replace the marker | — |
|
|
33
|
+
| 3. Build | `npx tadforce build --pdf --docx` until validation shows 0 errors; hand over the paths, the score, the points to confirm | — |
|
|
34
|
+
| 4. Review | `/tadforce-review` (`npx tadforce review --json`) | `npx tadforce review`: comment in the page, Save — always the same file |
|
|
35
|
+
| Later | `/tadforce-update` (`npx tadforce update --json`) | — |
|
|
36
|
+
|
|
37
|
+
## Writing a section
|
|
38
|
+
|
|
39
|
+
`npx tadforce next --json` returns the file, the marker, and the spec: `intent`, `must`, `never`, `facts` (with an excerpt), and `readModules` (product references to read). Then:
|
|
40
|
+
|
|
41
|
+
1. Read the facts excerpt; open the metadata or code files it points to (`tadforce/.snapshot/source/...` or `force-app/...`) when you need behaviour, not only names.
|
|
42
|
+
2. Replace the `<!-- tad:pending id -->` line with the content. Keep the headings and their `{#id}` anchors.
|
|
43
|
+
3. Use the conventions of `references/markdown-conventions.md`: `{{n:…}}`, `{{ref:…}}`, `@@ERD:…@@`, Mermaid + `Figure:` line, `> [!INTEGRATOR]`, cards and KPI blocks.
|
|
44
|
+
4. Follow `references/writing-rules.md` (voice, structure, length) and `references/figure-rules.md`.
|
|
45
|
+
5. Every few sections, run `npx tadforce validate` to catch unknown identifiers or forbidden terms early.
|
|
46
|
+
|
|
47
|
+
## Products and industries
|
|
48
|
+
|
|
49
|
+
`facts.modules.clouds` lists the products detected, each with its evidence and a reference under `references/modules/`. Read the reference of every detected product before writing chapters 4 to 11 — it says what to cover, where, and which pitfalls to avoid:
|
|
50
|
+
|
|
51
|
+
`sales-cloud` · `service-cloud` · `field-service` · `experience-cloud` · `marketing` · `commerce` · `revenue-cpq` · `industries` · `omnistudio` · `data-cloud` · `agentforce-ai` · `analytics` · `platform-events` · `security-shield` · `integration-platforms`
|
|
52
|
+
|
|
53
|
+
When a product is used but not detected (no metadata trace), the human tells you: add it to `glossary.yml › products` and cover it.
|
|
54
|
+
|
|
55
|
+
## References
|
|
56
|
+
|
|
57
|
+
- `references/workflow.md` — the full run, failure handling, long-running steps
|
|
58
|
+
- `references/questions.md` — the exact questions to ask, in batches (EN / FR)
|
|
59
|
+
- `references/evidence-rules.md` — levels of evidence, what counts as proof, when to ask
|
|
60
|
+
- `references/writing-rules.md` — voice, structure and style of a consulting-grade TAD
|
|
61
|
+
- `references/figure-rules.md` — when to draw, Mermaid conventions, generated figures
|
|
62
|
+
- `references/markdown-conventions.md` — placeholders, directives, callouts, HTML blocks
|
|
63
|
+
- `references/exclusion-heuristics.md` — unused / decommissioned components
|
|
64
|
+
- `references/naming-external-systems.md` — glossary of systems and terms
|
|
65
|
+
- `references/axes-rules.md` — the Improvement Axes document
|
|
66
|
+
- `references/salesforce-skills.md` — Salesforce skills worth calling, and when
|
|
67
|
+
- `references/modules/*.md` — one reference per Salesforce product family
|
|
68
|
+
|
|
69
|
+
## Done means
|
|
70
|
+
|
|
71
|
+
- `npx tadforce validate` → 0 error, warnings reviewed (each unknown identifier explained or fixed).
|
|
72
|
+
- `tadforce/out/` holds the TAD (HTML, PDF, DOCX) and the Improvement Axes (HTML).
|
|
73
|
+
- You give the human: the paths, the validation score, the sections you marked *to be confirmed*, and the questions still open.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# The Improvement Axes document (internal to the integrator)
|
|
2
|
+
|
|
3
|
+
Purpose: give the integrator an honest, prioritised view of the debt and the opportunities, separate from the client TAD. It may be shared with the client after review — write it so that it can be.
|
|
4
|
+
|
|
5
|
+
## Inputs
|
|
6
|
+
|
|
7
|
+
- `facts.signals` — measured signals (pillar, priority, value, evidence); tables are generated per pillar.
|
|
8
|
+
- `knowledge/inputs/code-analyzer-results.json` — Code Analyzer violations (via the `dx-code-analyzer-run` skill).
|
|
9
|
+
- The `platform-architecture-analyze` skill output (Well-Architected reading).
|
|
10
|
+
- What you saw while writing the TAD (keep a scratch list of observations as you go).
|
|
11
|
+
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
- A signal is not a finding. For each signal, decide: real issue, acceptable by design (say why), or false positive (drop it).
|
|
15
|
+
- Each retained finding becomes an axis `AX-nn` with: finding (fact), impact (for the business or the run), recommendation (concrete, Salesforce-native), priority, effort (S / M / L).
|
|
16
|
+
- Priorities: **P1** security, data integrity or continuity at risk; **P2** plan in the next releases (maintainability, limits, retired features such as Workflow Rules and Process Builder); **P3** improve when touching the area.
|
|
17
|
+
- Pillars follow Salesforce Well-Architected: Trusted, Easy, Adaptable.
|
|
18
|
+
- Name components; never people or teams.
|
|
19
|
+
- No duplicates with the TAD: the TAD describes, the Axes document improves. The TAD's outlook chapter may point to this document without quoting it.
|
|
20
|
+
|
|
21
|
+
## Register table
|
|
22
|
+
|
|
23
|
+
| ID | Axis | Finding | Impact | Recommendation | Priority | Effort |
|
|
24
|
+
|---|---|---|---|---|---|---|
|
|
25
|
+
| AX-01 | Sharing | 3 classes declared `without sharing` serve UI controllers | Users may read records beyond their access | Switch to `with sharing` + `WITH USER_MODE`; keep `without sharing` in a dedicated system class | <span class="b p1">P1</span> | M |
|
|
26
|
+
|
|
27
|
+
## Roadmap
|
|
28
|
+
|
|
29
|
+
Group the axes by horizon (next release, next quarter, next year) or by theme; a Mermaid `gantt` is welcome.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Evidence rules — no evidence, no sentence
|
|
2
|
+
|
|
3
|
+
## Levels of evidence
|
|
4
|
+
|
|
5
|
+
| Level | Source | Example | How to write it |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| **P1** | Metadata or code of the org | `LeadTrigger` calls `LeadTriggerHandler.run()` | State it as a fact |
|
|
8
|
+
| **P2** | Technical document provided by the project | Release procedure in `knowledge/inputs/` | State it as a fact; cite the reference (DR-nn) when it matters |
|
|
9
|
+
| **P3** | Functional document, ticket, interview | « Advisors handle 30 leads a day » | Attribute it: « according to the specifications (DR-01) » |
|
|
10
|
+
| **To confirm** | Deduction, missing or contradictory information | Retention policy not configured in the org | Write « to be confirmed » / « à confirmer » and list it in your hand-over |
|
|
11
|
+
|
|
12
|
+
## Kinds of statements
|
|
13
|
+
|
|
14
|
+
Keep them apart in your head and in the text:
|
|
15
|
+
|
|
16
|
+
- **Documented requirement** — written in a specification.
|
|
17
|
+
- **Technical observation** — visible in the metadata or the code.
|
|
18
|
+
- **Deduction** — logical but not proven: say so, or leave it out.
|
|
19
|
+
- **Unavailable information** — absent from the snapshot: say it is not visible, never fill the gap.
|
|
20
|
+
- **Recommendation** — goes to the Improvement Axes, not to the TAD.
|
|
21
|
+
|
|
22
|
+
## Non-equivalences
|
|
23
|
+
|
|
24
|
+
- A name that looks like a business term is not a proof of the link (`LegacyCoreId__c` does not mean the system is called « Legacy Core »).
|
|
25
|
+
- Absent from the snapshot ≠ absent from the org (a type may have failed to retrieve: check `.snapshot/retrieve-report.json`).
|
|
26
|
+
- Present in the snapshot ≠ used (inactive flows, components placed nowhere, objects with no record).
|
|
27
|
+
- A ticket status or a file date is not a proof of deployment.
|
|
28
|
+
- What a Salesforce product *can* do is not what this org *does*.
|
|
29
|
+
|
|
30
|
+
## Reading code for evidence
|
|
31
|
+
|
|
32
|
+
- Read the handler, not only the trigger; the service, not only the controller.
|
|
33
|
+
- Note thresholds and switches (`if (records.size() > 200) Database.executeBatch…`), named credentials (`callout:X`), custom metadata read (`X__mdt.getAll()`), platform events published (`EventBus.publish`).
|
|
34
|
+
- For flows: start element (object, trigger type), decisions, actions (Apex, subflows), record operations.
|
|
35
|
+
- For OmniStudio: OmniScript elements → Integration Procedure → Data Mapper / Remote Action / HTTP.
|
|
36
|
+
- Keep a short list of `file:line` for the sentences that matter; you need it when the human challenges a statement.
|
|
37
|
+
|
|
38
|
+
## When to ask
|
|
39
|
+
|
|
40
|
+
Ask when a sentence would otherwise rely on a guess about: the name of a system, the use of a component that looks dead, a decommissioned feature, an environment or a release step, a number not in facts. Batch the questions (`questions.md`).
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Unused and decommissioned components
|
|
2
|
+
|
|
3
|
+
An org accumulates proofs of concept, test scaffolding, samples and features switched off but still deployed. Documenting them misleads the reader; deleting them is not your job. TADForce **proposes** candidates; the human **decides**; the decision lives in `knowledge/exclusions.yml`.
|
|
4
|
+
|
|
5
|
+
## Candidates computed by `tadforce facts`
|
|
6
|
+
|
|
7
|
+
| Reason | Meaning | Typical decision |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| name suggests test / demo / POC / sample / old / legacy / draft… | Words in the API name | Exclude after a quick look |
|
|
10
|
+
| not placed on any page, app, tab, action, flow or OmniStudio component | LWC or Aura never used in the snapshot | Exclude unless used by a site or a utility bar outside the snapshot |
|
|
11
|
+
| flow status is Draft / Inactive / Obsolete | No active version | Exclude |
|
|
12
|
+
| inactive version (OmniStudio) | No active OmniScript / IP / Data Mapper version | Exclude |
|
|
13
|
+
| referenced only by test classes | Apex reached by nothing but its tests | Ask: often dead code, sometimes started by anonymous Apex or a scheduler |
|
|
14
|
+
| not referenced by any other component | Apex not reached at all (entry points such as REST, schedulable, invocable, global, SSO handlers are never flagged) | Ask |
|
|
15
|
+
| not assigned to any app, object override or tab | FlexiPage not assigned in the snapshot | Ask: assignments by profile may live outside the snapshot |
|
|
16
|
+
| object with no record in the org | From org facts | Ask: new feature not live yet, or abandoned |
|
|
17
|
+
|
|
18
|
+
## Exclusions file
|
|
19
|
+
|
|
20
|
+
```yaml
|
|
21
|
+
exclude:
|
|
22
|
+
- name: "*Demo*" # wildcard on the API name
|
|
23
|
+
reason: "Demonstration components"
|
|
24
|
+
- name: legacyScoring
|
|
25
|
+
type: lwc # optional: apex, trigger, lwc, aura, flow, flexipage, app, object, permissionSet, omniScript, integrationProcedure, dataMapper, report, emailTemplate, staticResource…
|
|
26
|
+
reason: "Replaced by the scoring engine"
|
|
27
|
+
features:
|
|
28
|
+
- name: "Search by national ID"
|
|
29
|
+
note: "UI removed; backend kept until further notice"
|
|
30
|
+
components: [idSearch, IdSearchController, IdSearch_Procedure]
|
|
31
|
+
keywords: ["national ID search", "ID card search"] # forbidden in the text
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- Excluded components disappear from every count, table and figure after `tadforce facts`.
|
|
35
|
+
- `features.keywords` are forbidden in the text: `tadforce validate` fails if one appears.
|
|
36
|
+
- The method section of the TAD lists the exclusions applied (generated), so the client knows what was left out and why.
|
|
37
|
+
|
|
38
|
+
## In the Improvement Axes
|
|
39
|
+
|
|
40
|
+
Candidates that the human did not exclude but did not confirm either are listed in the appendix of the Improvement Axes: cleaning them is an improvement axis, never a TAD statement.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Figure rules
|
|
2
|
+
|
|
3
|
+
A figure is worth its place only when it shows a relationship, a branch, an order or a dependency that text cannot show at a glance.
|
|
4
|
+
|
|
5
|
+
## Generated figures (do not draw them by hand)
|
|
6
|
+
|
|
7
|
+
| Directive | What it draws |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `@@FIGURE:context@@` | Context view: users (glossary.actors or apps), the org with its products, connected systems |
|
|
10
|
+
| `@@FIGURE:layers@@` | Logical layers with counts |
|
|
11
|
+
| `@@FIGURE:integrations\|caption@@` | Integration map from glossary systems and endpoints |
|
|
12
|
+
| `@@FIGURE:roles\|caption@@` | Role hierarchy (top levels on large orgs) |
|
|
13
|
+
| `@@ERD:Obj1,Obj2,…\|caption@@` | ER diagram, Lookup / Master-Detail fields only; `@@ERD:auto\|caption@@` picks the most connected objects |
|
|
14
|
+
|
|
15
|
+
## Hand-written Mermaid figures
|
|
16
|
+
|
|
17
|
+
Fence them as `mermaid` and put the caption on the line right after the closing fence:
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
sequenceDiagram
|
|
21
|
+
participant U as Advisor
|
|
22
|
+
participant L as customer360
|
|
23
|
+
U->>L: open the customer record
|
|
24
|
+
```
|
|
25
|
+
Figure: Opening the customer 360 view
|
|
26
|
+
|
|
27
|
+
- **Sequences** (`sequenceDiagram`): only calls you saw in code or metadata. Participants are components or confirmed systems. 4 to 9 participants, 6 to 15 messages. Numbering is automatic.
|
|
28
|
+
- **Flowcharts** (`flowchart LR|TB`): use the shared classes `:::actor`, `:::sf`, `:::ext`, `:::data`, `:::warn` (added automatically). Node ids short and alphanumeric (`A1`), labels in double quotes: `A1["Lead (web)"]:::actor`.
|
|
29
|
+
- **State diagrams** (`stateDiagram-v2`) for statuses with transitions.
|
|
30
|
+
- **Gantt** only in the Improvement Axes roadmap.
|
|
31
|
+
- ERDs are never hand-written: use `@@ERD@@` so they match the metadata.
|
|
32
|
+
|
|
33
|
+
## Mermaid pitfalls (they break the build)
|
|
34
|
+
|
|
35
|
+
- Parentheses, brackets, `#`, `;` or quotes inside an unquoted label → always quote labels.
|
|
36
|
+
- `end` as a node id; a `-->` inside a label; `:` inside sequence messages is fine, `;` is not.
|
|
37
|
+
- Long labels: wrap with `<br/>` is not supported (labels are SVG text) — keep labels short instead.
|
|
38
|
+
- One diagram per fence; the `Figure:` line must follow the fence immediately.
|
|
39
|
+
|
|
40
|
+
## Captions
|
|
41
|
+
|
|
42
|
+
Sentence case, no final full stop, say what the figure shows: « Figure: Lead lifecycle, from the sources to conversion or archiving ».
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Markdown conventions of TADForce sources
|
|
2
|
+
|
|
3
|
+
The sources live in `tadforce/src/tad/*.md` and `tadforce/src/axes/*.md`, concatenated in file-name order.
|
|
4
|
+
|
|
5
|
+
## Headings
|
|
6
|
+
|
|
7
|
+
- `#` chapter, `##` section, `###` subsection — numbered automatically (1, 1.2, 1.2.3).
|
|
8
|
+
- `{-}` at the end: not numbered. `{#my-id}`: explicit anchor. Both: `{- #my-id}`.
|
|
9
|
+
- In appendices, `{{letter}}` in a `##` title becomes A, B, C… and `{{sub}}` in a `###` becomes A.1, A.2… so optional appendices never leave gaps.
|
|
10
|
+
- Keep the anchors of the skeleton: KPI tiles, references and validation rely on them.
|
|
11
|
+
|
|
12
|
+
## Placeholders (resolved at build)
|
|
13
|
+
|
|
14
|
+
| Placeholder | Result |
|
|
15
|
+
|---|---|
|
|
16
|
+
| `{{n:apex.classes}}` | Formatted number from `facts.counts` (then from the facts root) |
|
|
17
|
+
| `{{v:modules.products}}` | Raw value from facts |
|
|
18
|
+
| `{{cfg:client.name}}` | Value from `tadforce.config.json` |
|
|
19
|
+
| `{{ref:data-overview}}` | Link « § 6.2 » to the section |
|
|
20
|
+
| `{{title:ch-data}}` | Link « 6 Data architecture » |
|
|
21
|
+
|
|
22
|
+
Main count keys: `apex.classes`, `apex.tests`, `apex.triggers`, `apex.batch`, `apex.queueable`, `apex.schedulable`, `apex.future`, `apex.rest`, `apex.withSharing`, `apex.withoutSharing`, `objects.custom`, `objects.standard`, `objects.platformEvents`, `fields.custom`, `fields.externalIds`, `recordTypes`, `validationRules.active`, `cmdt.types`, `cmdt.records`, `flows.active`, `flows.recordTriggered`, `flows.scheduled`, `omni.scriptsActive`, `omni.ipsActive`, `omni.dataMappers`, `ui.apps`, `ui.flexipages`, `ui.lwc`, `ui.aura`, `ui.vfPages`, `security.profiles`, `security.permissionSets`, `security.permissionSetGroups`, `security.roles`, `security.queues`, `security.sharingRules`, `integration.namedCredentials`, `integration.externalCredentials`, `integration.restResources`, `integration.connectedApps`, `integration.systems`, `misc.reports`, `misc.dashboards`, `misc.labels`.
|
|
23
|
+
|
|
24
|
+
## Directives (one per line)
|
|
25
|
+
|
|
26
|
+
- `@@ANNEX:<name>@@` — generated table. Names: `doc-control`, `version-history`, `legend`, `key-figures`, `products`, `naming`, `objects`, `standard-objects`, `external-ids`, `record-types`, `validation-rules`, `cmdt`, `platform-events`, `volumes`, `apex-summary`, `triggers`, `async`, `rest`, `flows`, `omni-scripts`, `integration-procedures`, `data-mappers`, `apps`, `flexipages`, `lwc`, `aura`, `visualforce`, `psg`, `permission-sets`, `profiles`, `roles`, `owd`, `sharing-rules`, `queues`, `named-credentials`, `external-credentials`, `connected-apps`, `auth-providers`, `allowed-domains`, `call-centers`, `systems`, `reports`, `labels`, `scheduled-jobs`, `packages`, `exclusions`, `inventory`, `traceability`, `glossary`, `signals`, `signals-trusted`, `signals-easy`, `signals-adaptable`, `exclusion-candidates`.
|
|
27
|
+
- `@@ERD:Obj1,Obj2|caption@@`, `@@FIGURE:context|layers|integrations|roles@@`, `@@KPIS@@`.
|
|
28
|
+
- `@@INCLUDE:knowledge/figures/x.svg@@` — include a file (SVG figures are framed). Follow it with `<p class="figcap">Figure — caption</p>` to number it.
|
|
29
|
+
|
|
30
|
+
## Conditional blocks
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
<!-- tad:if modules.omnistudio -->
|
|
34
|
+
…only when OmniStudio is detected…
|
|
35
|
+
<!-- tad:else -->
|
|
36
|
+
…otherwise…
|
|
37
|
+
<!-- tad:endif -->
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Conditions are facts paths (`modules.*`, `counts.*`, `org.*`, `facts.*`), `!` negates, `a|b` means either.
|
|
41
|
+
|
|
42
|
+
## Callouts
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
> [!INTEGRATOR]
|
|
46
|
+
> The scoring rules are Custom Metadata records: a new rule needs no deployment.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Kinds: `INTEGRATOR` (the integrator's contribution), `NOTE`, `RECO` (rare in the TAD), `WARN`.
|
|
50
|
+
|
|
51
|
+
## HTML blocks
|
|
52
|
+
|
|
53
|
+
Cards (achievements):
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<div class="cards">
|
|
57
|
+
<div class="card"><h4>Title</h4><p>Two to four sentences with `code` replaced by <code>code</code>.</p></div>
|
|
58
|
+
</div>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Markdown is not processed inside HTML blocks: use `<code>`, `<b>`, `<a href="#id">`.
|
|
62
|
+
|
|
63
|
+
Priority badges (Improvement Axes): `<span class="b p1">P1</span>`, `p2`, `p3`.
|
|
64
|
+
|
|
65
|
+
## Pending markers
|
|
66
|
+
|
|
67
|
+
`<!-- tad:pending <id> -->` marks a section to write. Replace the whole line. `tadforce next` gives the next one; `tadforce validate` fails while active ones remain.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Agentforce and Einstein
|
|
2
|
+
|
|
3
|
+
**Detected by** `bots` / `botVersions`, `genAiPlanners`, `genAiPlannerBundles`, `genAiPlugins` (topics), `genAiFunctions` (actions), `aiAuthoringBundles` (Agent Script), `genAiPromptTemplates`, Einstein prediction definitions.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 7 Application | `application.ai` section: each agent (purpose, channel, topics, actions and what they call — Flow, Apex, prompt template, API), grounding sources (knowledge, Data Cloud, records), guardrails and escalation to humans, prompt templates and where they are used, Einstein features used (scoring, classification, Copilot features) |
|
|
10
|
+
| 8 UI | Where agents appear (Lightning, Experience site, messaging channel) |
|
|
11
|
+
| 10 Security | Agent user, permission sets, Einstein Trust Layer settings, data masking |
|
|
12
|
+
| 12 Operations | Testing (agent tests), monitoring (session tracing, health alerts) |
|
|
13
|
+
|
|
14
|
+
## Read
|
|
15
|
+
|
|
16
|
+
Agent metadata above; the `agentforce-architecture-analyze` skill renders the declared architecture of one agent (topics, actions, flows, Apex, prompts).
|
|
17
|
+
|
|
18
|
+
## Draw
|
|
19
|
+
|
|
20
|
+
Flowchart agent → topics → actions → Flow / Apex / prompt template → data.
|
|
21
|
+
|
|
22
|
+
## Watch out
|
|
23
|
+
|
|
24
|
+
Describe declared behaviour, never transcripts or user prompts. Legacy Einstein Bots and Agentforce agents may coexist: say which channel uses which.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# CRM Analytics and Tableau
|
|
2
|
+
|
|
3
|
+
**Detected by** `wave*` metadata (applications, dashboards, dataflows, recipes, datasets) or namespace `wave`; Tableau shows as CSP trusted sites or embedded LWC.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 11 Reporting | `reporting.analytics` section: apps and their audience, data preparation (dataflows or recipes, schedules, sources), datasets, dashboards embedded in Lightning pages, security predicates and sharing inheritance |
|
|
10
|
+
| 9 Integrations | External data sources and connectors |
|
|
11
|
+
| 10 Security | Analytics permission sets and licences, row-level security |
|
|
12
|
+
|
|
13
|
+
## Read
|
|
14
|
+
|
|
15
|
+
`waveApplications`, `waveDashboards`, `waveDataflows`, `waveRecipes`, `waveDatasets` (XMD), flexipages embedding analytics components.
|
|
16
|
+
|
|
17
|
+
## Watch out
|
|
18
|
+
|
|
19
|
+
Lightning reports and dashboards (chapter 11 first section) and CRM Analytics are distinct: document both when both exist.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Commerce (B2B / D2C on Lightning, B2C Commerce connector, Order Management)
|
|
2
|
+
|
|
3
|
+
**Detected by** `WebStore`, `WebCart`, `ProductCatalog`, `BuyerGroup`, `BuyerAccount`, entitlement policies; Order Management by `OrderSummary`, `FulfillmentOrder`, `ReturnOrder`.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 5 Functional | Buyer journey (browse, search, cart, checkout, payment, order), account management, reorder; order lifecycle (summary, fulfilment, returns, refunds) |
|
|
10
|
+
| 6 Data | Catalog and categories, products and price books, buyer groups and entitlements, carts, orders and order summaries |
|
|
11
|
+
| 8 UI | Store site (LWR template, components), search configuration, guest browsing |
|
|
12
|
+
| 9 Integrations | Checkout integrations (pricing, inventory, shipping, tax, payment gateway), ERP for orders and stock, product information management |
|
|
13
|
+
| 10 Security | Buyer licences, store guest access, payment data never stored in Salesforce |
|
|
14
|
+
|
|
15
|
+
## Read
|
|
16
|
+
|
|
17
|
+
`objects/WebStore` and commerce objects, store `experiences`/`digitalExperiences`, Apex classes implementing commerce extension points (`commercestorefront`, `sfdc_checkout.*` interfaces), named credentials of payment and tax providers, flows of the checkout.
|
|
18
|
+
|
|
19
|
+
## Draw
|
|
20
|
+
|
|
21
|
+
Sequence of checkout with each external call; state diagram of the order summary.
|
|
22
|
+
|
|
23
|
+
## Watch out
|
|
24
|
+
|
|
25
|
+
B2C Commerce (Salesforce Commerce Cloud on its own platform) is a separate system: treat it as an external system unless the documents say otherwise.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Data Cloud
|
|
2
|
+
|
|
3
|
+
**Detected by** data stream definitions, data model objects (`__dlm`), data lake objects (`__dll`), Data Cloud metadata folders.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 6 Data | Data streams (sources: CRM, ingestion API, cloud storage, Marketing Cloud), data lake and data model objects, mappings, identity resolution rulesets, calculated insights, segments |
|
|
10
|
+
| 9 Integrations | Ingestion connectors and activation targets (Marketing, advertising, CRM), data actions and data graphs used by the CRM (related lists, Agentforce grounding) |
|
|
11
|
+
| 10 Security | Data spaces, permission sets for Data Cloud, consent |
|
|
12
|
+
|
|
13
|
+
## Read
|
|
14
|
+
|
|
15
|
+
`dataStreamDefinitions`, `dataSourceObjects`, `__dlm` / `__dll` objects, `mktCalcInsightObjectDefs`, data graphs, `dataSpaces`; the `data360-schema-get` skill helps.
|
|
16
|
+
|
|
17
|
+
## Draw
|
|
18
|
+
|
|
19
|
+
Flowchart sources → data streams → DLO → DMO → identity resolution → segments / insights → activations.
|
|
20
|
+
|
|
21
|
+
## Watch out
|
|
22
|
+
|
|
23
|
+
Data Cloud configuration is partly outside the metadata API: say what you could not see. Never quote profile data.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Experience Cloud (sites and portals)
|
|
2
|
+
|
|
3
|
+
**Detected by** `networks`, `experiences` / `digitalExperiences` bundles, `sites`, `navigationMenus`.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 3 Context | External populations (customers, partners, citizens, employees) and their channel |
|
|
10
|
+
| 8 UI | One `###` per site: audience, template (LWR or Aura), pages and custom components, navigation, branding, languages, mobile |
|
|
11
|
+
| 9 Integrations | Identity (self-registration, SSO, social login), embedded services (messaging), CMS content |
|
|
12
|
+
| 10 Security | Licences (Customer Community, Partner Community…), sharing sets and share groups, guest user access and its sharing rules, external OWD, CSP/CORS for the site, clickjack and session settings |
|
|
13
|
+
|
|
14
|
+
## Read
|
|
15
|
+
|
|
16
|
+
`networks/*.network-meta.xml` (self-registration, login, member profiles), `experiences` / `digitalExperiences` (routes, views, components used), `sites`, `sharingSets`, guest sharing rules (`sharingGuestRules`), profiles with community licences, `navigationMenus`, `cspTrustedSites`.
|
|
17
|
+
|
|
18
|
+
## Draw
|
|
19
|
+
|
|
20
|
+
Context view of the site (external users ↔ site ↔ org ↔ systems); sequence of self-registration or login.
|
|
21
|
+
|
|
22
|
+
## Watch out
|
|
23
|
+
|
|
24
|
+
Guest user access is a security topic: describe it factually in the TAD, put any overexposure in the Improvement Axes. External OWD differs from internal OWD.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Field Service
|
|
2
|
+
|
|
3
|
+
**Detected by** namespace `FSL`, or customised `WorkOrder`, `ServiceAppointment`, `ServiceTerritory`, `ServiceResource`, `MaintenancePlan`.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 5 Functional | Work order lifecycle (creation from case or asset, work types, line items), scheduling and dispatch (policies, optimisation), mobile execution (Field Service mobile app, flows, data capture), completion and billing triggers; preventive maintenance plans |
|
|
10
|
+
| 6 Data | Work order / appointment / assigned resource model, territories and operating hours, skills, products consumed and required, assets |
|
|
11
|
+
| 7 Application | Scheduling policies and work rules (`FSL` objects are data, not metadata: ask), automation on appointment status changes |
|
|
12
|
+
| 8 UI | Dispatcher console, Gantt, mobile app configuration (offline priming) |
|
|
13
|
+
| 10 Security | Field service permission sets, territory-based sharing, mobile user licences |
|
|
14
|
+
|
|
15
|
+
## Read
|
|
16
|
+
|
|
17
|
+
`objects/WorkOrder`, `objects/ServiceAppointment`, `objects/ServiceTerritory`, `objects/ServiceResource`, `workTypes`, `FSL__*` references, mobile app extensions (`lwc` with `lightning__GlobalAction` targets), flows launched from the mobile app.
|
|
18
|
+
|
|
19
|
+
## Draw
|
|
20
|
+
|
|
21
|
+
State diagram of appointment statuses; sequence case → work order → appointment → dispatch → mobile completion.
|
|
22
|
+
|
|
23
|
+
## Watch out
|
|
24
|
+
|
|
25
|
+
Scheduling policies, work rules and service objectives are records in `FSL` objects: they are not in the metadata; ask for them or describe them as configuration to confirm.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Industry clouds
|
|
2
|
+
|
|
3
|
+
**Detected by** namespaces or standard industry objects (see `facts.modules.clouds` evidence): Financial Services (`FinServ`, `FinancialAccount`, `ResidentialLoanApplication`), Insurance (`InsurancePolicy`, `Claim`), Health (`HealthCloudGA`, `CarePlan`, `ClinicalEncounter`), Life Sciences, Manufacturing (`SalesAgreement`, `AccountForecast`), Automotive (`Vehicle`), Consumer Goods (`RetailStore`, `Visit`), Communications / Media / Energy & Utilities (`vlocity_cmt`, `ServicePoint`), Public Sector (`IndividualApplication`, `BusinessLicense`), Education (`hed`, `LearnerProfile`), Nonprofit (`npsp`, `GiftTransaction`), Loyalty (`LoyaltyProgram`), Net Zero (carbon footprint objects).
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 4 General | Which industry cloud, which data model version (managed package vs standard objects), which industry features are used (and which are not) |
|
|
10
|
+
| 5 Functional | The industry processes as implemented (examples: onboarding and financial accounts; policy and claims; care plans and referrals; sales agreements and account forecasts; retail execution visits; licensing and permits; admissions and advising; donations and programs; loyalty accrual and redemption) |
|
|
11
|
+
| 6 Data | The industry objects used, with their role and what is custom around them (`data.industry` section); Person Accounts and household or group models |
|
|
12
|
+
| 7 Application | Industry engines used: OmniStudio, Business Rules Engine (decision matrices, expression sets), Document Generation, Action Plans, Industries Interaction Summaries — each only if seen in the metadata |
|
|
13
|
+
| 10 Security | Compliant data sharing (`participant`-based sharing), industry permission set licences |
|
|
14
|
+
|
|
15
|
+
## Read
|
|
16
|
+
|
|
17
|
+
Objects with the namespace or industry standard names, `decisionMatrixDefinitions` and `expressionSetDefinitions` (Business Rules Engine), `actionPlanTemplates`, `documentTemplates`, OmniStudio assets, Person Account settings (`settings/Account.settings-meta.xml`).
|
|
18
|
+
|
|
19
|
+
## Watch out
|
|
20
|
+
|
|
21
|
+
Industry clouds ship hundreds of objects: document only those referenced by local metadata or customised. Data model versions differ (managed package `FinServ__` vs core standard objects): say which one the org uses.
|