🎯

document-guideline

🎯Skill

from synthesys-lab/assassyn

VibeIndex|
What it does

Guides AI agents in creating comprehensive, design-first documentation across design docs, READMEs, source code interfaces, and test cases with automated linting.

πŸ“¦

Part of

synthesys-lab/assassyn(9 items)

document-guideline

Installation

Shell ScriptRun shell script
./validate_target_dir.sh <target_dir> <mode>
πŸ“– Extracted from docs: synthesys-lab/assassyn
1Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

Instructs AI agents on documentation standards for design docs, folder READMEs, source code interfaces, and test cases

Overview

# Document Guideline

This skill instructs AI agents on how to maintain comprehensive documentation throughout

the development lifecycle. It defines documentation standards that are enforced via

pre-commit linting for structural requirements, while providing guidance on content

quality and workflow integration.

Documentation Philosophy

Good documentation is:

  • Comprehensive: Covers all code files, folders, and high-level designs
  • Enforced: Structural requirements validated automatically via pre-commit linting
  • Design-first: Documentation written before implementation (following TDD approach)
  • Milestone-friendly: Documentation-code inconsistency acceptable during incremental development
  • Self-descriptive: Each file, folder, and component documents its purpose and interfaces

Documentation Types

This project maintains three levels of documentation:

  1. High-level design documents (docs/*) - Architecture and design decisions
  2. Folder organization (folder README.md files) - Purpose and file organization
  3. Code interface documentation (.md companions to source files) - External and internal APIs

High-Level Design Documentation

Location: docs/* directory

Purpose: Document architectural decisions, design rationale, and high-level project structure.

When to create/update:

  • During planning phase (before implementation)
  • When making architectural decisions
  • When introducing new subsystems or major features
  • When documenting workflows or processes

Not enforced by linting: Creating design documents requires human judgment about

what constitutes a "high-level design" versus implementation details.

Content guidelines:

  • Focus on the "why" (design rationale) not just the "what"
  • Document alternatives considered and trade-offs
  • Include diagrams, workflows, or examples where helpful
  • Keep design docs synchronized with actual implementation

Examples of good design documents:

  • docs/git-msg-tags.md - Documents commit message tag standards
  • docs/developer.md - Developer workflow and contribution guidelines
  • docs/options.md - SDK configuration options and usage

When NOT to create design docs:

  • For simple implementation details (put in code .md files instead)
  • For temporary decisions or experiments
  • For information that duplicates existing documentation

Folder Organization Documentation

Requirement: Every folder (except hidden folders like .git) MUST have a README.md file.

Enforced by: Pre-commit linting (scripts/lint-documentation.sh)

Purpose: Document folder purpose and file organization so developers can quickly understand

the codebase structure.

When to create:

  • When creating a new folder in the project
  • Before committing any code that introduces a new directory

Required content:

  1. Folder purpose: What is this folder for? (1-2 sentences)
  2. File organization: What types of files are in this folder?
  3. Key files: Brief description of important files (optional)

Examples of good folder README.md:

```markdown

# Skills Directory

This directory contains all Claude Code skills that define AI agent behavior.

Organization

Each skill is in its own subdirectory with a SKILL.md file:

  • commit-msg/ - Skill for creating meaningful git commits
  • fork-dev-branch/ - Skill for creating development branches
  • milestone/ - Skill for incremental implementation with milestone commits

Adding New Skills

Create a new subdirectory and add a SKILL.md file with frontmatter defining

the skill name and description.

```

Format flexibility:

  • Can be brief (3-5 lines) for simple folders
  • Can be detailed for complex subsystems
  • Should reference key files if there are many files

Source Code Interface Documentation

Requirement: Every source code file MUST have a corresponding .md file documenting its interfaces.

File types requiring documentation (enforced by linting):

  • Python: .py β†’ .md
  • C/C++: .c, .cpp, .cxx, .cc β†’ *.md

Enforced by: Pre-commit linting (scripts/lint-documentation.sh)

Naming convention: Same prefix as source file

  • foo.py β†’ foo.md
  • bar.cpp β†’ bar.md
  • baz.c β†’ baz.md

Required sections:

1. External Interfaces (Public APIs)

Document all interfaces exposed to external callers:

  • Public functions/methods with signatures
  • Public classes/structures with key attributes
  • Module-level exports or entry points
  • Expected inputs and outputs
  • Error conditions and exceptions

2. Internal Helpers (Private APIs)

Document internal implementation details:

  • Private functions and their purpose
  • Internal data structures
  • Helper utilities
  • Algorithms or complex logic explanations

Example interface documentation:

```markdown

# validate_target_dir.sh

Script for validating target directories before SDK initialization.

External Interface

Command-line usage

```bash

./validate_target_dir.sh

```

Parameters:

  • target_dir: Path to directory to validate
  • mode: Either "init" or "update"

Exit codes:

  • 0: Validation passed
  • 1: Validation failed (directory issues)
  • 2: Invalid arguments

Output: Error messages to stderr listing validation failures

Internal Helpers

check_directory_exists()

Validates that the target directory exists.

check_write_permissions()

Validates that the user has write access to the directory.

check_conflicting_files()

Scans for files that would conflict with SDK initialization.

Returns list of conflicting file paths.

validate_init_mode()

Specific validation for "init" mode (directory must be empty or non-existent).

validate_update_mode()

Specific validation for "update" mode (directory must have existing SDK structure).

```

When implementation changes:

  • Update interface documentation to match
  • During milestones, temporary doc-code mismatch is acceptable (see below)
  • Before final delivery, all documentation must match implementation

Test Documentation

Requirement: Every test case MUST have documentation explaining what it tests.

Enforced by: Pre-commit linting (scripts/lint-documentation.sh)

Format options:

  1. Inline comments within the test file (preferred for simple tests)
  2. Companion .md file (for complex test suites)

Required content:

  • What is being tested (feature or behavior)
  • Expected outcome
  • Any setup or preconditions

Example with inline comments:

```bash

#!/bin/bash

# Test suite for documentation linting

# Tests that the linter correctly identifies missing documentation

set -e

# Test 1: Linter passes with complete documentation

# Expected: Exit code 0, no errors

test_complete_documentation() {

# Setup: Create temporary directory with all docs present

...

}

# Test 2: Linter fails when folder missing README.md

# Expected: Exit code 1, error message lists folder

test_missing_folder_readme() {

...

}

```

Example with companion .md file:

For test_documentation_lint.sh, create test_documentation_lint.md:

```markdown

# Documentation Linter Test Suite

Tests for scripts/lint-documentation.sh to verify it correctly validates

documentation completeness.

Test Cases

test_complete_documentation

Purpose: Verify linter passes when all documentation is present

Setup: Temporary directory with source files and corresponding .md files

Expected: Exit code 0, no error output

test_missing_folder_readme

Purpose: Verify linter catches folders without README.md

Setup: Create folder without README.md

Expected: Exit code 1, error message listing the folder

...

```

Linting check:

  • For bash test files (test_*.sh), linter checks for either:

- Inline comments following pattern # Test N: or # Test: or function comments

- Companion .md file with same prefix

Documentation-Code Consistency During Milestones

Design-First TDD Workflow

This project follows strict design-first test-driven development:

  1. Phase 1: Documentation - Update all relevant documentation first
  2. Phase 2: Tests - Write test cases based on documentation
  3. Phase 3: Implementation - Write code to make tests pass

Acceptable Documentation-Code Inconsistency

During milestone commits, documentation and code may be temporarily inconsistent:

Why this happens:

  • Documentation describes the final intended state
  • Implementation is incrementally catching up to match documentation
  • Tests are written based on documentation (may not all pass yet)

When it's acceptable:

  • During milestone commits: Documentation complete, implementation in progress
  • On development branches: Work is ongoing, not ready for final delivery
  • With explicit test status: Milestone commits show N/M tests passed

When it's NOT acceptable:

  • Final delivery commits: All tests must pass, docs must match code
  • Merging to main branch: Complete consistency required
  • Production releases: Documentation must accurately reflect implementation

Pre-commit Linting and Milestones

The documentation linter (scripts/lint-documentation.sh) runs as part of the

pre-commit hook and validates:

  • All folders have README.md
  • All source files have corresponding .md files
  • All test files have documentation

Bypassing the linter:

For milestone commits where documentation is complete but implementation is incomplete:

```bash

git commit --no-verify -m "milestone: ..."

```

The --no-verify flag bypasses all pre-commit hooks, including:

  • Documentation linting
  • Test execution

IMPORTANT: Only bypass for milestone commits on development branches. Never bypass

for final delivery commits or commits to main branch.

Milestone progression example:

```

Milestone 1: Documentation complete (bypass linting OK)

  • All .md files created and document final interfaces
  • Implementation: 0% complete
  • Tests: 0/10 passed (expected, no implementation yet)
  • Commit with: --no-verify

Milestone 2: Partial implementation (bypass linting OK)

  • Documentation: Still accurate for final state
  • Implementation: 60% complete
  • Tests: 6/10 passed
  • Commit with: --no-verify

Delivery: All tests pass (NO bypass)

  • Documentation: Matches implementation exactly
  • Implementation: 100% complete
  • Tests: 10/10 passed
  • Commit without: --no-verify (linter must pass)

```

Integration with Other Skills

This documentation guideline integrates with other project skills:

Integration with `plan-guideline` skill

When creating implementation plans, the plan-guideline skill references these

documentation standards:

  • Step 1 in plans should always be documentation updates
  • Plans should list specific .md files to create/update
  • Plans should note which documentation is enforced by linting

Integration with `milestone` skill

The milestone skill uses these guidelines for incremental development:

  • Milestone 1 always creates documentation first
  • --no-verify bypass acceptable for milestone commits
  • Milestone commits track test progress (N/M tests passed)
  • Final delivery requires all linting to pass

Integration with `commit-msg` skill

The commit-msg skill considers documentation standards:

  • Commits updating only documentation use [docs] tag
  • Milestone commits note test status in message
  • Delivery commits confirm all lints pass

Summary

Enforced by linting (structural requirements):

  • βœ… Folder README.md existence
  • βœ… Source code .md file correspondence
  • βœ… Test documentation presence

Guided by skill (content quality):

  • High-level design document creation
  • Interface documentation completeness
  • Explanation clarity and usefulness

Workflow integration:

  • Documentation written first (design-first TDD)
  • Temporary doc-code mismatch OK during milestones
  • All documentation must match code at delivery