functional-specification

SKILL.md

Functional Specification Document (FSD)

Role

Act as an expert System Analyst & Software Architect. Produce a comprehensive FSD that describes what the system must do and why, without implementation code.

Content Rules

  • NO CODE SAMPLES — Provide only explanations, conceptual descriptions, and structured information.
  • NO CODE BLOCKS — Replace code with detailed textual descriptions of functionality and logic flow.
  • Use clear, developer-friendly language focused on "what" and "why", not "how" in code terms.
  • Prioritize architectural understanding and system relationships over implementation details.
  • The FSD must remain technology-aware but not implementation-dependent — describe functional behavior realizable across Laravel, Golang, Node.js, MySQL, Redis, and MongoDB.

Formatting Rules

  • Diagrams — Use Mermaid format exclusively for all visuals (architecture, sequence, flowcharts, ERDs).
  • Structured Data — Present database schemas, endpoint lists, API specs, and permission matrices in table format.
  • Output — All documentation in markdown format.

Workflow

Step 1: Gather System Context

Before generating the FSD, collect or infer:

  1. System name and brief description
  2. Core modules/features to document
  3. User roles and their interactions
  4. Business rules and constraints
  5. Integration points (external systems, APIs)

If information is missing, state assumptions explicitly under "Assumptions & Constraints".

Step 2: Analyze the Codebase

When a codebase is available, examine it to extract:

  • Route definitions and endpoint structures
  • Middleware and authentication flows
  • Model relationships and data entities
  • Validation rules and business logic
  • Event/queue handlers and async workflows

Use this analysis to inform the FSD content — translate code behavior into functional descriptions.

Step 3: Generate the FSD

Follow the structure defined in references/fsd-structure.md.

For each module/feature, document:

  1. Normal flow — Standard successful path
  2. Exception flow — Error handling and edge cases
  3. System validation behavior — Input validation, business rule enforcement

Step 4: Apply Governance Rules

Apply all rules from references/governance-rules.md:

  • Requirement IDs: FR-[Module]-[Number]
  • Acceptance criteria reference corresponding requirement IDs
  • Data entities in requirements must exist in Data Structure tables
  • API endpoints must map to functional modules
  • No features outside the given system description
  • Edge cases and failure scenarios explicitly documented

Step 5: Validate the Output

Run the validation script to check FSD consistency:

python scripts/validate_fsd.py "docs/FSD - [Feature Name].md"

Fix any reported issues before finalizing. The validator checks:

  • Structural completeness (all required sections present)
  • Requirement ID format compliance
  • Cross-reference integrity (requirements ↔ acceptance criteria ↔ data structures ↔ APIs)
  • Mermaid diagram syntax
  • Table format consistency

File Organization

Each FSD must specify:

  • Documentation output path: /docs/
  • File name: FSD - [Feature Name].md

For multi-module systems, a single consolidated file is preferred. If the system is very large, split into module-specific files under /docs/fsd/ and maintain an index.

Quick Reference: FSD Sections

# Section Purpose
1 Introduction Purpose, scope, audience, definitions
2 System Overview High-level description, assumptions, constraints
3 Functional Requirements Numbered requirements grouped by module, prioritized
4 Non-Functional Requirements Performance, security, scalability, usability
5 Acceptance Criteria Testable conditions per feature
6 Appendix Flow diagrams, data structures, API specs, permissions, UI refs

Reference Materials

Validation Script

Weekly Installs
3
First Seen
13 days ago
Installed on
opencode3
claude-code3
github-copilot3
codex3
kimi-cli3
gemini-cli3