| What you need | Where to look |
|---|---|
| How this repo is structured, data flows, domain model | ARCHITECTURE.md |
| How to build/test/run | CONTRIBUTING.md |
| Why decisions were made | docs/ADRs/ (internal-only; ask a maintainer) |
| What this repo does | README.md |
| PR review rules | .bito/guidelines/ |
- Use pnpm.
packageManageris pinned topnpm@10.33.0andpnpm-workspace.yamldrives workspace resolution β npm/yarn will not readpnpm-workspace.yamland can produce a brokennode_moduleslayout. [package.json,pnpm-workspace.yaml] - This is an Nx monorepo. Root scripts (
build,lint,test,start) all delegate tonx run-many -t <target>. Run a single package's target withnx run <package>:<target>rather thancd-ing intopackages/<name>and invoking its script directly, so Nx's dependency graph and cache stay correct. [package.json,nx.json] - If you write a custom
renderNodeoverride, escape every interpolated attribute yourself.rich-text-html-renderer's own defaultBLOCKS.EMBEDDED_ASSETrenderer previously built thealt/srcattributes without proper escaping, which was a stored-XSS finding fixed in a dedicated commit addingescapeHtml()calls. The library escapes its own defaults; it does not escape output from consumer-suppliedrenderNode/renderMarkoverrides. [packages/rich-text-html-renderer/src/index.ts,packages/rich-text-html-renderer/src/escapeHtml.ts] LinkandResourceLinkare not interchangeable shapes. Code that readsdata.target.sys.idwill throw or silently misbehave on aResourceLinknode, which only hassys.urn. Branch onsys.typefirst. [packages/rich-text-types/src/types.ts]- Releases are tag-only, not commit-based.
nx release versionnever commits tomaster(an org-level ruleset blocks direct pushes tomaster, including from automation). Do not add a release step that expects a version-bump commit onmasterβ there isn't one. [.github/workflows/release.yaml]
- Do not hand-edit
packages/*/dist/β it is build output (prebuildrunsrimraf distbefore every build). [packages/*/package.jsonβscripts.prebuild] - Ask before changing
.github/workflows/release.yamlornx.jsonβreleaseconfig β a mistake here either breaks publishing or (per past incident) attempts amastercommit that the org ruleset will reject. - Ask before removing
contentful-slatejs-adapteror its non-standard build config (rollup.config.ts/jest.config.js, not extending roottsconfig.json) β it is actively released and no deprecation has been confirmed, even though its tooling diverges from the other six packages[NEEDS TEAM INPUT].
# Quick verification loop (source: package.json scripts)
pnpm install --frozen-lockfile && pnpm build && pnpm test && pnpm lint