fcode-code-validation

Checks your app before launch by running safety tests and writing a pass-or-fail report so you know it is ready to ship.

Installation
Run `npx skills add "https://github.com/factorialco/factorial-code-skills" --skill "fcode-code-validation"` to install this skill, then follow its SKILL.md instructions for my next request.

Paste this into Claude Code, Cursor, or any agent that can run commands.

SKILL.mdShow the author's original SKILL.md
---
name: fcode-code-validation
description: Pre-production review of a Factorial Code app — clone the workspace read-only, run the static check catalog, classify findings as Blocker/Warning/Suggestion, and write APP_VALIDATION_REPORT.md with a ✅/❌ promotion verdict. Use when validating, reviewing, or auditing a Factorial Code (fcode) app or workspace before a release, or when asked whether an app is ready to ship.
license: MIT
metadata:
  category: factorial-code
---

# Factorial Code — App validation

A pre-flight for the platform's own release validation (its criteria are in
`fcode-ama` references/journey.md §8), run locally before the release is
requested, adding the review dimensions a human gatekeeper would: forms and
lifecycle, i18n, logging hygiene, security.

It serves two audiences with the same procedure: an app developer
self-checking before requesting a release, and a platform reviewer gating
one. Either way the input is a workspace ("team") slug and the output is
`APP_VALIDATION_REPORT.md` in the cloned workspace plus a ✅/❌ verdict in
chat.

This skill owns only the procedure, the check catalog, the severities, and
the report format. Every *rule* it checks is owned by another skill and
cited on the catalog row — read the owner when a finding needs context.

## Gotchas

- **This review is read-only.** The only permitted writes are the clone
  itself and `APP_VALIDATION_REPORT.md`. Never `fcode push`, never
  `--force`, never `settings:versions:create` / `settings:aliases:set`, never edit
  workspace files, never `fcode add` the report.
- **Never `fcode run` during the review.** Processes may call real APIs
  with credentials inherited from parent workspaces
  (`fcode-core-concepts`). This is a *static* review of code and config.
- **The clone slug is an encoded `dev-…` token, not the app's UUID** from
  the browser URL — copy it from the app's "How to build locally" guide on
  its Development tab (see `fcode-cli`). A UUID-shaped slug will not clone.
- **Any Blocker → ❌.** Warnings and Suggestions never flip the verdict.
- **Ambiguity blocks the review.** If the user names a development team
  with several apps, or it's unclear which workspace (`dev-` / `deploy-` /
  `prod-`) to review, list the candidates and ask before cloning. `dev-` is
  the normal review target.
- **`********` placeholders in pulled variables are normal** — a masked
  secret is never a finding, and the review never needs real secret values.
  Never ask for them.
- **A failing `fcode clone`** usually means UUID confusion or missing
  access — point at the access flow in `fcode-ama`; don't retry blindly.
- **A mixed JS/Python workspace is fine** — review each process with its
  own language's rules and note the mix in the report header.
- **Review only what the workspace owns.** Inherited resources — modules,
  processes, and variables from `parentTeams` parents,
  `variables.inherited.env`, `i18n/<locale>.inherited.yaml` — were already
  validated when their owning workspace was published. Don't audit their
  content; findings may only concern how *this* workspace uses them.

## Severity model

| Severity | Meaning | Effect on verdict |
|---|---|---|
| Blocker | Breaks at runtime, mishandles credentials, or fails a criterion the platform release gate checks | Any one → ❌ |
| Warning | Violates a documented rule; expect reviewer pushback or future breakage | Advisory |
| Suggestion | Improvement aligned with platform conventions | Advisory |

## Procedure

1. **Resolve the workspace.** Confirm the slug is the encoded token (see
   Gotchas) and which workspace kind it is; disambiguate with the user when
   needed. Record the kind in the report header.
2. **Acquire.** Missing CLI: ask the user, then
   `pnpm install -g @factorialco/fcode-cli` — the one permitted install.
   Fresh copy: `fcode clone <workspace-slug> --skipSkillsSetup`. Already
   cloned: `fcode pull`; on divergence never `--force` — ask whether to
   review the local state as-is and record the answer in the report header.
3. **Inventory** (read-only). Detect the language per process (`index.js`
   vs `main.py`). List processes, modules, `appRole`s, and webhook/form
   settings from each `processes/<slug>/metadata.json`; read `settings.json`,
   the three variables files, `variables.meta.json`, and `i18n/`. Run
   `fcode status`, `fcode variables:status`, `fcode settings:status`, and
   `fcode i18n:status`. Separate owned from inherited as you go — the
   catalog applies to owned resources only (see Gotchas).
4. **Run the check catalog.** Read `references/checks.md` and evaluate
   every check against the inventory, recording `file:line` evidence.
   Whether step 2 was a fresh clone or a pre-existing local workspace
   decides if the STRUCT layout checks run fully or are marked
   "N/A — fresh clone".
5. **Classify.** Apply each catalog row's severity; deviate only where the
   row allows it, and say why in the finding.
6. **Write the report** to `<workspace>/APP_VALIDATION_REPORT.md` following
   `references/report-template.md`, overwriting any previous run.
7. **Print the verdict in chat**: the ✅/❌ line, per-severity counts, and
   the Blocker titles.

## Check categories

`STRUCT` · `LANG` · `FORM` · `I18N` · `SEC` · `REUSE` · `LOG` · `LIFE` ·
`REL` — the full catalog, with per-check severities and owner citations, is
in `references/checks.md`.

Ships with 2 supporting files:

  • references/checks.md
  • references/report-template.md

Mirrored from the author's public source. Install counts from the open skills registry.

The systems behind these skills get built for partners every week.

Partner with us