docs — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited docs (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Write clear, consistent, and maintainable documentation for software projects.
Every project should have a README.md at the root with these sections:
# Project Name
One-sentence description of what the project does.
## Features
- Feature 1: brief description
- Feature 2: brief description
## Quick Start
### Prerequisites
- Requirement 1
- Requirement 2
### Installation
### Usage
## Configuration
| Variable | Description | Default |
|----------|-------------|---------|
| `VAR_NAME` | What it does | `default` |
## API Reference
Link to detailed API docs or inline summary.
## Contributing
Link to CONTRIBUTING.md or brief guidelines.
## License
License type with link.Rules:
Document APIs using these patterns:
#### REST APIs
## Endpoints
### POST /api/v1/users
Create a new user account.
**Request:**
{ "email": "[email protected]", "name": "Jane Doe", "role": "member" }
**Response (201 Created):**
{ "id": "usr_abc123", "email": "[email protected]", "name": "Jane Doe", "created_at": "2024-01-15T10:30:00Z" }
**Errors:**
| Status | Code | Description |
|--------|------|-------------|
| 400 | `invalid_email` | Email format is invalid |
| 409 | `email_exists` | Email already registered |#### CLI Tools
## Commands
### `tool init`
Initialize a new project.
**Usage:**
tool init [options] <project-name>
**Options:**
| Flag | Description | Default |
|------|-------------|---------|
| `--template, -t` | Template to use | `default` |
| `--yes, -y` | Skip prompts | `false` |
**Examples:**
tool init my-project
tool init my-project --template typescript
#### Function/Method Documentation
### `createUser(options: CreateUserOptions): Promise<User>`
Creates a new user in the system.
**Parameters:**
- `options.email` (string, required): User's email address
- `options.name` (string, required): User's display name
- `options.role` (enum, optional): User role. One of: `admin`, `member`, `viewer`. Default: `member`
**Returns:** `Promise<User>` - The created user object
**Throws:**
- `ValidationError` - If email is invalid
- `ConflictError` - If email already exists
**Example:**
const user = await createUser({ email: '[email protected]', name: 'Jane Doe' });
Use ADRs to document significant architectural decisions. Store in docs/adr/ or docs/decisions/.
#### ADR Template
# ADR-{NUMBER}: {TITLE}
## Status
{Proposed | Accepted | Deprecated | Superseded by ADR-XXX}
## Date
{YYYY-MM-DD}
## Context
What is the issue that we're seeing that is motivating this decision or change?
## Decision
What is the change that we're proposing and/or doing?
## Consequences
### Positive
- {benefit 1}
- {benefit 2}
### Negative
- {tradeoff 1}
- {tradeoff 2}
### Risks
- {risk 1}
## Alternatives Considered
### {Alternative 1}
{Description of alternative}
**Pros:** {benefits}
**Cons:** {drawbacks}
**Why rejected:** {reason}#### ADR Examples
# ADR-001: Use PostgreSQL as Primary Database
## Status
Accepted
## Date
2024-01-15
## Context
We need a relational database that supports complex queries, JSON storage, and has strong ecosystem support.
## Decision
We will use PostgreSQL as our primary database.
## Consequences
### Positive
- ACID compliance for transactional data
- Native JSON support for flexible schemas
- Excellent tooling and community support
### Negative
- Heavier operational overhead than SQLite
- Requires dedicated database server
### Risks
- Team needs to learn PostgreSQL-specific features
## Alternatives Considered
### SQLite
**Pros:** Zero config, embedded, fast for read-heavy workloads
**Cons:** Limited concurrency, no network access
**Why rejected:** Doesn't support concurrent writes from multiple servicesRules:
001, 002, etc.Follow Keep a Changelog format. File: CHANGELOG.md.
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/),
and this project adheres to [Semantic Versioning](https://semver.org/).
## [Unreleased]
### Added
- New feature description
### Changed
- Changes to existing functionality
### Deprecated
- Features that will be removed
### Removed
- Features that have been removed
### Fixed
- Bug fixes
### Security
- Vulnerability fixes
## [1.2.0] - 2024-01-15
### Added
- User authentication with JWT tokens
- Rate limiting on API endpoints
### Fixed
- Memory leak in connection pool
- Incorrect date formatting in exports
## [1.1.0] - 2024-01-01
### Added
- CSV export functionality
### Changed
- Improved query performance by 50%
## [1.0.0] - 2023-12-01
Initial stable release.Rules:
[Unreleased] section- Fix login timeout (#123)#### General Principles
#### When to Comment
// GOOD: Explains why
// Retry 3 times because the API intermittently fails under load
for i := 0; i < 3; i++ {
result, err := callAPI()
if err == nil {
return result
}
}
// BAD: Explains what (code is self-explanatory)
// Loop 3 times
for i := 0; i < 3; i++ {
// ...
}#### Documentation Comments
// ProcessOrder handles the complete order lifecycle including payment
// processing, inventory allocation, and shipping notification.
//
// It returns an error if any step fails, but partial side effects
// may have occurred (e.g., payment charged but not shipped).
//
// See: https://docs.internal.com/orders/lifecycle
func ProcessOrder(ctx context.Context, orderID string) error {
// ...
}#### TODO/FIXME Format
// TODO(username): description [ticket-id]
// FIXME(username): description [ticket-id]
// HACK(username): temporary workaround for #123
// Examples:
// TODO(jane): add retry logic for transient failures [PROJ-456]
// FIXME(bob): remove after API v1 deprecation [PROJ-789]code blocks for commands, paths, and codeoth)When documentation is outdated:
[Unreleased] > FixedWhen documentation conflicts with code:
For major documentation overhauls:
Input: User asks "Write a README for my project"
Process:
package.json, go.mod, or similar to understand the projectOutput:
# myproject
A fast, lightweight JSON parser for Go.
## Quick Start
go get github.com/user/myproject
import "github.com/user/myproject"
data, err := myproject.Parse(jsonString)
## Features
- Streaming parser for large files
- Zero allocations in hot path
- Full RFC 8259 complianceInput: User asks "Document why we chose Redis"
Process:
docs/adr/003-use-redis-for-caching.md~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.