From c614abf6e6f0e1d2ff3c8a3344c28b9f4f35886c Mon Sep 17 00:00:00 2001 From: Vignesh Rajasekaran Date: Sat, 10 Oct 2026 10:08:09 +0530 Subject: [PATCH 1/3] Add update-docs skill: read-only, redacting playwright-cli docs workflow /update-docs writes, refreshes, reviews and restructures docs against the live Glific app from a cloud env with playwright-cli preinstalled. - gdocs.mjs (zero-dep): preflight (env, CLI, browser, guard canary, redaction self-test, login), guarded session, redacted screenshots, blocked-write log, provenance/link lint - Network guard blocks mutations, lock-taking queries (flowGet, simulatorGet) and non-GET REST writes before login - Bash hooks restrict direct playwright-cli use to the guarded session and surface blocked writes so Claude stops and warns Co-Authored-By: Claude Opus 5.5 --- .claude/settings.json | 26 + .claude/skills/update-docs/SKILL.md | 91 ++ .claude/skills/update-docs/browsing.md | 67 ++ .claude/skills/update-docs/safety.md | 72 ++ .../update-docs/scripts/cli.config.json | 20 + .claude/skills/update-docs/scripts/gdocs.mjs | 818 ++++++++++++++++++ .../update-docs/scripts/pw-guard-hook.sh | 89 ++ .claude/skills/update-docs/workflow-new.md | 40 + .../skills/update-docs/workflow-refresh.md | 46 + .../update-docs/workflow-restructure.md | 71 ++ .claude/skills/update-docs/workflow-review.md | 40 + .gitignore | 3 + 12 files changed, 1383 insertions(+) create mode 100644 .claude/skills/update-docs/SKILL.md create mode 100644 .claude/skills/update-docs/browsing.md create mode 100644 .claude/skills/update-docs/safety.md create mode 100644 .claude/skills/update-docs/scripts/cli.config.json create mode 100755 .claude/skills/update-docs/scripts/gdocs.mjs create mode 100755 .claude/skills/update-docs/scripts/pw-guard-hook.sh create mode 100644 .claude/skills/update-docs/workflow-new.md create mode 100644 .claude/skills/update-docs/workflow-refresh.md create mode 100644 .claude/skills/update-docs/workflow-restructure.md create mode 100644 .claude/skills/update-docs/workflow-review.md diff --git a/.claude/settings.json b/.claude/settings.json index d91aa10280..ca26ebc516 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -3,5 +3,31 @@ "deny": [ "Read(.env)" ] + }, + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { + "type": "command", + "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/skills/update-docs/scripts/pw-guard-hook.sh\" pre", + "timeout": 10 + } + ] + } + ], + "PostToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { + "type": "command", + "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/skills/update-docs/scripts/pw-guard-hook.sh\" post", + "timeout": 60 + } + ] + } + ] } } diff --git a/.claude/skills/update-docs/SKILL.md b/.claude/skills/update-docs/SKILL.md new file mode 100644 index 0000000000..e1407786ab --- /dev/null +++ b/.claude/skills/update-docs/SKILL.md @@ -0,0 +1,91 @@ +--- +name: update-docs +description: Write, refresh, review or restructure Glific user docs in this repo, using screenshots and UI checks from the live (production) Glific app. It drives a read-only, auto-redacting playwright-cli browser. Use for "/update-docs ...", "refresh the X page", "write a new doc for X", "review docs for consistency", "restructure docs with tabs", or any docs change that needs current screenshots or must match the live UI. +argument-hint: +--- + +# update-docs + +Updates the Glific docs in this repo (`glific/docs`, Docusaurus) using the **live production Glific app** as the source of truth. + +The browser is logged in to a **real organisation's production account**. Two rules override everything else in this skill: + +1. **Never change anything in Glific.** Only look and take screenshots. A network guard blocks writes. If the guard trips, **stop at once and warn the user** (see [safety.md](safety.md)). +2. **Never publish an unredacted screenshot.** Take every image with `gdocs shot`. It removes contact data, checks that nothing is left, and records the image so `gdocs lint` can check it later. Then look at each PNG yourself before you use it. + +Users don't need to install anything. The cloud environment provides `node`, `playwright-cli`, Chromium and these env vars: `GLIFIC_URL`, `GLIFIC_PHONE`, `GLIFIC_PASSWORD`, `PLAYWRIGHT_BROWSERS_PATH`. Never print, echo or read the credential values. `gdocs` reads them itself. + +All commands below run from the repo root. `gdocs` is short for `node .claude/skills/update-docs/scripts/gdocs.mjs`. + +## Step 0 — Preflight (always, before anything else) + +```bash +node .claude/skills/update-docs/scripts/gdocs.mjs preflight +``` + +This checks the env vars, `playwright-cli`, the browser launch and the read-only guard. The guard check sends a canary mutation that must be blocked. It also runs a redaction self-test and then logs in to Glific. Only a run that ends with `PREFLIGHT OK` passes. + +- **If any check fails**, stop and show the user the `[FAIL]` lines. Explain the likely cause using [troubleshooting](#troubleshooting). Do not try to install anything, and do not work around the guard. +- For a **docs-only** request that needs no browser (pure review or restructure), you may ask the user whether to continue without the live app. If you do, say in the final summary that nothing was checked against the live UI. + +## Step 1 — Classify the request + +| Intent | Example | Browser? | Read | +|---|---|---|---| +| **Refresh** an existing page | `refresh the analytics page with new navigation tabs` | yes | [workflow-refresh.md](workflow-refresh.md) | +| **New** page | `write a new doc page for HSM v2 page` | yes | [workflow-new.md](workflow-new.md) | +| **Review** a set of pages for consistency | `review document structure for all webhooks and ensure consistency of writing` | optional, for spot-checks | [workflow-review.md](workflow-review.md) | +| **Restructure** (tabs, merges, moves) | `restructure docs with tabs like ...` | optional | [workflow-restructure.md](workflow-restructure.md) | + +If the request mixes intents, do them in this order: review/restructure plan → refresh/new content → screenshots. + +Always read these too: +- [browsing.md](browsing.md): how to drive the session, take screenshots and find your way around Glific. +- [safety.md](safety.md): what is blocked, the stop-and-warn protocol, and redaction limits. +- The house style in the sibling `documentation` skill. It is the single source for docs conventions, so don't duplicate it here: + - `.claude/skills/documentation/sections.md`: which of the 8 sections content belongs in + - `.claude/skills/documentation/style-writing.md`: voice and audience (NGO staff, non-technical) + - `.claude/skills/documentation/style-page.md`: page templates + - `.claude/skills/documentation/style-images.md`: image directories, naming and `/img/` paths + +## Step 2 — Plan, then confirm + +Before you edit files, print a short plan and **wait for the user to confirm**: + +``` +Plan (): +- Pages: docs/
/.md (new | update | move → ) +- Screenshots: static/img//.png (new | replace) — N total +- Live UI checked: +- Out of scope / can't capture: +``` + +## Step 3 — Do the work + +Follow the workflow file for the intent. While you work: + +- After **every** browser action the PostToolUse hook checks the guard. If it reports `READ-ONLY GUARD TRIPPED`, follow the stop-and-warn protocol in [safety.md](safety.md) before you do anything else. +- Never click buttons that save, submit, send, delete, publish, start, import, upload, sync, assign or change state, even though the guard would block them. Open forms and dialogs only to photograph them, then close them with **Cancel**, **Escape** or by going back. +- Write only what you saw in the live app. If the UI and the user's request disagree, ask. + +## Step 4 — Validate and hand off + +```bash +node .claude/skills/update-docs/scripts/gdocs.mjs lint # image provenance + /img refs +node .claude/skills/update-docs/scripts/gdocs.mjs stop # close the browser +``` + +- `lint` must pass. It checks image provenance, `/img/` refs and relative `.md` links in changed pages. A provenance failure means an image was not made by `gdocs shot`. Retake it. +- If `node_modules/` exists, also run `yarn build` to catch MDX errors (broken links are ignored by the site config; `lint` covers them). Otherwise say that CI will run the build. +- Finish with a summary: pages changed, screenshots added or replaced, anything that couldn't be captured and why, and any blocked write attempts (passive ones too). Don't commit or open a PR unless the user asks. + +## Troubleshooting + +| Preflight failure | Likely cause | What to tell the user | +|---|---|---| +| `env — missing …` | Env vars not set in the cloud environment | Add `GLIFIC_URL`, `GLIFIC_PHONE`, `GLIFIC_PASSWORD` to the cloud environment's env settings. | +| `playwright-cli — not on PATH` | Running locally, or the setup script didn't run | Use the cloud environment, or run the env setup script once. | +| `browser launch — … not installed` | `@playwright/cli` and the installed Chromium are different versions | Re-run the environment setup script so both are `@latest` together. | +| `read-only guard — canary … NOT blocked` | Unexpected playwright-cli behaviour | **Do not proceed.** Report it. | +| `login — phone field …` / `page says: …` | Wrong phone format (`91XXXXXXXXXX`), wrong password, or a non-Indian dial code | Check `GLIFIC_PHONE` / `GLIFIC_PASSWORD`. | +| `login — Timeout …waitForURL` | Slow first load or a changed login UI | Retry once with `gdocs start`. If it fails again, report it. | diff --git a/.claude/skills/update-docs/browsing.md b/.claude/skills/update-docs/browsing.md new file mode 100644 index 0000000000..7b02db8136 --- /dev/null +++ b/.claude/skills/update-docs/browsing.md @@ -0,0 +1,67 @@ +# Browsing the live app + +One browser session, `glific-docs`, is opened by `gdocs preflight`/`gdocs start`. It is already logged in, guarded and set to a 1440×900 viewport. Drive it with `playwright-cli -s=glific-docs `. The hook rejects any other session and any command not listed below. + +## Session lifecycle + +```bash +node .claude/skills/update-docs/scripts/gdocs.mjs status # alive + guarded? (exit 1 = no, 3 = guard tripped) +node .claude/skills/update-docs/scripts/gdocs.mjs start # reopen + re-login if the session died (idle 1h) +node .claude/skills/update-docs/scripts/gdocs.mjs stop # at the end +``` + +If a command says the browser `is not open`, run `gdocs start`. Never use `playwright-cli open`. + +## Allowed commands + +| Purpose | Command | +|---|---| +| Navigate | `goto /` (use the literal origin printed by preflight), `go-back`, `go-forward`, `reload` | +| See the page | `snapshot` (accessibility tree with refs such as `e12`, or `f3e12` inside frames), `snapshot `, `find ""` | +| Interact (read-only intent) | `click `, `hover `, `press Escape`, `type`/`fill` **only in search or filter boxes**, `select` on filter dropdowns, `mousewheel 0 600` | +| Inspect | `eval ""` (e.g. `document.title`, `window.scrollTo(0,0)`), `console`, `requests` | +| Tabs | `tab-list`, `tab-new `, `tab-select `, `tab-close ` | +| Wait | `eval "new Promise(r => setTimeout(r, 1500))"`, then `snapshot` again | + +Glific loads data with Apollo after the page renders. After `goto`, check with `snapshot` or `find` that the list or data has loaded before you take a screenshot. + +Snapshot output contains real contact data. Use it to navigate. Don't copy names, numbers or message text into docs, commit messages or replies. + +## Screenshots + +```bash +# full viewport +node .claude/skills/update-docs/scripts/gdocs.mjs shot static/img//_.png + +# cropped to one element (preferred for lists, forms, dialogs, cards) +node .claude/skills/update-docs/scripts/gdocs.mjs shot static/img//_.png --target e42 +node .claude/skills/update-docs/scripts/gdocs.mjs shot static/img//_.png --target '[role="dialog"]' + +# extra redaction for free-text PII the automatic pass can't detect +node .claude/skills/update-docs/scripts/gdocs.mjs shot static/img/flows/flows_list.png --target main --hide 'tbody td:first-child' +``` + +- The output path must be under `static/img/`. Follow the naming and directory rules in `.claude/skills/documentation/style-images.md`. +- Redaction changes the live DOM. After a shot, `reload` before you read real values again. +- When you **replace** an existing image, keep the same filename so links don't break, unless the page is being restructured. +- After every shot, **Read the PNG** and check it: no real names, numbers, message text, emails, keys or org-identifying details, and the right UI state is shown. If anything leaks, retake it with `--hide`/`--mask` or a tighter `--target`. +- `shot` refuses to capture while an unacknowledged guard trip exists. Clear it with the stop-and-warn protocol in `safety.md`. + +## Finding routes and UI + +1. Snapshot the left sidebar after login. The menu items are the feature entry points. +2. If `../glific-frontend/` exists, read `src/routes/AuthenticatedRoute/AuthenticatedRoute.tsx` for the full route list, and `src/containers//` for labels and `data-testid`s. +3. Otherwise read the same files from GitHub without cloning: + ```bash + gh api repos/glific/glific-frontend/contents/src/routes/AuthenticatedRoute/AuthenticatedRoute.tsx --jq .content | base64 -d + ``` +4. For "what changed" questions, check recent merged PRs: `gh pr list --repo glific/glific-frontend --state merged --search "" --limit 10`. + +Common entry routes (check them against the sidebar, they change): `/chat`, `/flow`, `/trigger`, `/speed-send`, `/template`, `/interactive-message`, `/search`, `/collection`, `/contact-management`, `/staff-management`, `/notifications`, `/analytics`, `/settings`. + +## Opening forms safely + +Clicking **Create**/**Add** to photograph an empty form is fine. Then: +- Don't type into form fields, except to show a field's validation or helper text, and then only with obviously fake text such as `Sample template`. +- Leave with **Cancel**, `press Escape` or `go-back`. Never click Save, Submit, Send, Create, Delete, Confirm, Import, Upload, Sync, Start or Publish. +- If a confirmation dialog appears unexpectedly, dismiss it (`press Escape` or click **Cancel**). diff --git a/.claude/skills/update-docs/safety.md b/.claude/skills/update-docs/safety.md new file mode 100644 index 0000000000..2a299354b8 --- /dev/null +++ b/.claude/skills/update-docs/safety.md @@ -0,0 +1,72 @@ +# Safety: read-only browsing and redaction + +The session is logged in to a real organisation's **production** Glific account. Contacts, messages and staff are real people. Every safeguard below fails closed: when in doubt, it blocks or refuses. + +## Layers + +| Layer | Where | What it does | +|---|---|---| +| Network guard | `gdocs.mjs` → `guardCode` (installed on the browser context **before** login) | Blocks every write request. See the rules below. Blocked GraphQL calls get a fake error response. Other blocked calls get a 403. Nothing reaches the server. | +| Canary | `gdocs preflight` / `start` / `status` / `shot` | Sends a fake `mutation DocsGuardCanary`. If it isn't blocked, the session is closed and not used. | +| Command hook (pre) | `.claude/settings.json` → `scripts/pw-guard-hook.sh pre` | Direct `playwright-cli` calls must use `-s=glific-docs` and only an allow-listed set of navigation and inspection commands. It blocks `open`, `run-code`, `unroute`, `screenshot`, `state-save`, cookie and storage access, tracing, video, uploads, and any command that mentions `GLIFIC_PASSWORD`. | +| Guard monitor (post) | `pw-guard-hook.sh post` | After each `glific-docs` command, reads the guard's log. If a non-passive write was blocked, it returns `READ-ONLY GUARD TRIPPED` to you. | +| Redaction | `gdocs shot` | Replaces PII in the DOM of every frame, re-scans what is visible, and refuses to capture if anything phone- or email-like remains. It then masks media and avatars and records the image's SHA-256 in `.playwright-cli/redacted-manifest.json`. | +| Provenance lint | `gdocs lint` | Fails if any new or changed image under `static/img/` isn't in the manifest with a matching hash. | +| Your eyes | You | Read every PNG before you reference it. Regex can't catch names in free text. | + +## Guard rules + +Allowed: +- `GET`, `HEAD` and `OPTIONS`, unless the URL contains a GraphQL `mutation`. +- `POST /api` when **every** operation is a plain `query`. +- Login and session upkeep: `POST /api/v1/session`, `/session/renew`, `/session/name`. +- Analytics embed token: `POST /api/v1/get-embed-token`. Superset (`moonshine.projecttech4dev.org`) chart-data POSTs use a read-only guest token. + +Blocked, and recorded: +- Any GraphQL `mutation` or `subscription` over HTTP, multipart or upload requests, and requests without query text. +- Side-effect queries `flowGet`, `flowRelease`, `simulatorGet` and `simulatorRelease`. They take or release edit locks, so opening the **flow editor** or the **simulator** would lock them for the org's real staff. +- Every other `POST`, `PUT`, `PATCH` or `DELETE` to the Glific host, including logout, the simulator, onboarding and registration (which sends an OTP). +- WebSocket frames that carry a mutation. + +Dropped silently (not recorded): writes to third-party hosts, such as telemetry (PostHog, Sentry). + +**Passive** blocks are fired by the UI on its own, not by something you clicked: `markContactMessagesAsRead` when a chat is opened, `markNotificationAsRead`, and `/session/tracker`. They are blocked and listed, but you don't need to stop for them. Mention them in the final summary. + +## Stop-and-warn protocol + +Do this when `READ-ONLY GUARD TRIPPED` appears (from the hook or from `gdocs blocked`/`shot`/`status`), or when you notice you were about to change data: + +1. **Stop.** Make no more browser calls. +2. Tell the user right away, in this form: + > ⚠️ **Read-only guard tripped.** My last action, ``, tried to `` on the live Glific account. It was blocked and nothing was changed on the server. ``. +3. Run `gdocs blocked` and include its lines. +4. **Wait** for the user to say how to proceed. When they reply, run `gdocs blocked --ack`, reload the page (the UI may now show an error state), and continue without repeating that action. + +Never try to "fix" a trip by changing the guard, the hook, the session or the scripts. Never run `playwright-cli` outside the `glific-docs` session. + +## Things you can't capture on production + +| UI | Why | Do instead | +|---|---|---| +| Flow editor canvas, flow simulator | Opening them takes a server-side lock (`flowGet`, `simulatorGet`) | Keep the existing screenshots, or use `:::info Screenshot coming soon`. Tell the user. | +| Saved or confirmed states ("Template submitted", success toasts) | Would need a write | Describe them in text. Photograph only the form before it is submitted. | +| Contact profiles and chat threads with real conversations | Heavy PII | Prefer list or empty views. If you must, crop tightly with `--target` and check the redaction carefully. | +| Settings → credentials and provider keys | Secrets | Inputs that look like keys are masked automatically. Prefer the list view. | + +## Redaction details and limits + +`gdocs shot` replaces: +- Phone-like numbers (10–15 digits) → `+91 XXXXX XXXXX`; emails → `user@example.org`; long token-like strings → `••••••••`. +- Contact names (chat list, conversation header, profile header, WA group members, sender names) → `Contact Name`; staff name in the user menu → `Staff Member`. +- Table columns headed Name, Contact, Beneficiary, Staff, User, Member, Assigned to or Owner → `Contact 1…n`. +- Message text in chat bubbles and previews → `Sample message text`. +- Input values that look like secrets → `••••••••••`. Other input values are scanned for phones and emails. +- Images, video, stickers, documents, locations and avatars in chats → blurred, and masked in the capture. + +What it **can't** detect on its own: names or personal details written in free text, such as flow names like "Asha's follow-up", collection names, notes, labels, template bodies with real names, and data inside charts. When you see any of these in the PNG: + +```bash +node .claude/skills/update-docs/scripts/gdocs.mjs shot static/img//.png --hide '' +``` + +`--hide` overwrites the text with `████` and blurs images. `--mask` adds an opaque box over an element in the capture. You can repeat either flag. Retake until the image is clean. diff --git a/.claude/skills/update-docs/scripts/cli.config.json b/.claude/skills/update-docs/scripts/cli.config.json new file mode 100644 index 0000000000..ff4e983790 --- /dev/null +++ b/.claude/skills/update-docs/scripts/cli.config.json @@ -0,0 +1,20 @@ +{ + "browser": { + "browserName": "chromium", + "isolated": true, + "launchOptions": { + "headless": true + }, + "contextOptions": { + "viewport": { "width": 1440, "height": 900 }, + "ignoreHTTPSErrors": true, + "locale": "en-US", + "timezoneId": "Asia/Kolkata" + } + }, + "outputDir": ".playwright-cli", + "timeouts": { + "action": 10000, + "navigation": 60000 + } +} diff --git a/.claude/skills/update-docs/scripts/gdocs.mjs b/.claude/skills/update-docs/scripts/gdocs.mjs new file mode 100755 index 0000000000..ac6af462c9 --- /dev/null +++ b/.claude/skills/update-docs/scripts/gdocs.mjs @@ -0,0 +1,818 @@ +#!/usr/bin/env node +/** + * gdocs — read-only, redacting wrapper around `playwright-cli` for the + * update-docs skill. Zero dependencies: Node built-ins + the preinstalled + * `playwright-cli` binary only. + * + * node .claude/skills/update-docs/scripts/gdocs.mjs [args] + * + * Commands: + * preflight Check env, CLI, browser, guard, redaction and login. Run first. + * start Open (or reuse) the guarded, logged-in session. + * status Is the session alive and the guard active? + * shot [--target ] [--mask ]... [--hide ]... + * Redact the page, verify nothing sensitive is left, then screenshot. + * blocked [--ack] Show write attempts the guard blocked (exit 3 if any need attention). + * lint [files...] Check new/changed images came from `shot` and /img refs resolve. + * stop Close the session. + * + * Credentials come from env: GLIFIC_URL, GLIFIC_PHONE, GLIFIC_PASSWORD. + * They are never printed. The agent should never handle them directly. + */ + +import { spawnSync } from 'node:child_process'; +import { createHash, randomBytes } from 'node:crypto'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const SESSION = 'glific-docs'; +const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url)); +const CONFIG = path.join(SCRIPT_DIR, 'cli.config.json'); +const ROOT = findRoot(); +const WORK = path.join(ROOT, '.playwright-cli'); +const TMP = path.join(WORK, 'tmp'); +const MANIFEST = path.join(WORK, 'redacted-manifest.json'); +const MARK = 'GLIFIC_DOCS_READONLY_BLOCKED'; +const GUARD_COOKIE_URL = 'https://docs-guard.invalid'; + +// Hosts the Glific UI legitimately POSTs to for *reads*. Superset (Analytics +// page) runs with a read-only guest token and fetches chart data via POST. +const READ_ONLY_POST_HOSTS = ['moonshine.projecttech4dev.org']; + +function findRoot() { + const r = spawnSync('git', ['rev-parse', '--show-toplevel'], { encoding: 'utf8' }); + return r.status === 0 ? r.stdout.trim() : process.cwd(); +} + +// --------------------------------------------------------------------------- +// playwright-cli plumbing +// --------------------------------------------------------------------------- + +function cli(args, { quiet = false, timeout = 180000 } = {}) { + const r = spawnSync('playwright-cli', [`-s=${SESSION}`, ...args], { + cwd: ROOT, + encoding: 'utf8', + timeout, + env: process.env, + }); + const out = `${r.stdout || ''}${r.stderr || ''}`; + if (!quiet) process.stdout.write(scrub(out)); + return { status: r.status, out, error: r.error }; +} + +// Runs a Playwright function in the session. The code is written to a private +// temp file and the CLI echo (which repeats the code) is never printed, so +// credentials embedded in the code don't leak into the transcript. +function runCode(code) { + fs.mkdirSync(TMP, { recursive: true, mode: 0o700 }); + const file = path.join(TMP, `rc-${randomBytes(6).toString('hex')}.js`); + fs.writeFileSync(file, code, { mode: 0o600 }); + try { + const rel = path.relative(ROOT, file); + const { out, status } = cli(['run-code', `--filename=${rel}`], { quiet: true }); + return { raw: out, status, result: parseResult(out) }; + } finally { + fs.rmSync(file, { force: true }); + } +} + +function parseResult(out) { + const m = out.match(/### Result\s*\n([\s\S]*?)(?:\n###|$)/); + if (!m) return null; + let v = m[1].trim(); + for (let i = 0; i < 2 && typeof v === 'string'; i += 1) { + try { v = JSON.parse(v); } catch { break; } + } + return v; +} + +function scrub(text) { + let t = String(text); + for (const key of ['GLIFIC_PASSWORD', 'GLIFIC_PHONE']) { + const val = process.env[key]; + if (val && val.length >= 4) t = t.split(val).join(`<${key}>`); + } + return t; +} + +function sessionAlive() { + const { out, status } = cli(['eval', '1'], { quiet: true, timeout: 30000 }); + return status === 0 && !/is not open/.test(out); +} + +// --------------------------------------------------------------------------- +// Env +// --------------------------------------------------------------------------- + +function env() { + const url = (process.env.GLIFIC_URL || '').trim().replace(/\/+$/, ''); + const phone = (process.env.GLIFIC_PHONE || '').replace(/\D/g, ''); + const password = process.env.GLIFIC_PASSWORD || ''; + return { url, phone, password }; +} + +function hostOf(url) { + try { return new URL(url).hostname; } catch { return ''; } +} + +// --------------------------------------------------------------------------- +// In-browser code (serialised into run-code snippets) +// --------------------------------------------------------------------------- + +function guardCode(glificHost) { + return `async page => { + const ctx = page.context(); + const MARK = ${JSON.stringify(MARK)}; + const GLIFIC_HOST = ${JSON.stringify(glificHost)}; + const COOKIE_URL = ${JSON.stringify(GUARD_COOKIE_URL)}; + const READ_ONLY_POST_HOSTS = ${JSON.stringify(READ_ONLY_POST_HOSTS)}; + const SAFE_METHODS = ['GET', 'HEAD', 'OPTIONS']; + // REST endpoints that only authenticate or read. + const ALLOWED_POST_PATHS = [/^\\/api\\/v1\\/session\\/?$/, /^\\/api\\/v1\\/session\\/renew\\/?$/, + /^\\/api\\/v1\\/session\\/name\\/?$/, /^\\/api\\/v1\\/get-embed-token\\/?$/]; + // Fired automatically by the UI; still blocked, but not a reason to stop. + const PASSIVE = [/^\\/api\\/v1\\/session\\/tracker/, /\\bmarkContactMessagesAsRead\\b/, /\\bmarkNotificationAsRead\\b/]; + // Queries with server-side side effects (they take or release edit locks). + const LOCKING_FIELDS = /\\b(flowGet|flowRelease|simulatorGet|simulatorRelease)\\b/; + + const isGlific = h => !!GLIFIC_HOST && (h === GLIFIC_HOST || h.endsWith('.' + GLIFIC_HOST)); + + const gqlVerdict = body => { + let payload; + try { payload = JSON.parse(body); } catch { return 'unparseable GraphQL body'; } + for (const op of Array.isArray(payload) ? payload : [payload]) { + if (!op || typeof op.query !== 'string') return 'GraphQL request without query text'; + const q = op.query.replace(/#[^\\n]*/g, ''); + if (/\\bmutation\\b/.test(q)) return 'GraphQL mutation ' + (op.operationName || (q.match(/mutation\\s+(\\w+)/) || [])[1] || ''); + if (/\\bsubscription\\b/.test(q)) return 'GraphQL subscription over HTTP'; + const lock = q.match(LOCKING_FIELDS); + if (lock) return 'side-effect query ' + lock[1] + ' (takes/releases an edit lock)'; + } + return null; + }; + + const record = async (why, req) => { + const body = req.postData() || ''; + if (body.includes('DocsGuardCanary')) return; + const u = new URL(req.url()); + const passive = PASSIVE.some(r => r.test(u.pathname) || r.test(body)); + const entry = { at: new Date().toISOString(), method: req.method(), host: u.hostname, path: u.pathname, why, passive }; + try { + const prev = (await ctx.cookies(COOKIE_URL)).find(c => c.name === 'blocked'); + let list = prev ? JSON.parse(decodeURIComponent(prev.value)) : []; + list.push(entry); + list = list.slice(-8); + await ctx.addCookies([{ name: 'blocked', value: encodeURIComponent(JSON.stringify(list)), url: COOKIE_URL }]); + } catch (e) {} + }; + + await ctx.route('**/*', async route => { + const req = route.request(); + const method = req.method().toUpperCase(); + let u; + try { u = new URL(req.url()); } catch { return route.fallback(); } + if (!/^https?:$/.test(u.protocol)) return route.fallback(); + + let why = null; + if (SAFE_METHODS.includes(method)) { + let search = u.search; + try { search = decodeURIComponent(search); } catch (e) {} + if (/\\bmutation\\b/.test(search)) why = 'GraphQL mutation via GET'; + } else if (READ_ONLY_POST_HOSTS.includes(u.hostname)) { + why = null; + } else if (!isGlific(u.hostname)) { + // Third-party writes (telemetry, CDNs). Drop quietly. + return route.fulfill({ status: 204, headers: { 'access-control-allow-origin': req.headers()['origin'] || '*' } }); + } else if (method === 'POST' && ALLOWED_POST_PATHS.some(r => r.test(u.pathname))) { + why = null; + } else if (method === 'POST' && /^\\/api\\/?$/.test(u.pathname)) { + const ct = req.headers()['content-type'] || ''; + why = ct.includes('json') ? gqlVerdict(req.postData() || '') : 'non-JSON GraphQL request (file upload?)'; + } else { + why = method + ' ' + u.pathname + ' is a write'; + } + if (!why) return route.fallback(); + + await record(why, req); + const origin = req.headers()['origin']; + const headers = { 'content-type': 'application/json', 'access-control-allow-origin': origin || '*' }; + if (origin) headers['access-control-allow-credentials'] = 'true'; + const message = MARK + ': ' + why + ' — blocked by the docs skill (read-only mode)'; + if (/^\\/api\\/?$/.test(u.pathname)) { + return route.fulfill({ status: 200, headers, body: JSON.stringify({ data: null, errors: [{ message }] }) }); + } + return route.fulfill({ status: 403, headers, body: JSON.stringify({ error: message }) }); + }); + + // Absinthe socket carries subscriptions only; drop anything else that looks like a write. + try { + await ctx.routeWebSocket(/\\/socket\\//, ws => { + const server = ws.connectToServer(); + ws.onMessage(msg => { + const text = typeof msg === 'string' ? msg : ''; + if (/\\bmutation\\b/.test(text) || LOCKING_FIELDS.test(text)) return; + server.send(msg); + }); + }); + } catch (e) {} + + return 'GUARD_INSTALLED'; +}`; +} + +function canaryCode(target) { + return `async page => { + const res = await page.evaluate(async url => { + try { + const r = await fetch(url, { method: 'POST', headers: { 'content-type': 'text/plain' }, + body: JSON.stringify({ query: 'mutation DocsGuardCanary { __typename }' }) }); + return await r.text(); + } catch (e) { return 'FETCH_ERROR ' + e.message; } + }, ${JSON.stringify(target)}); + return res.includes(${JSON.stringify(MARK)}) ? 'GUARD_OK' : 'GUARD_MISSING'; +}`; +} + +function loginCode({ url, phone, password }) { + const local = phone.slice(-10); + const dial = phone.slice(0, -10) || '91'; + return `async page => { + const BASE = ${JSON.stringify(url)}; + const LOCAL = ${JSON.stringify(local)}; + const DIAL = ${JSON.stringify(dial)}; + const PASSWORD = ${JSON.stringify(password)}; + let last = ''; + for (let attempt = 1; attempt <= 3; attempt += 1) { + try { + await page.goto(BASE + '/login', { waitUntil: 'domcontentloaded' }); + await page.waitForTimeout(1500); + if (new URL(page.url()).pathname.startsWith('/chat')) return JSON.stringify({ ok: true, already: true }); + await page.waitForSelector('[data-testid="AuthContainer"]', { timeout: 20000 }); + const phone = page.locator('input[name="phoneNumber"]'); + await phone.waitFor({ state: 'visible' }); + // PhoneInput prepends the dial code after mount; type the local part after it. + await page.waitForFunction(() => { + const el = document.querySelector('input[name="phoneNumber"]'); + return !!el && /^\\+\\d/.test(el.value); + }, null, { timeout: 10000 }); + await phone.click(); + await phone.press('End'); + await phone.pressSequentially(LOCAL); + if ((await phone.inputValue()).replace(/\\D/g, '') !== DIAL + LOCAL) throw new Error('phone field did not accept GLIFIC_PHONE'); + await page.fill('input[name="password"]', PASSWORD); + await page.click('[data-testid="SubmitButton"]'); + await page.waitForURL(u => u.pathname.startsWith('/chat'), { timeout: 45000 }); + return JSON.stringify({ ok: true, attempt }); + } catch (e) { + last = String((e && e.message) || e).split(PASSWORD).join('***').split(LOCAL).join('***'); + } + } + let onPage = ''; + try { onPage = (await page.locator('[data-testid="AuthContainer"]').innerText()).slice(0, 300); } catch (e) {} + return JSON.stringify({ ok: false, error: last.slice(0, 400), page: onPage.split(LOCAL).join('***') }); +}`; +} + +// Runs inside every frame. Replaces PII in place; returns counts. +function redactInFrame(opts) { + const counts = { phone: 0, email: 0, secret: 0, name: 0, message: 0, input: 0, masked: 0, media: 0 }; + const PHONE_RE = /(? s.replace(/\D/g, '').length; + const scrubText = s => { + let out = s.replace(EMAIL_RE, m => { + if (m === 'user@example.org') return m; + counts.email += 1; + return 'user@example.org'; + }); + out = out.replace(PHONE_RE, m => { + const n = digits(m); + if (n < 10 || n > 15) return m; + counts.phone += 1; + return '+91 XXXXX XXXXX'; + }); + out = out.replace(SECRET_RE, () => { counts.secret += 1; return '••••••••'; }); + return out; + }; + const textNodes = root => { + const w = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { + acceptNode: n => (n.nodeValue && n.nodeValue.trim() ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT), + }); + const list = []; + while (w.nextNode()) list.push(w.currentNode); + return list; + }; + const relabel = (el, label, key) => { + const nodes = textNodes(el); + // Compare text, not a marker: React may re-render the node with the real value. + if (!nodes.length || nodes[0].nodeValue === label) return; + nodes[0].nodeValue = label; + for (const n of nodes.slice(1)) n.nodeValue = scrubText(n.nodeValue); + counts[key] += 1; + }; + const q = sel => { try { return Array.from(document.querySelectorAll(sel)); } catch (e) { return []; } }; + + if (!document.body) return counts; + + for (const sel of NAME_SELECTORS) q(sel).forEach(el => relabel(el, 'Contact Name', 'name')); + for (const sel of STAFF_SELECTORS) q(sel).forEach(el => relabel(el, 'Staff Member', 'name')); + for (const sel of MESSAGE_SELECTORS) q(sel).forEach(el => relabel(el, 'Sample message text', 'message')); + + // Name-like table columns. + for (const table of q('table')) { + const heads = Array.from(table.querySelectorAll('thead th, thead td')); + heads.forEach((th, idx) => { + if (!NAME_HEADERS.test((th.innerText || '').trim())) return; + table.querySelectorAll('tbody tr').forEach((tr, i) => { + const cell = tr.children[idx]; + if (cell) relabel(cell, `Contact ${i + 1}`, 'name'); + }); + }); + } + + for (const n of textNodes(document.body)) { + const next = scrubText(n.nodeValue); + if (next !== n.nodeValue) n.nodeValue = next; + } + + const setValue = (el, v) => { + const proto = el instanceof HTMLTextAreaElement ? HTMLTextAreaElement.prototype : HTMLInputElement.prototype; + const setter = Object.getOwnPropertyDescriptor(proto, 'value').set; + setter.call(el, v); + }; + for (const el of q('input, textarea')) { + if (!el.value) continue; + const hint = [el.type, el.name, el.id, el.placeholder, el.getAttribute('aria-label')].join(' '); + if (el.type === 'password' || SENSITIVE_INPUT.test(hint)) { + if (el.type !== 'password') setValue(el, '••••••••••'); + counts.input += 1; + continue; + } + const next = scrubText(el.value); + if (next !== el.value) { setValue(el, next); counts.input += 1; } + } + + for (const sel of MEDIA_SELECTORS) { + q(sel).forEach(el => { el.style.filter = 'blur(14px)'; counts.media += 1; }); + } + for (const sel of opts.hide || []) { + q(sel).forEach(el => { + textNodes(el).forEach(n => { n.nodeValue = '█'.repeat(Math.min(12, Math.max(4, n.nodeValue.trim().length))); }); + el.querySelectorAll('img, video, canvas, svg').forEach(m => { m.style.filter = 'blur(14px)'; }); + counts.masked += 1; + }); + } + return counts; +} + +// Runs inside every frame after redaction. Returns leak descriptions (never the values). +function verifyInFrame(opts) { + const PHONE_RE = /(? { + if (!el) return false; + const r = el.getBoundingClientRect(); + if (!r.width || !r.height) return false; + if (!clip) return true; + return r.right > clip.x && r.left < clip.x + clip.width && r.bottom > clip.y && r.top < clip.y + clip.height; + }; + const where = el => { + const t = el.closest('[data-testid]'); + return t ? `[data-testid="${t.dataset.testid}"]` : el.tagName.toLowerCase(); + }; + const check = (text, el) => { + if (!text || !visible(el)) return; + if ((text.match(EMAIL_RE) || []).some(m => m !== 'user@example.org')) leaks.push({ kind: 'email', where: where(el) }); + for (const m of text.match(PHONE_RE) || []) { + const n = m.replace(/\D/g, '').length; + if (n >= 10 && n <= 15) { leaks.push({ kind: 'phone', where: where(el) }); break; } + } + }; + const w = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT); + while (w.nextNode()) check(w.currentNode.nodeValue, w.currentNode.parentElement); + document.querySelectorAll('input, textarea').forEach(el => { + if (el.type !== 'password') check(el.value, el); + }); + return leaks.slice(0, 10); +} + +function shotCode({ out, target, hide, masks }) { + const MEDIA = [ + '[data-testid="imageMessage"]', '[data-testid="videoMessage"]', '[data-testid="stickerMessage"]', + '[data-testid="documentMessage"]', '[data-testid="locationMessage"]', '.MuiAvatar-root', + ]; + return `async page => { + const OUT = ${JSON.stringify(out)}; + const TARGET = ${JSON.stringify(target || null)}; + const HIDE = ${JSON.stringify(hide)}; + const MASKS = ${JSON.stringify([...masks, ...MEDIA])}; + const redact = ${redactInFrame.toString()}; + const verify = ${verifyInFrame.toString()}; + + const loc = TARGET ? page.locator(/^(f\\d+)?e\\d+$/.test(TARGET) ? 'aria-ref=' + TARGET : TARGET).first() : null; + let clip = null; + if (loc) { + await loc.scrollIntoViewIfNeeded(); + clip = await loc.boundingBox(); + if (!clip) return JSON.stringify({ ok: false, error: 'target not visible: ' + TARGET }); + } + await page.waitForTimeout(300); + + const counts = {}; + const errors = []; + for (let pass = 0; pass < 2; pass += 1) { + for (const f of page.frames()) { + try { + const c = await f.evaluate(redact, { hide: HIDE }); + for (const [k, v] of Object.entries(c)) counts[k] = (counts[k] || 0) + (pass === 0 ? v : 0); + } catch (e) { + if (pass === 1 && f.url() !== 'about:blank') errors.push('could not redact frame ' + new URL(f.url()).host); + } + } + await page.waitForTimeout(150); + } + if (errors.length) return JSON.stringify({ ok: false, error: errors.join('; ') }); + + const leaks = []; + for (const f of page.frames()) { + try { + const l = await f.evaluate(verify, { isMain: f === page.mainFrame(), clip }); + leaks.push(...l); + } catch (e) {} + } + if (leaks.length) return JSON.stringify({ ok: false, error: 'sensitive data still visible after redaction', leaks }); + + const mask = MASKS.map(s => page.locator(s)); + const opts = { path: OUT, animations: 'disabled', caret: 'hide', mask, maskColor: '#C9CED6' }; + if (loc) await loc.screenshot(opts); + else await page.screenshot(opts); + return JSON.stringify({ ok: true, counts, url: new URL(page.url()).pathname }); +}`; +} + +const readBlockedCode = `async page => { + const c = (await page.context().cookies(${JSON.stringify(GUARD_COOKIE_URL)})).find(x => x.name === 'blocked'); + return c ? decodeURIComponent(c.value) : '[]'; +}`; + +const ackBlockedCode = `async page => { + await page.context().clearCookies({ name: 'blocked', domain: 'docs-guard.invalid' }); + return 'ACKED'; +}`; + +const REDACTION_FIXTURE = ` +
Asha Kumari
My son's results came today
+

Call +91 98765 43210 or 919876543210 or email asha.k@example.com

+

Token docsfixture9aB3xY7qLmN2pQ4rS6tU8vW0

+
NamePhone
Ravi Patel+91-99887-66554
+ +

Date 2026-10-10, count 12345, flow id 42

+`; + +function redactionSelfTestCode() { + return `async page => { + const redact = ${redactInFrame.toString()}; + const verify = ${verifyInFrame.toString()}; + await page.setContent(${JSON.stringify(REDACTION_FIXTURE)}); + await page.evaluate(redact, { hide: [] }); + const leaks = await page.evaluate(verify, { isMain: true, clip: null }); + const text = await page.evaluate(() => document.body.innerText + ' ' + Array.from(document.querySelectorAll('input')).map(i => i.value).join(' ')); + const survivors = ['Asha', 'Ravi', 'results', '98765', '99887', 'docsfixture', 'abcdef123456', '9123456780'].filter(s => text.includes(s)); + const keptBenign = ['2026-10-10', '12345', 'flow id 42'].every(s => text.includes(s)); + await page.goto('about:blank'); + return JSON.stringify({ ok: !leaks.length && !survivors.length && keptBenign, leaks, survivors, keptBenign }); +}`; +} + +// --------------------------------------------------------------------------- +// Commands +// --------------------------------------------------------------------------- + +function line(ok, label, detail = '') { + const tag = ok === true ? 'PASS' : ok === false ? 'FAIL' : 'INFO'; + console.log(`[${tag}] ${label}${detail ? ` — ${detail}` : ''}`); +} + +function openSession() { + const { status, out } = cli(['open', `--config=${path.relative(ROOT, CONFIG)}`, 'about:blank'], { quiet: true }); + if (status !== 0) { + const reason = scrub(out).split('\n').find(l => /Error|not installed|not found/i.test(l)) || 'unknown error'; + return { ok: false, reason: reason.trim() }; + } + return { ok: true }; +} + +function installGuard(host) { + const g = runCode(guardCode(host)); + return g.result === 'GUARD_INSTALLED'; +} + +function canary(url) { + return runCode(canaryCode(`${url}/api`)).result === 'GUARD_OK'; +} + +function login(e) { + const r = runCode(loginCode(e)); + const res = r.result && typeof r.result === 'object' ? r.result : { ok: false, error: scrub(r.raw).slice(-400) }; + return res; +} + +// Opens a fresh guarded session, or validates an existing one. Never leaves an +// unguarded session running. +function start({ verbose = true } = {}) { + const e = env(); + if (!e.url || !e.phone || !e.password) { + line(false, 'env', 'GLIFIC_URL, GLIFIC_PHONE and GLIFIC_PASSWORD must all be set'); + return false; + } + const host = hostOf(e.url); + + if (sessionAlive()) { + if (canary(e.url)) { + if (verbose) line(true, 'session', `reusing guarded session "${SESSION}"`); + return true; + } + line(null, 'session', 'existing session has no guard — closing it'); + cli(['close'], { quiet: true }); + } + + const o = openSession(); + if (!o.ok) { line(false, 'browser launch', o.reason); return false; } + if (!installGuard(host) || !canary(e.url)) { + line(false, 'read-only guard', 'could not install/verify — closing session'); + cli(['close'], { quiet: true }); + return false; + } + if (verbose) line(true, 'read-only guard', 'installed before any page load'); + + const res = login(e); + if (!res.ok) { + line(false, 'login', `${res.error || 'failed'}${res.page ? ` | page says: ${res.page.replace(/\s+/g, ' ')}` : ''}`); + return false; + } + if (!canary(e.url)) { + line(false, 'read-only guard', 'not active after login — closing session'); + cli(['close'], { quiet: true }); + return false; + } + if (verbose) line(true, 'login', `signed in to ${host}`); + return true; +} + +function preflight() { + console.log('update-docs preflight\n'); + let ok = true; + + const node = process.versions.node; + line(Number(node.split('.')[0]) >= 18, 'node', node); + + const e = env(); + const missing = ['GLIFIC_URL', 'GLIFIC_PHONE', 'GLIFIC_PASSWORD'].filter(k => !process.env[k]); + if (missing.length) { line(false, 'env', `missing ${missing.join(', ')}`); ok = false; } + else line(true, 'env', `GLIFIC_URL=${e.url}, phone ends ••${e.phone.slice(-2)}, password set`); + if (e.url && !/^https?:\/\/[^/]+$/.test(e.url)) { line(false, 'GLIFIC_URL', 'must be an origin like https://org.glific.com'); ok = false; } + if (e.phone && (e.phone.length < 10 || e.phone.length > 13)) { line(false, 'GLIFIC_PHONE', 'expected 10–13 digits, e.g. 91XXXXXXXXXX'); ok = false; } + + const v = spawnSync('playwright-cli', ['--version'], { encoding: 'utf8' }); + if (v.error || v.status !== 0) { + line(false, 'playwright-cli', 'not on PATH — this skill needs the cloud environment with @playwright/cli preinstalled'); + ok = false; + } else line(true, 'playwright-cli', v.stdout.trim()); + line(null, 'PLAYWRIGHT_BROWSERS_PATH', process.env.PLAYWRIGHT_BROWSERS_PATH || '(default cache)'); + + if (!ok) { console.log('\nPREFLIGHT FAILED'); return 1; } + + // Fresh session so every check runs against a clean browser. + if (sessionAlive()) cli(['close'], { quiet: true }); + const o = openSession(); + if (!o.ok) { + line(false, 'browser launch', o.reason); + console.log('\nPREFLIGHT FAILED'); + return 1; + } + line(true, 'browser launch', 'chromium headless'); + + if (!installGuard(hostOf(e.url)) || !canary(e.url)) { + line(false, 'read-only guard', 'canary mutation was NOT blocked'); + cli(['close'], { quiet: true }); + console.log('\nPREFLIGHT FAILED'); + return 1; + } + line(true, 'read-only guard', 'canary mutation blocked'); + + const st = runCode(redactionSelfTestCode()).result; + if (!st || !st.ok) { + line(false, 'redaction self-test', JSON.stringify(st)); + cli(['close'], { quiet: true }); + console.log('\nPREFLIGHT FAILED'); + return 1; + } + line(true, 'redaction self-test', 'phones, emails, names, messages, secrets removed'); + + const res = login(e); + if (!res.ok) { + line(false, 'login', `${res.error || 'failed'}${res.page ? ` | page says: ${res.page.replace(/\s+/g, ' ')}` : ''}`); + console.log('\nPREFLIGHT FAILED'); + return 1; + } + line(true, 'login', `signed in to ${hostOf(e.url)}`); + + if (!canary(e.url)) { + line(false, 'read-only guard', 'not active after login'); + cli(['close'], { quiet: true }); + console.log('\nPREFLIGHT FAILED'); + return 1; + } + line(true, 'read-only guard', 'still active after login'); + runCode(ackBlockedCode); + console.log(`\nPREFLIGHT OK — session "${SESSION}" is open, logged in, read-only.`); + return 0; +} + +function status() { + const e = env(); + if (!sessionAlive()) { line(false, 'session', 'not open — run `gdocs start`'); return 1; } + if (!canary(e.url)) { line(false, 'read-only guard', 'MISSING — run `gdocs stop` then `gdocs start`'); return 1; } + line(true, 'session', 'open and guarded'); + return blocked([]) === 3 ? 3 : 0; +} + +function readBlocked() { + const r = runCode(readBlockedCode).result; + try { return Array.isArray(r) ? r : JSON.parse(r || '[]'); } catch { return []; } +} + +function blocked(args) { + if (!sessionAlive()) { line(null, 'blocked', 'session not open'); return 0; } + const list = readBlocked(); + if (args.includes('--ack')) { runCode(ackBlockedCode); line(null, 'blocked', `cleared ${list.length} entr${list.length === 1 ? 'y' : 'ies'}`); return 0; } + if (!list.length) { if (!args.includes('--quiet')) line(true, 'blocked', 'no write attempts'); return 0; } + const active = list.filter(b => !b.passive); + for (const b of list) { + console.log(`${b.passive ? ' passive' : ' STOP '} ${b.at} ${b.method} ${b.host}${b.path} — ${b.why}`); + } + if (active.length) { + console.log(`\nREAD-ONLY GUARD TRIPPED: ${active.length} write attempt(s) were blocked.\n` + + 'STOP. Tell the user which action caused this, then wait for their go-ahead.\n' + + 'After reporting, clear with: gdocs blocked --ack'); + return 3; + } + if (!args.includes('--quiet')) line(null, 'blocked', 'only passive background writes (blocked, safe to continue)'); + return 0; +} + +function parseFlags(args) { + const pos = []; + const flags = { hide: [], masks: [], target: null }; + for (let i = 0; i < args.length; i += 1) { + const a = args[i]; + const needsValue = ['--target', '--hide', '--mask'].includes(a); + if (needsValue && (i + 1 >= args.length || !args[i + 1])) throw new Error(`${a} needs a value`); + if (a === '--target') flags.target = args[++i]; + else if (a === '--hide') flags.hide.push(args[++i]); + else if (a === '--mask') flags.masks.push(args[++i]); + else pos.push(a); + } + return { pos, flags }; +} + +function shot(args) { + const { pos, flags } = parseFlags(args); + const outArg = pos[0]; + if (!outArg || !outArg.endsWith('.png')) { console.error('usage: gdocs shot [--target ] [--mask ] [--hide ]'); return 2; } + const out = path.resolve(ROOT, outArg); + if (!out.startsWith(path.join(ROOT, 'static', 'img') + path.sep)) { + console.error('screenshots must be written under static/img/'); + return 2; + } + if (!sessionAlive() || !canary(env().url)) { line(false, 'session', 'not open or not guarded — run `gdocs start`'); return 1; } + if (blocked(['--quiet']) === 3) return 3; + + fs.mkdirSync(path.dirname(out), { recursive: true }); + const r = runCode(shotCode({ out, target: flags.target, hide: flags.hide, masks: flags.masks })); + const res = r.result; + if (!res || typeof res !== 'object' || !res.ok) { + fs.rmSync(out, { force: true }); + line(false, 'shot', res && res.error ? res.error : scrub(r.raw).slice(-500)); + if (res && res.leaks) { + for (const l of res.leaks) console.log(` leak: ${l.kind} in ${l.where}`); + console.log('Add --hide "" for that area (or --target a tighter element) and retry.'); + } + return 1; + } + if (!fs.existsSync(out)) { line(false, 'shot', 'screenshot file not written'); return 1; } + + const sha = createHash('sha256').update(fs.readFileSync(out)).digest('hex'); + const manifest = fs.existsSync(MANIFEST) ? JSON.parse(fs.readFileSync(MANIFEST, 'utf8')) : {}; + manifest[path.relative(ROOT, out)] = { sha256: sha, at: new Date().toISOString(), url: res.url, counts: res.counts }; + fs.writeFileSync(MANIFEST, JSON.stringify(manifest, null, 2)); + + const c = Object.entries(res.counts || {}).filter(([, v]) => v).map(([k, v]) => `${k}:${v}`).join(' '); + line(true, 'shot', `${path.relative(ROOT, out)} (redacted ${c || 'nothing'})`); + console.log('Now open the PNG with the Read tool and visually confirm no names, numbers or message text remain.'); + return 0; +} + +function gitLines(args) { + const r = spawnSync('git', args, { cwd: ROOT, encoding: 'utf8' }); + return r.status === 0 ? r.stdout.split('\n').filter(Boolean) : []; +} + +function lint(files) { + let ok = true; + const changed = new Set([ + ...gitLines(['diff', '--name-only', '--diff-filter=AM', 'main...HEAD']), + ...gitLines(['diff', '--name-only', '--diff-filter=AM']), + ...gitLines(['diff', '--name-only', '--cached', '--diff-filter=AM']), + ...gitLines(['ls-files', '--others', '--exclude-standard']), + ]); + const manifest = fs.existsSync(MANIFEST) ? JSON.parse(fs.readFileSync(MANIFEST, 'utf8')) : {}; + + for (const f of changed) { + if (!/^static\/img\/.*\.(png|jpe?g|gif|webp)$/i.test(f)) continue; + const abs = path.join(ROOT, f); + if (!fs.existsSync(abs)) continue; + const sha = createHash('sha256').update(fs.readFileSync(abs)).digest('hex'); + if (!manifest[f] || manifest[f].sha256 !== sha) { + line(false, 'image provenance', `${f} was not produced by \`gdocs shot\` (unredacted?)`); + ok = false; + } + } + + const docs = files.length ? files : [...changed].filter(f => /^docs\/.*\.mdx?$/.test(f)); + for (const f of docs) { + const abs = path.resolve(ROOT, f); + if (!fs.existsSync(abs)) continue; + const text = fs.readFileSync(abs, 'utf8'); + for (const m of text.matchAll(/\]\((\/img\/[^)\s]+)\)|src=["'](\/img\/[^"']+)["']/g)) { + const ref = decodeURI(m[1] || m[2]); + if (!fs.existsSync(path.join(ROOT, 'static', ref))) { + line(false, 'image ref', `${f} → ${ref} does not exist`); + ok = false; + } + } + // onBrokenLinks is "ignore" in docusaurus.config.js, so the build won't catch these. + for (const m of text.matchAll(/\]\(((?!https?:|mailto:|#|\/)[^)\s]+?\.mdx?)(#[^)\s]*)?\)/g)) { + let target; + try { target = decodeURIComponent(m[1]); } catch { target = m[1]; } + if (!fs.existsSync(path.resolve(path.dirname(abs), target))) { + line(false, 'doc link', `${f} → ${m[1]} does not exist`); + ok = false; + } + } + if (/static\/img\//.test(text)) { line(false, 'image path', `${f} uses static/img/ — use /img/`); ok = false; } + if (/user-images\.githubusercontent\.com/.test(text) && changed.has(f) && !gitLines(['ls-files', f]).length) { + line(false, 'image host', `${f} is new but uses GitHub CDN images`); + ok = false; + } + } + if (ok) line(true, 'lint', `${docs.length} doc(s) checked`); + return ok ? 0 : 1; +} + +const [cmd, ...args] = process.argv.slice(2); +let code = 0; +try { +switch (cmd) { + case 'preflight': code = preflight(); break; + case 'start': code = start() ? 0 : 1; break; + case 'status': code = status(); break; + case 'shot': code = shot(args); break; + case 'blocked': code = blocked(args); break; + case 'lint': code = lint(args); break; + case 'stop': cli(['close'], { quiet: true }); line(null, 'session', 'closed'); break; + default: + console.log('usage: gdocs '); + code = cmd ? 2 : 0; +} +} catch (err) { + console.error(`gdocs ${cmd}: ${scrub(err.message)}`); + code = 2; +} +process.exit(code); diff --git a/.claude/skills/update-docs/scripts/pw-guard-hook.sh b/.claude/skills/update-docs/scripts/pw-guard-hook.sh new file mode 100755 index 0000000000..1254a238d9 --- /dev/null +++ b/.claude/skills/update-docs/scripts/pw-guard-hook.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +# Claude Code Bash hook for the update-docs skill (wired in .claude/settings.json). +# +# pre — PreToolUse: direct `playwright-cli` calls may only target the guarded +# "glific-docs" session and only use navigation/inspection commands. +# Everything that could open an unguarded browser, drop the guard, +# bypass redaction or leak tokens must go through gdocs.mjs. +# post — PostToolUse: after any glific-docs browser command, check whether the +# read-only guard blocked a write and, if so, tell Claude to stop. +# +# Exit 2 = block (pre) / feed stderr back to Claude (post). Anything else = allow. +# Must never break unrelated Bash calls, so every failure path exits 0. + +mode="${1:-pre}" +input="$(cat)" + +# Cheap filter: almost every Bash call ends here. +case "$input" in + *playwright-cli*|*GLIFIC_PASSWORD*) ;; + *) exit 0 ;; +esac + +cmd="$(printf '%s' "$input" | python3 -c 'import json,sys; print(json.load(sys.stdin).get("tool_input",{}).get("command",""))' 2>/dev/null)" \ + || cmd="$(printf '%s' "$input" | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{try{console.log(JSON.parse(s).tool_input.command||"")}catch{}})' 2>/dev/null)" \ + || cmd="$input" + +session="glific-docs" +allowed=" goto click dblclick hover snapshot find eval press type fill select check uncheck go-back go-forward reload resize tab-list tab-new tab-select tab-close console requests mousewheel mousemove generate-locator highlight dialog-dismiss set-color-scheme clear-color-scheme close list " + +deny() { + echo "update-docs guard: $1" >&2 + echo "Use: node .claude/skills/update-docs/scripts/gdocs.mjs " >&2 + exit 2 +} + +if [ "$mode" = "pre" ]; then + case "$cmd" in + *GLIFIC_PASSWORD*) deny "commands must not reference GLIFIC_PASSWORD; gdocs.mjs reads credentials itself." ;; + esac + + while IFS= read -r inv; do + [ -z "$inv" ] && continue + set -f + # shellcheck disable=SC2086 + set -- $inv + shift # drop "playwright-cli" + sess="" + sub="" + for tok in "$@"; do + case "$tok" in + -s=*) sess="${tok#-s=}" ;; + --session=*) sess="${tok#--session=}" ;; + --version|--help|-h) [ -z "$sub" ] && sub="$tok" ;; + -*) ;; + *) [ -z "$sub" ] && sub="$tok" ;; + esac + done + sess="${sess//\"/}"; sess="${sess//\'/}" + case "$sub" in ""|--version|--help|-h|list) continue ;; esac + [ "$sess" = "$session" ] || deny "playwright-cli must use -s=$session (the only read-only, guarded session). Got: '${sess:-default}'." + case "$allowed" in *" $sub "*) continue ;; esac + case "$sub" in + screenshot|pdf|video-*|tracing-*) deny "'$sub' is not allowed directly — use 'gdocs.mjs shot' so images are redacted." ;; + open|attach) deny "'$sub' would create an unguarded browser — use 'gdocs.mjs start'." ;; + *) deny "'playwright-cli $sub' is not allowed in the docs session (it can bypass the read-only guard or expose credentials)." ;; + esac + # Only invocations in command position (start, after ; & | ( ` or npx/env), + # so `grep "playwright-cli open"` etc. is not mistaken for a call. + done < <(printf '%s\n' "$cmd" \ + | grep -oE '(^|[;&|(`]|npx|env|sudo|exec|time|xargs|then|do|[A-Za-z_][A-Za-z0-9_]*=[^[:space:]]*)[[:space:]]*playwright-cli([[:space:]]+[^[:space:];&|)]+)*' 2>/dev/null \ + | sed -E 's/^.*playwright-cli/playwright-cli/') + exit 0 +fi + +if [ "$mode" = "post" ]; then + case "$cmd" in + *"-s=$session"*|*"--session=$session"*) ;; + *) exit 0 ;; + esac + dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + out="$(node "$dir/gdocs.mjs" blocked --quiet 2>&1)" + if [ $? -eq 3 ]; then + printf '%s\n' "$out" >&2 + exit 2 + fi + exit 0 +fi + +exit 0 diff --git a/.claude/skills/update-docs/workflow-new.md b/.claude/skills/update-docs/workflow-new.md new file mode 100644 index 0000000000..659fb77bee --- /dev/null +++ b/.claude/skills/update-docs/workflow-new.md @@ -0,0 +1,40 @@ +# Workflow: write a new page + +Example: `/update-docs write a new doc page for HSM v2 page` + +## 1. Make sure the feature exists and isn't documented yet + +- Find it in the live app: the sidebar `snapshot`, then `goto` its route. If you can't find it, ask the user for the menu path or route. The feature may be behind a flag that this org doesn't have. +- Search for existing coverage: `grep -ril "\|" docs`. If a page already covers it, propose a **refresh** instead, or a new page that the old one links to. + +## 2. Understand the feature + +- In the live app, walk through every tab, list, filter, empty state and **Create/Add** form. Open forms only to look at them. Never submit. +- Read the frontend code for labels, help text and validation rules: `../glific-frontend/src/containers//`, or the same files via `gh api` (see `browsing.md`). +- Note what you **can't** capture safely (see `safety.md`, "Things you can't capture on production"). + +## 3. Placement plan → confirm + +Use `.claude/skills/documentation/sections.md` to pick the section. For `4. Product Features/`, check the existing numbered prefixes with `ls` and choose the next number, or use a sub-folder with a `_category_.json` if it has several pages. + +``` +Placement plan: +- Doc: docs/
/.md (new) +- Images: static/img// — +- Linked from: +- Can't capture: <...> +``` + +Wait for confirmation. + +## 4. Write + +- Copy the header block (read time, Level, Last Updated table) from a recent sibling page in the same section, so the format matches what is live. Set Last Updated to the current month and year. +- Use the template for the section from `.claude/skills/documentation/style-page.md`: a bold one-sentence summary, task-focused H2s (“Creating a template”, “Checking template status”), numbered steps, and a screenshot after each major step. +- Take each screenshot with `gdocs shot` as you write the step it shows. Read each PNG. +- Use `:::info Screenshot coming soon` only for states you can't capture on production. Never invent UI you didn't see. +- Add cross-links both ways: from this page to related pages, and from the closest existing pages to this one. + +## 5. Validate + +Run `gdocs lint`. Run `yarn build` if `node_modules/` exists. Then write the summary (SKILL.md Step 4). diff --git a/.claude/skills/update-docs/workflow-refresh.md b/.claude/skills/update-docs/workflow-refresh.md new file mode 100644 index 0000000000..d48ffd7912 --- /dev/null +++ b/.claude/skills/update-docs/workflow-refresh.md @@ -0,0 +1,46 @@ +# Workflow: refresh an existing page + +Example: `/update-docs refresh the analytics page with new navigation tabs` + +Goal: make an existing page match today's live UI. Keep its structure, voice and URL unless the user asks for more. + +## 1. Find the page(s) + +```bash +grep -ril "" docs --include=*.md | head -20 +ls "docs/4. Product Features/" +``` + +Pick the page or pages the request means. If there are several candidates, list them and ask. Read each page in full, and note every image it references and the header block (read time, level, **Last Updated**). + +## 2. Find what changed + +- Use the user's hint (e.g. "new navigation tabs"). +- Optionally, check recent frontend PRs for the feature: `gh pr list --repo glific/glific-frontend --state merged --search "" --limit 10`, then `gh pr view --repo glific/glific-frontend`. +- Open the route in the live app (see `browsing.md`). Use `snapshot` to list every tab, section, button label and empty state. + +## 3. Diff page vs live UI + +Make a table and show it to the user as part of the plan: + +| Doc says / shows | Live UI | Action | +|---|---|---| +| "Click **Reports**" | Tab is now **Dashboards** | update text | +| `analytics_home.png` (old layout) | new tab bar | retake | +| — | new **Exports** tab | add section | +| "Filters panel on the right" | no longer exists | remove | + +Confirm the plan (SKILL.md Step 2). + +## 4. Update + +- Edit only what the diff calls for. Keep headings, anchors and filenames stable, because other pages link to them. Check with `grep -rn "" docs`. +- Retake changed screenshots **with the same filenames**. Add new ones for new sections. Follow the naming in `.claude/skills/documentation/style-images.md`. +- If a page still uses old GitHub CDN images (`user-images.githubusercontent.com`) and you are replacing that screenshot, move it to `static/img//` with a new local shot. Leave CDN images you don't touch as they are. +- Use UI labels exactly as they appear: bold for buttons and tabs, and `>` for paths (**Settings** > **Organization**). +- Set **Last Updated** in the header to the current month and year (e.g. `October 2026`). Adjust the read time if the length changed a lot. +- Follow `style-writing.md`: plain language for NGO staff, imperative steps, and a screenshot after the step it shows. + +## 5. Validate + +Run `gdocs lint`, Read every new PNG, and write the summary (SKILL.md Step 4). diff --git a/.claude/skills/update-docs/workflow-restructure.md b/.claude/skills/update-docs/workflow-restructure.md new file mode 100644 index 0000000000..9b93e97b12 --- /dev/null +++ b/.claude/skills/update-docs/workflow-restructure.md @@ -0,0 +1,71 @@ +# Workflow: restructure docs + +Example: `/update-docs restructure docs with tabs like ...` + +Restructuring changes URLs and navigation. Plan everything and get approval before you move anything. + +## 1. Understand the request + +Typical kinds: +- **Tabs inside a page**: show alternatives side by side (e.g. "Using Gupshup" vs "Using Meta Cloud API", or "Web" vs "Mobile"). +- **Merge/split pages**: combine thin pages, or split a long page into a folder. +- **Move/reorder**: change the section or the order in the sidebar. + +If the request is vague ("restructure with tabs like …"), ask for, or propose, one concrete before/after example first. + +## 2. Map the current structure + +- The sidebar is autogenerated from `docs/` (`sidebars.js`). Order comes from numeric filename prefixes and `_category_.json` (`position`, `label`). +- List the affected files, their URLs (the path under `docs/` without the number prefixes; check the page frontmatter for `slug`/`id`) and inbound links: `grep -rn "" docs src`. + +## 3. Plan → confirm + +``` +Restructure plan: +- docs/a.md + docs/b.md → docs/x/01. A.md (tabs: "Gupshup" | "Meta") +- moved: docs/old/path.md → docs/new/path.md (URL changes: /old/path → /new/path) +- inbound links to update: N files +- _category_.json changes: ... +- redirects: none available (no redirect plugin) — URL changes will 404 for external links +``` + +Point out every URL change. Wait for approval. + +## 4. Apply + +Tabs syntax (pages are MDX, so imports work in `.md`): + +```mdx +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + + + Steps for Gupshup… + + ![Gupshup settings](/img/settings/settings_gupshup.png) + + + + + Steps for Meta… + + + +``` + +- Leave a blank line after `` and before `` so the markdown inside renders. +- Use the same `groupId` on related pages so the reader's choice carries over. +- Put the imports after the frontmatter and before the header block. +- Use `git mv` for moves so history is kept. Update `_category_.json` where needed. +- Update every inbound link that you found. +- If the new layout needs new screenshots (e.g. one per tab), take them with `gdocs shot`. + +## 5. Validate + +- `gdocs lint $(git ls-files 'docs/*.md' 'docs/**/*.md')`: this checks every page, including unchanged pages that link to moved files. Ignore failures that `main` already has; fix any that mention the paths you moved. +- `grep -rn "" docs src` must return nothing. +- `gdocs lint` checks relative `.md` links in changed pages. `onBrokenLinks` is `ignore` in `docusaurus.config.js`, so the build won't catch broken links. +- Run `yarn build` if `node_modules/` exists, to catch MDX errors such as unclosed ``. Otherwise say that CI will check it. +- In the summary, list every URL that changed. diff --git a/.claude/skills/update-docs/workflow-review.md b/.claude/skills/update-docs/workflow-review.md new file mode 100644 index 0000000000..6c65ccf89e --- /dev/null +++ b/.claude/skills/update-docs/workflow-review.md @@ -0,0 +1,40 @@ +# Workflow: review a set of pages for consistency + +Example: `/update-docs review document structure for all webhooks and ensure consistency of writing` + +Goal: make a group of related pages read as one set, with the same structure, terms, header and depth, and make sure they are still accurate. + +## 1. Collect the set + +```bash +grep -ril "webhook" docs --include=*.md +``` + +List the pages. Group them as **core** (about the topic) or **mentions** (only refer to it), and confirm the scope with the user if there are more than 10 pages. Read every core page in full. + +## 2. Audit + +Build a matrix of the core pages and report it: + +| Page | Header block | Last Updated | Summary line | H2 pattern | Steps style | Terms used | Images (local/CDN/missing) | Broken links | Issues | +|---|---|---|---|---|---|---|---|---|---| + +Check: +- **Structure**: the right section template (`style-page.md`), the same H2 pattern across sibling pages, and an intro → steps → related-links order. +- **Terminology**: one name per concept, matching the live UI label (e.g. "Call a webhook" vs "Webhook node" vs "API call"). Pick the term the UI uses. +- **Voice**: `style-writing.md` (second person, imperative, plain language, no internal or technical jargon for Product Features pages). +- **Accuracy**: spot-check the claims that most affect users against the live app (labels, menu paths, field names). Opening the flow editor isn't possible (see `safety.md`), so for flow node pages check the node lists and labels from the frontend/floweditor code instead. +- **Duplication**: the same how-to explained on several pages. Suggest one canonical page with links to it. +- **Links and images**: relative links that resolve, `/img/` paths that exist, and alt text present. + +## 3. Propose → confirm + +Present a prioritised list of edits: a style guide decision (e.g. the canonical term and the H2 pattern), then a per-page change list. Ask which ones to apply. + +## 4. Apply + +Make the agreed edits page by page. Keep filenames and anchors unless the user approved renames. If you renamed any, update inbound links with `grep -rn`. Retake screenshots only where they are wrong, and only with `gdocs shot`. Update Last Updated on pages whose content changed. + +## 5. Validate + +Run `gdocs lint`, then write a summary that includes the audit matrix before and after. diff --git a/.gitignore b/.gitignore index 292f939f11..997099d582 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ npm-debug.log* yarn-debug.log* yarn-error.log* + +# update-docs skill (playwright-cli session output, snapshots, redaction manifest) +.playwright-cli/ From fc6d79211c6b4ee464ed0827d3baab74c1fd1d50 Mon Sep 17 00:00:00 2001 From: Vignesh Rajasekaran Date: Sat, 10 Oct 2026 11:15:14 +0530 Subject: [PATCH 2/3] Fold documentation skill's style guides into update-docs Move sections, style-writing, style-page and style-images into update-docs and remove the old documentation skill. - Header guidance now matches the

block with Last Updated that most pages use, instead of the legacy ###** badge - Image guide requires gdocs shot; adds framing and filename-stability rules - Sections: _category_.json generated-index (not index.md), more routes - Refresh workflow accepts a glific-frontend PR as input Co-Authored-By: Claude Opus 5.5 --- .claude/skills/documentation/SKILL.md | 49 ------- .claude/skills/documentation/screenshots.md | 132 ------------------ .claude/skills/documentation/sections.md | 64 --------- .claude/skills/documentation/style-images.md | 76 ---------- .claude/skills/documentation/style-writing.md | 87 ------------ .claude/skills/documentation/workflow.md | 91 ------------ .claude/skills/update-docs/SKILL.md | 14 +- .claude/skills/update-docs/browsing.md | 2 +- .claude/skills/update-docs/sections.md | 85 +++++++++++ .claude/skills/update-docs/style-images.md | 92 ++++++++++++ .../style-page.md | 47 +++---- .claude/skills/update-docs/style-writing.md | 105 ++++++++++++++ .claude/skills/update-docs/workflow-new.md | 6 +- .../skills/update-docs/workflow-refresh.md | 7 +- .claude/skills/update-docs/workflow-review.md | 6 +- 15 files changed, 322 insertions(+), 541 deletions(-) delete mode 100644 .claude/skills/documentation/SKILL.md delete mode 100644 .claude/skills/documentation/screenshots.md delete mode 100644 .claude/skills/documentation/sections.md delete mode 100644 .claude/skills/documentation/style-images.md delete mode 100644 .claude/skills/documentation/style-writing.md delete mode 100644 .claude/skills/documentation/workflow.md create mode 100644 .claude/skills/update-docs/sections.md create mode 100644 .claude/skills/update-docs/style-images.md rename .claude/skills/{documentation => update-docs}/style-page.md (52%) create mode 100644 .claude/skills/update-docs/style-writing.md diff --git a/.claude/skills/documentation/SKILL.md b/.claude/skills/documentation/SKILL.md deleted file mode 100644 index 479e32a6aa..0000000000 --- a/.claude/skills/documentation/SKILL.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -name: documentation -description: Generate, update, or review Glific user-facing documentation. Use when a developer asks to document a feature, write a doc page, update existing docs, or after a PR ships to refresh affected docs. ---- - -# Documentation Skill - -Reference and workflow for generating Glific's user-facing Docusaurus documentation. This repo is `glific/docs`. - -## When to use - -Trigger when the user asks to: -- Generate or update a doc page for a feature ("write docs for Flows", "document HSM Templates") -- Refresh docs after a PR ships ("update docs for #142 in glific-frontend") -- Review existing docs for completeness or accuracy - -Start by reading `workflow.md`. - -## IA Principles - -The docs have 8 top-level sections. Each has a different audience and purpose — read `sections.md` before placing any content. - -### Primary audience - -NGO program managers and field workers. They are **not technical users**. They need: -- Plain language explanations -- Step-by-step instructions with screenshots -- To know what something does and how to use it — not how it works internally - -### Frontend code location - -The Glific frontend lives at `../glific-frontend/` relative to this repo. - -| Path | What it contains | -|------|-----------------| -| `../glific-frontend/src/containers/` | Feature-level UI components (one dir per feature) | -| `../glific-frontend/src/routes/AuthenticatedRoute/AuthenticatedRoute.tsx` | All route paths (maps feature name → URL) | -| `../glific-frontend/src/graphql/queries/` | GraphQL queries (understand data a feature displays) | - -## File index - -| File | Purpose | -|------|---------| -| `workflow.md` | Step-by-step process from research to published markdown | -| `sections.md` | All 8 doc sections: audience, purpose, what belongs where | -| `style-writing.md` | Audience, voice, instructions format, anti-patterns | -| `style-page.md` | Page structure templates for each section type | -| `style-images.md` | Image naming, directory mapping, static/img/ conventions | -| `screenshots.md` | Playwright recipe system for automated screenshots | diff --git a/.claude/skills/documentation/screenshots.md b/.claude/skills/documentation/screenshots.md deleted file mode 100644 index f1af05df06..0000000000 --- a/.claude/skills/documentation/screenshots.md +++ /dev/null @@ -1,132 +0,0 @@ -# Screenshot System - -Automated Playwright-based screenshot capture. Recipes define what to capture; `scripts/screenshot.js` runs them. - -## Local setup (one-time) - -### 1. Install Playwright - -```bash -cd /path/to/glific/docs -yarn add --dev playwright js-yaml -npx playwright install chromium -``` - -### 2. Add credentials to `.env` - -Create a `.env` file in the root of this repo (it is gitignored): - -``` -GLIFIC_URL=https://glific.test:3000 -GLIFIC_PHONE=+91XXXXXXXXXX -GLIFIC_PASSWORD=your_password -``` - -Use a **test/demo account** — not a production account. The script will log in and navigate through the UI. - -### 3. Local Glific must be running - -Before running the screenshot script: -- Start the backend: follow `glific/glific` setup (Elixir/Phoenix on port 4001) -- Start the frontend: `cd ../glific-frontend && yarn dev` (runs at `https://glific.test:3000`) - -The script ignores HTTPS certificate errors from `mkcert`, so the self-signed cert is fine. - -## Running the script - -```bash -# Single feature -node scripts/screenshot.js flows - -# All recipes -node scripts/screenshot.js - -# Output lands in static/img/{output_dir}/ -``` - -## Recipe format - -Each recipe is a YAML file in `scripts/recipes/{feature-slug}.yaml`. - -```yaml -name: flows # Human-readable name -output_dir: flows # Maps to static/img/{output_dir}/ -flows: - - name: flow_list # Slug for this flow - description: The list of all flows - required: true # If true, failure aborts the recipe. If false, logs warning and continues. - steps: - - navigate: /flow # Navigate to this path - - wait: '[data-testid="flow-list"]' # Wait for selector (CSS or data-testid) - - snap: flows_list.png # Take screenshot, save as this filename - - click: '[data-testid="add-flow"]' # Click a selector - - wait_text: Create Flow # Wait for visible text to appear - - snap: flows_create_dialog.png -``` - -### Step types - -| Step key | What it does | -|----------|-------------| -| `navigate: /path` | Go to `GLIFIC_URL + path` | -| `wait: 'selector'` | Wait for CSS selector to appear (8s timeout) | -| `wait_text: 'text'` | Wait for visible text to appear on the page | -| `click: 'selector'` | Click a CSS selector | -| `snap: filename.png` | Take a full-viewport screenshot | -| `snap: filename.png` + `element: 'selector'` | Crop to that element only — hides sidebar, nav, unrelated UI | -| `sleep: 500` | Wait N milliseconds (use sparingly, prefer `wait`) | - -### Element cropping - -**Always add `element:` when the screenshot should show only one section.** This keeps docs focused and avoids capturing sidebar/nav that may change independently. - -```yaml -# Full viewport — only for canvas/editor views where context matters -- snap: flows_editor_canvas.png - -# Cropped to element — use for lists, forms, dialogs, cards -- snap: flows_list.png - element: '[data-testid="flow-list"]' - -- snap: flows_create_dialog.png - element: '[role="dialog"]' -``` - -Common element selectors: -- Dialog/modal → `[role="dialog"]` -- Named section → `[data-testid="..."]` -- Main content only (no sidebar) → `main` - -### Selector strategy - -Prefer in this order: -1. `[data-testid="..."]` — most stable, survives CSS refactors -2. ARIA role + name: `role=button[name="Create Flow"]` -3. Visible text: use `wait_text` step, then screenshot -4. CSS class — **avoid**, breaks on any style change - -Glific's frontend has `data-testid` on most interactive elements. Check the container's `.tsx` file to find them. - -### Auth flow - -The script authenticates once per run using phone + password (Glific uses phone number login, not email). The session cookie is reused across all flows in the recipe. - -Login selectors (from `Auth.tsx` / `Login.tsx`): -- Phone field: `input[name="phoneNumber"]` -- Password field: `input[name="password"]` -- Submit button: `[data-testid="SubmitButton"]` -- Post-login: waits for URL to contain `/chat` - -### Nuances - -- The PhoneInput component renders a flag picker + text input. The script fills the text portion with `input[name="phoneNumber"]`. If the phone field has a different rendered `name`, inspect the DOM and update the selector in `scripts/screenshot.js`. -- After login, some features require seed data (e.g., Flow list needs existing flows). Use a demo account with pre-created data. -- The frontend uses Apollo Client with WebSocket subscriptions — some pages load data asynchronously. Use `wait` steps (not `sleep`) to wait for data to appear. - -## Adding a new recipe - -1. Find the feature's route in `../glific-frontend/src/routes/AuthenticatedRoute/AuthenticatedRoute.tsx` -2. Find `data-testid` attributes in `../glific-frontend/src/containers/{Feature}/` -3. Create `scripts/recipes/{feature-slug}.yaml` -4. Run `node scripts/screenshot.js {feature-slug}` and iterate on selectors until all snaps land -5. Commit the recipe + screenshots together with the doc page diff --git a/.claude/skills/documentation/sections.md b/.claude/skills/documentation/sections.md deleted file mode 100644 index 434d445a50..0000000000 --- a/.claude/skills/documentation/sections.md +++ /dev/null @@ -1,64 +0,0 @@ -# Glific Docs Sections - -The sidebar is autogenerated from the `docs/` directory tree. Folder names with number prefixes control order. - -## Section map - -| Folder | Audience | Purpose | Content type | -|--------|----------|---------|--------------| -| `2. Pre Onboarding/` | Implementation partners, technical staff | Steps to complete *before* Glific onboarding — external platform setup | Procedural guides (numbered steps, external links) | -| `3. Starter Kit/` | NGO managers | Pre-launch checklists and best practices before going live | Checklists, short guides | -| `4. Product Features/` | Day-to-day users | Reference docs for every UI feature in Glific | Feature reference pages | -| `5. Integrations/` | Technical staff | How to connect and use third-party tools (OpenAI, Sheets, etc.) | Setup + usage guides | -| `6. WhatsApp Groups Automation/` | NGOs using WA Groups | Features specific to WhatsApp Groups (not 1:1 chats) | Feature + setup guides | -| `7. Use Cases/` | All users | Scenario-based problem → solution guides | Narrative walkthroughs | -| `8. FAQ/` | All users | Quick answers to specific how-to questions | Short Q&A pages | - -## Deciding where a new page belongs - -1. Is it about a UI screen or button in the Glific web app? → **4. Product Features/** -2. Is it about connecting an external service to Glific? → **5. Integrations/** -3. Is it specific to WhatsApp Groups (not regular chats)? → **6. WhatsApp Groups Automation/** -4. Is it a step required *before* going live (Gupshup, GCS, Facebook)? → **2. Pre Onboarding/** -5. Is it a real-world scenario showing how to accomplish a goal? → **7. Use Cases/** -6. Is it a specific question that doesn't fit anywhere else? → **8. FAQ/** - -## Product Features sub-structure - -Current files under `4. Product Features/`: -``` -01. Chats.md -02. Speed Sends.md -03. Flows/ ← subdirectory when a feature has multiple pages -04. Triggers.md -05. Searches.md -06. HSM Templates.md -07. Interactive Messages.md -08. Notifications.md -09. Reporting & Dashboard/ -10. Others/ -``` - -Rules: -- Top-level feature → numbered `.md` file (`11. Feature Name.md`) -- Feature with multiple sub-pages → numbered directory (`11. Feature Name/`) with an `index.md` inside -- Unnumbered files at the end are legacy; new pages must be numbered - -## Route → section mapping - -From `../glific-frontend/src/routes/AuthenticatedRoute/AuthenticatedRoute.tsx`: - -| Route | Feature | Section | -|-------|---------|---------| -| `/chat` | Chats | 4. Product Features | -| `/speed-send` | Speed Sends | 4. Product Features | -| `/flow` | Flows | 4. Product Features | -| `/trigger` | Triggers | 4. Product Features | -| `/search` | Searches | 4. Product Features | -| `/template` | HSM Templates | 4. Product Features | -| `/notifications` | Notifications | 4. Product Features | -| `/collection` | Collections | 4. Product Features > Others | -| `/contact-management` | Contact Management | 4. Product Features > Others | -| `/staff-management` | Staff Management | 4. Product Features > Others | -| `/settings` | Settings | 4. Product Features > Others | -| `/sheet-integration` | Sheet Integration | 5. Integrations | diff --git a/.claude/skills/documentation/style-images.md b/.claude/skills/documentation/style-images.md deleted file mode 100644 index 78e5e6d536..0000000000 --- a/.claude/skills/documentation/style-images.md +++ /dev/null @@ -1,76 +0,0 @@ -# Style: Images - -## Storage policy - -| Image type | Where to store | -|------------|----------------| -| New screenshots (all new pages) | `static/img/{feature}/` in this repo | -| Existing GitHub CDN images on old pages | Leave as-is — do not migrate unless rewriting the page | - -**Never add new GitHub CDN image URLs to a page.** Use local `static/img/` for all new content. - -## Directory mapping - -One directory per feature area under `static/img/`: - -| Feature | Directory | -|---------|-----------| -| Chats | `static/img/chats/` | -| Speed Sends | `static/img/speed-sends/` | -| Flows | `static/img/flows/` | -| Triggers | `static/img/triggers/` | -| Searches | `static/img/searches/` | -| HSM Templates | `static/img/hsm-templates/` | -| Interactive Messages | `static/img/interactive-messages/` | -| Notifications | `static/img/notifications/` | -| Collections | `static/img/collections/` | -| Contact Management | `static/img/contact-management/` | -| Staff Management | `static/img/staff-management/` | -| Settings | `static/img/settings/` | -| Integrations (OpenAI) | `static/img/integrations/openai/` | -| Integrations (Sheets) | `static/img/integrations/sheets/` | -| WhatsApp Groups | `static/img/wa-groups/` | - -If a feature doesn't have a directory yet, create it. The screenshot script creates it automatically. - -## File naming - -Format: `{feature}_{description}.png` — lowercase, underscores, no spaces. - -Examples: -- `flows_list.png` — the list of flows -- `flows_create_dialog.png` — the create flow dialog -- `hsm-templates_new_template_form.png` — the new template form -- `chats_session_timer.png` — the session timer in the chat window - -## Markdown syntax - -Docusaurus serves `static/` at the site root. Always use `/img/` prefix (not `static/img/`): - -```markdown -![Flows list](/img/flows/flows_list.png) -``` - -Never use: -- `import Image from ...` + JSX -- Absolute GitHub CDN URLs for new images -- Relative paths like `../../static/img/...` - -## Screenshot placement - -Screenshot goes **after** the step it illustrates, never before. One screenshot per major step or UI state. - -## Missing screenshots - -If the feature isn't built yet or requires backend data that can't be seeded locally: - -```markdown -:::info Screenshot coming soon -::: -``` - -Never use HTML comment placeholders (``). - -## Image dimensions - -Capture at **1440×900 viewport** (set in `scripts/screenshot.js`). Do not resize or compress — Docusaurus serves them at natural size and the browser scales them. diff --git a/.claude/skills/documentation/style-writing.md b/.claude/skills/documentation/style-writing.md deleted file mode 100644 index da4e62955e..0000000000 --- a/.claude/skills/documentation/style-writing.md +++ /dev/null @@ -1,87 +0,0 @@ -# Style: Writing - -Read at least two existing pages in the same section before writing a new one — match their tone and density. - -## Audience - -Primary: **NGO program managers and field workers** using Glific daily. Non-technical. Need to know *what* to do, not *why* the code works. - -Secondary: **Implementation partners** setting up Glific for NGOs. More technical, but still prefer step-by-step clarity. - -**Plain language rules:** -- High-school reading level. -- One idea per sentence. -- Explain what things do, not how they work internally. -- If a technical term is unavoidable ("flow", "template", "collection"), explain it in context on first use or link to another doc. -- Use "you" and "your". Active voice, present tense. - -## Voice - -| Don't | Do instead | -|---|---| -| "Click the button" | "Select **Create Flow**" | -| "The user should navigate to" | "Open **Flows** from the left menu" | -| "It is possible to" | "You can" | -| "In order to" | "To" | -| Passive voice | Active, second-person, present tense | -| "Please note that" | Just say it | - -## Page header format - -Every page starts with a read-time and difficulty badge, matching the existing Glific style: - -```markdown -###**{N} minute read   ...   `{Level}`** -``` - -Use these levels: -- `Beginner` — anyone can follow with no prior Glific knowledge -- `Intermediate` — assumes familiarity with basic Glific features -- `Advanced` — requires understanding of flows, APIs, or technical setup - -Example (copy the spacing exactly — the ` ` padding pushes the badge to the right): -```markdown -###**3 minute read                                                                                                                         `Beginner`** -``` - -## Instructions format - -Numbered steps for sequential actions. Each step = one action. - -**Rules:** -1. **Bold every UI element** the user interacts with: button labels, menu items, tab names, field labels. -2. Place a screenshot *after* the step it illustrates, not before. -3. Keep steps atomic — one click or one fill per step. -4. Use "Select" not "Click" (works for touchscreens too). -5. Use quotes for exact text the user types; bold for UI labels they select. - -**Example:** -```markdown -1. Open **Flows** from the left menu. - -![Flows list](/img/flows/flows_list.png) - -2. Select **+ Create Flow**. -3. Enter a name for your flow and select **Save**. -``` - -## Section intro pattern - -After the header badge, start with a **bold one-liner** that tells the reader exactly what this feature does: - -```markdown -**Flows let you build automated conversation sequences that run without staff involvement.** -``` - -Then 1–2 sentences of context if needed. Then jump straight into steps or sub-sections. - -## Anti-patterns - -| Don't | Why | -|---|---| -| GitHub CDN image URLs in new pages | Images can break; use `static/img/` instead | -| `` tags with GitHub asset URLs for new screenshots | Use standard markdown `![alt](/img/...)` | -| Long intros before the first action | Badge → bold one-liner → steps | -| Duplicating WhatsApp/Meta documentation | Link to official docs instead | -| Explaining GraphQL, Apollo, or internal architecture | Audience doesn't need this | -| `Note:` in plain text | Use `:::note` admonition | diff --git a/.claude/skills/documentation/workflow.md b/.claude/skills/documentation/workflow.md deleted file mode 100644 index ec1c876d5b..0000000000 --- a/.claude/skills/documentation/workflow.md +++ /dev/null @@ -1,91 +0,0 @@ -# Documentation Workflow - -Process to generate or update a doc page — from research to published markdown. - -## 1. Parse Input & Determine Mode - -**Mode A — Feature Name** (default): input is a feature name (e.g. "Flows", "HSM Templates", "Speed Send"). - -**Mode B — PR Number**: input matches `#\d+`, a GitHub PR URL for `glific/glific-frontend`, or a commit range. - -## 2. Load Reference Files - -Read what's needed for the task: -- `sections.md` — to determine which of the 8 sections the content belongs in -- `style-writing.md`, `style-page.md` — for writing conventions and templates -- `style-images.md`, `screenshots.md` — for image handling and screenshot recipes - -## 3. Research the Feature - -**Mode A — Feature Name:** -1. Find the container: `../glific-frontend/src/containers/{FeatureName}/` -2. Read the main list and form components (e.g. `FlowList.tsx`, `Flow.tsx`) to understand what the UI shows and does -3. Read `../glific-frontend/src/routes/AuthenticatedRoute/AuthenticatedRoute.tsx` to find the URL route -4. Check existing docs in `docs/` for the feature (search for the feature name in file names and content) -5. Optionally read `../glific-frontend/src/graphql/queries/{Feature}.ts` to understand what data the feature displays - -**Mode B — PR Number:** -1. `gh pr diff #PR_NUMBER --repo glific/glific-frontend` to see what changed -2. Identify affected containers from the changed file paths -3. Read the changed files in full to understand new behavior -4. Check existing docs for the affected area - -## 4. Determine Placement - -Use `sections.md` to map the feature to the right section. For Product Features, check the existing numbered file list to determine the next number. - -Print the placement plan and **ask the user to confirm** before writing anything: - -``` -Placement plan: -- Doc: docs/{section}/{filename}.md -- Images: static/img/{feature}/ -- Action: {new page | update existing | add sub-page to existing dir} -- Recipe: scripts/recipes/{feature-slug}.yaml ({exists | needs creating}) -``` - -## 5. Capture Screenshots - -Check for an existing recipe at `scripts/recipes/{feature-slug}.yaml`. - -**Recipe missing** → create it. Read `screenshots.md` for the exact format. Find `data-testid` values in the relevant container files. - -**Recipe exists** → review it against what you read in step 3. Add or update flows for any user path the doc will reference. Fix selectors if the UI has changed. - -Then run: -```bash -node scripts/screenshot.js {feature-slug} -``` - -Verify all expected files land in `static/img/{feature}/`. Iterate on any selector that misses — never ship a doc that references a non-existent image. - -Use `:::info Screenshot coming soon` only when the feature requires backend data that cannot be seeded (e.g., live WhatsApp delivery receipts, billing pages). - -## 6. Write Documentation - -Choose the correct template from `style-page.md` based on the section. Save to the confirmed path from step 4. - -Follow `style-writing.md` for voice and format. The most common mistake: writing for a technical audience. Imagine explaining this to an NGO field worker on their first day. - -## 7. Validate - -- [ ] All images referenced in the doc exist in `static/img/{feature}/` -- [ ] Image paths use `/img/` prefix (Docusaurus convention), not `static/img/` -- [ ] No new GitHub CDN image URLs (only old untouched pages keep those) -- [ ] Page header has the read-time badge and difficulty level -- [ ] Page matches the correct section template from `style-page.md` -- [ ] Numbered file prefix is correct and doesn't conflict with existing files - -## 8. Print Next Steps - -``` -Documentation generated: -- Doc: docs/{section}/{filename}.md -- Images: static/img/{feature}/ ({N} screenshots captured) -- Recipe: scripts/recipes/{feature-slug}.yaml - -Next: -1. Preview: yarn start (in this repo) -2. Review at http://localhost:3000/docs/{slug} -3. Commit doc + recipe + screenshots together, then open a PR -``` diff --git a/.claude/skills/update-docs/SKILL.md b/.claude/skills/update-docs/SKILL.md index e1407786ab..0ae2864d97 100644 --- a/.claude/skills/update-docs/SKILL.md +++ b/.claude/skills/update-docs/SKILL.md @@ -1,6 +1,6 @@ --- name: update-docs -description: Write, refresh, review or restructure Glific user docs in this repo, using screenshots and UI checks from the live (production) Glific app. It drives a read-only, auto-redacting playwright-cli browser. Use for "/update-docs ...", "refresh the X page", "write a new doc for X", "review docs for consistency", "restructure docs with tabs", or any docs change that needs current screenshots or must match the live UI. +description: Generate, update, review or restructure Glific user-facing documentation in this repo (glific/docs), using the live (production) Glific app through a read-only, auto-redacting playwright-cli browser for UI checks and screenshots. Use when someone asks to document a feature, write a doc page, refresh or update existing docs, update docs after a glific-frontend PR ships, review docs for consistency, or restructure docs (e.g. with tabs). Also use for "/update-docs ...". argument-hint: --- @@ -32,7 +32,7 @@ This checks the env vars, `playwright-cli`, the browser launch and the read-only | Intent | Example | Browser? | Read | |---|---|---|---| -| **Refresh** an existing page | `refresh the analytics page with new navigation tabs` | yes | [workflow-refresh.md](workflow-refresh.md) | +| **Refresh** an existing page | `refresh the analytics page with new navigation tabs`, `update docs for glific-frontend#1234` | yes | [workflow-refresh.md](workflow-refresh.md) | | **New** page | `write a new doc page for HSM v2 page` | yes | [workflow-new.md](workflow-new.md) | | **Review** a set of pages for consistency | `review document structure for all webhooks and ensure consistency of writing` | optional, for spot-checks | [workflow-review.md](workflow-review.md) | | **Restructure** (tabs, merges, moves) | `restructure docs with tabs like ...` | optional | [workflow-restructure.md](workflow-restructure.md) | @@ -42,11 +42,11 @@ If the request mixes intents, do them in this order: review/restructure plan → Always read these too: - [browsing.md](browsing.md): how to drive the session, take screenshots and find your way around Glific. - [safety.md](safety.md): what is blocked, the stop-and-warn protocol, and redaction limits. -- The house style in the sibling `documentation` skill. It is the single source for docs conventions, so don't duplicate it here: - - `.claude/skills/documentation/sections.md`: which of the 8 sections content belongs in - - `.claude/skills/documentation/style-writing.md`: voice and audience (NGO staff, non-technical) - - `.claude/skills/documentation/style-page.md`: page templates - - `.claude/skills/documentation/style-images.md`: image directories, naming and `/img/` paths +- The house style guides. They are the single source for docs conventions: + - [sections.md](sections.md): the 8 doc sections, where new pages go, numbering, and route → section mapping + - [style-writing.md](style-writing.md): audience (non-technical NGO staff), voice, UI labels, the **page header block**, step format and anti-patterns + - [style-page.md](style-page.md): page templates per section, sibling consistency, and when to use tabs + - [style-images.md](style-images.md): image directories, naming, framing, `/img/` paths and placeholders ## Step 2 — Plan, then confirm diff --git a/.claude/skills/update-docs/browsing.md b/.claude/skills/update-docs/browsing.md index 7b02db8136..c6605e9016 100644 --- a/.claude/skills/update-docs/browsing.md +++ b/.claude/skills/update-docs/browsing.md @@ -41,7 +41,7 @@ node .claude/skills/update-docs/scripts/gdocs.mjs shot static/img// 09. Reporting & Dashboard | +| `/collection` | Collections | 4. Product Features > Others | +| `/contact-management` | Contact Management | 4. Product Features > Others | +| `/staff-management` | Staff Management | 4. Product Features > Others | +| `/settings` | Settings | 4. Product Features > Others | +| `/sheet-integration` | Sheet Integration | 4. Product Features > 11. Link Google Sheets | +| `/whatsapp-forms` | WhatsApp Forms | 4. Product Features | +| `/certificates` | Custom Certificates | 4. Product Features | +| `/ticket` | Tickets | 4. Product Features | +| `/webhook-logs` | Webhook logs | 4. Product Features > 03. Flows | +| `/assistants` | AI Assistants | 5. Integrations | +| `/ai-evaluations` | AI Evaluations | 5. Integrations | +| `/group`, `/group-details` | WhatsApp Groups | 6. WhatsApp Groups Automation | diff --git a/.claude/skills/update-docs/style-images.md b/.claude/skills/update-docs/style-images.md new file mode 100644 index 0000000000..411317889c --- /dev/null +++ b/.claude/skills/update-docs/style-images.md @@ -0,0 +1,92 @@ +# Style: Images + +## How images are made + +Every new or replaced screenshot is taken with `gdocs shot` from the live app (see `browsing.md`). It redacts PII and records the image for `gdocs lint`. Don't add images from anywhere else. A local screenshot tool, a copied GitHub asset or an AI-generated mock-up all fail the provenance lint, and they may contain real contact data. + +## Storage policy + +| Image type | Where to store | +|------------|----------------| +| New screenshots (new pages, new sections, replaced shots) | `static/img/{feature}/` in this repo | +| Existing GitHub CDN images on pages you don't otherwise touch | Leave them as they are | +| Existing GitHub CDN image whose screenshot you are replacing | New local shot in `static/img/{feature}/` | + +**Never add new GitHub CDN image URLs to a page.** + +## Directory mapping + +One directory per feature area under `static/img/`: + +| Feature | Directory | +|---------|-----------| +| Chats | `static/img/chats/` | +| Speed Sends | `static/img/speed-sends/` | +| Flows | `static/img/flows/` | +| Triggers | `static/img/triggers/` | +| Searches | `static/img/searches/` | +| HSM Templates | `static/img/hsm-templates/` | +| Interactive Messages | `static/img/interactive-messages/` | +| Notifications | `static/img/notifications/` | +| Reporting & Dashboard / Analytics | `static/img/analytics/` | +| Collections | `static/img/collections/` | +| Contact Management | `static/img/contact-management/` | +| Staff Management | `static/img/staff-management/` | +| Settings | `static/img/settings/` | +| Integrations (OpenAI) | `static/img/integrations/openai/` | +| Integrations (Sheets) | `static/img/integrations/sheets/` | +| WhatsApp Groups | `static/img/wa-groups/` | + +If a feature has no directory yet, `gdocs shot` creates it. Use a lowercase, hyphenated name. Check `ls static/img/` first so you don't create a near-duplicate. + +## File naming + +Format: `{feature}_{description}.png`. Use lowercase and underscores, with no spaces. + +Examples: +- `flows_list.png`: the list of flows +- `flows_create_dialog.png`: the create-flow dialog +- `hsm-templates_new_template_form.png`: the new template form +- `chats_session_timer.png`: the session timer in the chat window + +When you replace a screenshot, **keep its filename** so existing links keep working. + +## Markdown syntax + +Docusaurus serves `static/` at the site root. Always use the `/img/` prefix, never `static/img/`: + +```markdown +![Flows list](/img/flows/flows_list.png) +``` + +Don't use: +- `import Image from ...` with JSX +- Absolute GitHub CDN URLs for new images +- Relative paths such as `../../static/img/...` + +The alt text should say what the image shows ("Template list with the Status filter open"), not the filename. + +## Framing + +- **Crop to the relevant element** with `--target` (a dialog, form, list or card). Use a full-viewport shot only when the layout itself matters, such as navigation tabs or where something sits on the screen. +- Show the state the step describes: the dropdown open, the tab selected, the form empty. +- Prefer views with little personal data, such as lists, empty states and forms, over chat threads and contact profiles. + +## Screenshot placement + +Put the screenshot **after** the step it shows, never before. Use one screenshot per major step or UI state. + +## Missing screenshots + +If you can't capture a state on production (the flow editor, the simulator, success states after saving; see `safety.md`), or the feature isn't live yet: + +```markdown +:::info Screenshot coming soon +::: +``` + +Never use HTML comment placeholders (``). + +## Image dimensions + +The session captures at a **1440×900 viewport** (set in `scripts/cli.config.json`). Don't resize or compress images. Docusaurus serves them at natural size and the browser scales them. diff --git a/.claude/skills/documentation/style-page.md b/.claude/skills/update-docs/style-page.md similarity index 52% rename from .claude/skills/documentation/style-page.md rename to .claude/skills/update-docs/style-page.md index 568d1bd655..3af97a6040 100644 --- a/.claude/skills/documentation/style-page.md +++ b/.claude/skills/update-docs/style-page.md @@ -1,19 +1,17 @@ # Style: Page Structure -Different sections use different templates. Match the template to the section type. +Each section uses its own template. Pick the template that matches the section. `{HEADER}` means the header block from `style-writing.md` (read time, level, Last Updated). --- ## Template 1: Product Feature page (`4. Product Features/`) ```markdown -###**{N} minute read   {padding}   `{Level}`** - ---- +{HEADER} **{One-sentence summary of what this feature does.}** -{1–2 sentences of context: when you'd use this, how it fits into Glific.} +{1–2 sentences of context: when you'd use it and how it fits into Glific.} ## {First capability or action} @@ -32,24 +30,23 @@ You can read more about related features here: ``` **Rules:** -- H2 headings are task-focused: "Creating a Flow", "Editing a Template", "Viewing Reports" -- One screenshot per major action, placed after the step it shows -- End with cross-links to related Product Feature pages +- H2 headings name a task: "Creating a Flow", "Editing a Template", "Viewing Reports". +- One screenshot per major action, placed after the step it shows. +- End with links to related Product Feature pages. +- If the feature has tabs in the UI, use one H2 per tab, in the same order as the UI. --- ## Template 2: Integration page (`5. Integrations/`) ```markdown -###**{N} minute read   {padding}   `{Level}`** - ---- +{HEADER} **{What this integration does and why you'd use it.}** ## Prerequisites -- {List what the user needs before starting: API keys, accounts, etc.} +- {What the user needs before starting: API keys, accounts, etc.} ## Setup @@ -70,9 +67,7 @@ You can read more about related features here: ## Template 3: FAQ page (`8. FAQ/`) ```markdown -###**{N} minute read   {padding}   `{Level}`** - ---- +{HEADER} **{Restate the question as a one-sentence answer.}** @@ -91,9 +86,7 @@ FAQ pages are short. If the answer needs more than 5 steps or 2 screenshots, it ## Template 4: Use Case page (`7. Use Cases/`) ```markdown -###**{N} minute read   {padding}   `{Level}`** - ---- +{HEADER} **{The problem this use case solves, in one sentence.}** @@ -103,7 +96,7 @@ FAQ pages are short. If the answer needs more than 5 steps or 2 screenshots, it ## Solution -{Walk through the solution. Reference existing Product Feature pages rather than re-explaining how each feature works.} +{Walk through the solution. Link to existing Product Feature pages instead of explaining again how each feature works.} ## Steps @@ -116,15 +109,13 @@ FAQ pages are short. If the answer needs more than 5 steps or 2 screenshots, it ## Template 5: Pre Onboarding guide (`2. Pre Onboarding/`) ```markdown -###**{N} minute read   {padding}   `{Level}`** - ---- +{HEADER} -**{What this guide helps the user accomplish.}** +**{What this guide helps the user do.}** ## Prerequisites -- {External account or info needed before starting.} +- {External account or information needed before starting.} ## Steps @@ -137,6 +128,10 @@ FAQ pages are short. If the answer needs more than 5 steps or 2 screenshots, it --- -## Read-time estimation +## Sibling consistency + +Pages in the same folder (for example every `2. Flow Actions/` page) should share the same H2 pattern. Before you write or refresh one of them, read two siblings and copy their headings. Typical headings are "What is it used for", "How to use it" and "Example". `workflow-review.md` audits this across a whole set of pages. + +## Tabs inside a page -Count images × 10 seconds + word count ÷ 200 wpm. Round to nearest minute. Minimum: 1 minute. +Use Docusaurus tabs only when the reader picks **one** of several paths, for example a BSP, a platform or a setup method. Don't use them to split up content everyone should read. For the syntax, see `workflow-restructure.md`. diff --git a/.claude/skills/update-docs/style-writing.md b/.claude/skills/update-docs/style-writing.md new file mode 100644 index 0000000000..bf2c12f1d8 --- /dev/null +++ b/.claude/skills/update-docs/style-writing.md @@ -0,0 +1,105 @@ +# Style: Writing + +Before you write a new page, read at least two existing pages in the same section and match their tone and density. + +## Audience + +Primary: **NGO program managers and field workers** who use Glific every day. They are not technical. They need to know *what* to do, not *why* the code works. + +Secondary: **Implementation partners** who set up Glific for NGOs. They are more technical, but still prefer clear step-by-step instructions. + +**Plain language rules:** +- High-school reading level. +- One idea per sentence. +- Explain what things do, not how they work internally. +- If you can't avoid a Glific term such as "flow", "template" or "collection", explain it the first time you use it, or link to its page. +- Use "you" and "your". Use active voice and the present tense. + +## Voice + +| Don't | Do instead | +|---|---| +| "Click the button" | "Select **Create Flow**" | +| "The user should navigate to" | "Open **Flows** from the left menu" | +| "It is possible to" | "You can" | +| "In order to" | "To" | +| Passive voice | Active voice, second person, present tense | +| "Please note that" | Just say it | + +## UI labels + +- Copy every label **exactly as the live app shows it**, including capitals and "+" prefixes. Check it with `snapshot`/`find` in the session. Don't trust old docs or memory. +- Write menu paths with `>`: **Settings** > **Organization**. +- If the UI renamed something, use the new name everywhere on the page. Mention the old name once only if users will still look for it ("**Dashboards** (previously **Reports**)"). + +## Page header + +Every page starts with a read-time, level and last-updated header. Copy this block exactly, because most pages use it: + +```mdx +

+

+ + + + + +
3 minutes readLevel: Beginner Last Updated: October 2026
+

+``` + +- **Read time**: count words ÷ 200, plus 10 seconds per image, and round to the nearest minute (minimum 1). Write "1 minute read" or "N minutes read". +- **Level**: + - `Beginner`: anyone can follow it with no prior Glific knowledge + - `Intermediate`: assumes the reader knows the basic Glific features + - `Advanced`: needs an understanding of flows, APIs or technical setup +- **Last Updated**: the month and year of your change. Update it whenever you change a page's content. +- Old pages may use other header variants (`###**N minute read …`, `paddingLeft: 40`, `

`). When you refresh such a page, replace its header with the block above. + +## Instructions format + +Use numbered steps for actions done in order. One action per step. + +**Rules:** +1. **Bold every UI element** the user interacts with: button labels, menu items, tab names and field labels. +2. Place a screenshot *after* the step it shows, not before. +3. Keep steps small: one click or one field per step. +4. Use "Select", not "Click", so the wording also works on touchscreens. +5. Use quotes for exact text the user types, and bold for UI labels they select. + +**Example:** +```markdown +1. Open **Flows** from the left menu. + +![Flows list](/img/flows/flows_list.png) + +2. Select **+ Create Flow**. +3. Enter a name for your flow and select **Save**. +``` + +## Section intro pattern + +After the header, start with a **bold one-liner** that says exactly what the feature does: + +```markdown +**Flows let you build automated conversation sequences that run without staff involvement.** +``` + +Then add 1–2 sentences of context if needed. Then go straight into the steps or sub-sections. + +## Examples and sample data + +- Example values in text and screenshots must be made up: "Sample Flow", "+91 XXXXX XXXXX", "user@example.org". +- Never copy real contact names, phone numbers, message text or org names from the live app into a page. + +## Anti-patterns + +| Don't | Why | +|---|---| +| GitHub CDN image URLs in new or rewritten content | The images can break. Use `static/img/` instead | +| `` tags pointing to GitHub asset URLs | Use standard markdown `![alt](/img/...)` | +| Long intros before the first action | Use header → bold one-liner → steps | +| Repeating WhatsApp or Meta documentation | Link to the official docs instead | +| Explaining GraphQL, Apollo or internal architecture | The audience doesn't need it | +| `Note:` in plain text | Use the `:::note` admonition | +| Documenting UI you couldn't see in the live app | It may be wrong. Ask the user, or mark the screenshot as coming soon | diff --git a/.claude/skills/update-docs/workflow-new.md b/.claude/skills/update-docs/workflow-new.md index 659fb77bee..a804fee23a 100644 --- a/.claude/skills/update-docs/workflow-new.md +++ b/.claude/skills/update-docs/workflow-new.md @@ -15,7 +15,7 @@ Example: `/update-docs write a new doc page for HSM v2 page` ## 3. Placement plan → confirm -Use `.claude/skills/documentation/sections.md` to pick the section. For `4. Product Features/`, check the existing numbered prefixes with `ls` and choose the next number, or use a sub-folder with a `_category_.json` if it has several pages. +Use [sections.md](sections.md) to pick the section. For `4. Product Features/`, check the existing numbered prefixes with `ls` and choose the next number, or use a sub-folder with a `_category_.json` if it has several pages. ``` Placement plan: @@ -29,8 +29,8 @@ Wait for confirmation. ## 4. Write -- Copy the header block (read time, Level, Last Updated table) from a recent sibling page in the same section, so the format matches what is live. Set Last Updated to the current month and year. -- Use the template for the section from `.claude/skills/documentation/style-page.md`: a bold one-sentence summary, task-focused H2s (“Creating a template”, “Checking template status”), numbered steps, and a screenshot after each major step. +- Start with the page header block from [style-writing.md](style-writing.md#page-header) (read time, Level, Last Updated). Set Last Updated to the current month and year, then work out the read time once the page is written. +- Use the template for the section from [style-page.md](style-page.md): a bold one-sentence summary, task-focused H2s (“Creating a template”, “Checking template status”), numbered steps, and a screenshot after each major step. - Take each screenshot with `gdocs shot` as you write the step it shows. Read each PNG. - Use `:::info Screenshot coming soon` only for states you can't capture on production. Never invent UI you didn't see. - Add cross-links both ways: from this page to related pages, and from the closest existing pages to this one. diff --git a/.claude/skills/update-docs/workflow-refresh.md b/.claude/skills/update-docs/workflow-refresh.md index d48ffd7912..2e3ec19cde 100644 --- a/.claude/skills/update-docs/workflow-refresh.md +++ b/.claude/skills/update-docs/workflow-refresh.md @@ -16,6 +16,7 @@ Pick the page or pages the request means. If there are several candidates, list ## 2. Find what changed - Use the user's hint (e.g. "new navigation tabs"). +- **If the input is a PR** (`#1234`, `glific-frontend#1234`, or a PR URL): `gh pr view --repo glific/glific-frontend` and `gh pr diff --repo glific/glific-frontend`. Map the changed `src/containers//` paths to features, and through [sections.md](sections.md) to pages. One PR can affect several pages. List them in the plan. Only document what is live on production: if the change isn't visible in the live app yet, tell the user and stop. - Optionally, check recent frontend PRs for the feature: `gh pr list --repo glific/glific-frontend --state merged --search "" --limit 10`, then `gh pr view --repo glific/glific-frontend`. - Open the route in the live app (see `browsing.md`). Use `snapshot` to list every tab, section, button label and empty state. @@ -35,11 +36,11 @@ Confirm the plan (SKILL.md Step 2). ## 4. Update - Edit only what the diff calls for. Keep headings, anchors and filenames stable, because other pages link to them. Check with `grep -rn "" docs`. -- Retake changed screenshots **with the same filenames**. Add new ones for new sections. Follow the naming in `.claude/skills/documentation/style-images.md`. +- Retake changed screenshots **with the same filenames**. Add new ones for new sections. Follow the naming in [style-images.md](style-images.md). - If a page still uses old GitHub CDN images (`user-images.githubusercontent.com`) and you are replacing that screenshot, move it to `static/img//` with a new local shot. Leave CDN images you don't touch as they are. - Use UI labels exactly as they appear: bold for buttons and tabs, and `>` for paths (**Settings** > **Organization**). -- Set **Last Updated** in the header to the current month and year (e.g. `October 2026`). Adjust the read time if the length changed a lot. -- Follow `style-writing.md`: plain language for NGO staff, imperative steps, and a screenshot after the step it shows. +- Set **Last Updated** in the header to the current month and year (e.g. `October 2026`). Recalculate the read time. If the page uses a legacy header variant, replace it with the standard block from [style-writing.md](style-writing.md#page-header). +- Follow [style-writing.md](style-writing.md): plain language for NGO staff, imperative steps, and a screenshot after the step it shows. Keep the page's template from [style-page.md](style-page.md). ## 5. Validate diff --git a/.claude/skills/update-docs/workflow-review.md b/.claude/skills/update-docs/workflow-review.md index 6c65ccf89e..b3d115e5a1 100644 --- a/.claude/skills/update-docs/workflow-review.md +++ b/.claude/skills/update-docs/workflow-review.md @@ -20,9 +20,11 @@ Build a matrix of the core pages and report it: |---|---|---|---|---|---|---|---|---|---| Check: -- **Structure**: the right section template (`style-page.md`), the same H2 pattern across sibling pages, and an intro → steps → related-links order. +- **Structure**: the right section template ([style-page.md](style-page.md)), the same H2 pattern across sibling pages (see "Sibling consistency"), and an intro → steps → related-links order. +- **Images**: [style-images.md](style-images.md) naming, `/img/` paths, alt text, and placement after the step. - **Terminology**: one name per concept, matching the live UI label (e.g. "Call a webhook" vs "Webhook node" vs "API call"). Pick the term the UI uses. -- **Voice**: `style-writing.md` (second person, imperative, plain language, no internal or technical jargon for Product Features pages). +- **Header**: the standard block from [style-writing.md](style-writing.md#page-header). Flag legacy variants, wrong read times and stale Last Updated dates. +- **Voice**: [style-writing.md](style-writing.md) (second person, imperative, plain language, "Select" not "Click", bold UI labels, no internal or technical jargon for Product Features pages). - **Accuracy**: spot-check the claims that most affect users against the live app (labels, menu paths, field names). Opening the flow editor isn't possible (see `safety.md`), so for flow node pages check the node lists and labels from the frontend/floweditor code instead. - **Duplication**: the same how-to explained on several pages. Suggest one canonical page with links to it. - **Links and images**: relative links that resolve, `/img/` paths that exist, and alt text present. From ff469fe0adff51a0de8a4a6c05f0fb0caef9ac63 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 10 Oct 2026 05:59:22 +0000 Subject: [PATCH 3/3] Add Messages Overview tab to Data Analytics docs Document the new Messages Overview tab (Messages Exchanged card, service message billing notice, Message Composition chart) and replace the intro screenshot with one showing all four tabs. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01YZEqcwqazipcxQbcraCE5G --- docs/4. Product Features/Data Analytics.md | 25 ++++++++++++++---- .../analytics/analytics_dashboard_tabs.png | Bin 0 -> 102159 bytes .../analytics/analytics_messages_overview.png | Bin 0 -> 144551 bytes 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 static/img/analytics/analytics_dashboard_tabs.png create mode 100644 static/img/analytics/analytics_messages_overview.png diff --git a/docs/4. Product Features/Data Analytics.md b/docs/4. Product Features/Data Analytics.md index d10b76941a..8a346068fe 100644 --- a/docs/4. Product Features/Data Analytics.md +++ b/docs/4. Product Features/Data Analytics.md @@ -1,20 +1,21 @@

- + - +
3 minutes read4 minutes read Level: BeginnerLast Updated: July 2026Last Updated: October 2026

# Data Analytics Page -The Data Analytics page (accessible from the left navigation under "Data Analytics") gives a bird's-eye view of how contacts are growing, how engaged they are, and how reliably messages are being delivered. The page is organized as a single dashboard with a shared control bar at the top and three tabs underneath: +The Data Analytics page (accessible from the left navigation under "Data Analytics") gives a bird's-eye view of how contacts are growing, how engaged they are, and how reliably messages are being delivered. The page is organized as a single dashboard with a shared control bar at the top and four tabs underneath: - Reach & Growth, -- Engagement Quality, and +- Engagement Quality, +- Messages Overview, and - Message Errors. -Screenshot 2026-07-08 at 4 17 55 PM +![Data Analytics dashboard with the Time and Time Grain controls and the four tabs](/img/analytics/analytics_dashboard_tabs.png) Every tab responds to the same global `Time` and `Time Grain` settings, so changing them once updates the charts across whichever tab you're viewing. @@ -80,6 +81,20 @@ This tab answers "of the people I'm reaching, how many are actually engaging bac Reading this chart top to bottom shows the engagement funnel — for example, only 17 out of 83 broadcast contacts responded the same day, which is a same-day response rate you could use to gauge broadcast effectiveness. This chart does reflect the Time filter, but note it is not time-grain-bucketed like the trend charts — it's a single snapshot of totals for the selected date range. +## Messages Overview +This tab answers "how many messages am I exchanging, and what kind are they?" + +![Messages Overview tab with the Messages Exchanged card, the service message notice and the Message Composition chart](/img/analytics/analytics_messages_overview.png) + +1. **The Messages Exchanged** card splits all messages in the selected time range into three types. The date under the title ("Data available since ...") shows the earliest date for which message data exists. +- Inbound, (messages your contacts sent to you) +- Template Outbound, (approved HSM template messages you sent, for example in broadcasts) +- Service Outbound, (non-template messages you sent, such as replies from flows or staff within the 24-hour session window). This number is marked **Billable from 1st Oct**. + +2. **The service message notice** below the card explains that from 1st October 2026, Meta charges for service messages. It estimates the extra cost of the service messages sent in your selected time range at the rate for Indian numbers. For other countries, click **Whatsapp Business Platform Rates** to see Meta's pricing. + +3. **The Message Composition** stacked bar chart shows, for each time bucket in your selected range and grain, how many Service Outbound, Inbound and Template Outbound messages were exchanged. The number above each bar is the total for that bucket. Like the charts on the Message Errors tab, it has legend toggles, **All** / **Inv** buttons and a range slider underneath to zoom into part of the timeline. A large share of Service Outbound in a bar shows where most of your new service message costs would come from. + ## Message Errors This tab answers "are messages actually getting delivered, and where are the failures?" diff --git a/static/img/analytics/analytics_dashboard_tabs.png b/static/img/analytics/analytics_dashboard_tabs.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed82513b6a8d8cf6434ab0546cf35079831f1e4 GIT binary patch literal 102159 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%0Ab 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 literal 0 HcmV?d00001 diff --git a/static/img/analytics/analytics_messages_overview.png b/static/img/analytics/analytics_messages_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..fae6799f119265fed774e4e4cfe9c69ab79c6e82 GIT binary patch literal 144551 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 (jBxrFlJs7sU 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 literal 0 HcmV?d00001