feature-file by aiskillstore
Manage features.yml for tracking requirements and progress; use proactively ONLY when features.yml already exists, or invoke manually to create one; complements TodoWrite for persistent project state.
Content & Writing
85 Stars
2 Forks
Updated Jan 19, 2026, 04:39 AM
Why Use This
This skill provides specialized capabilities for aiskillstore's codebase.
Use Cases
- Developing new features in the aiskillstore repository
- Refactoring existing code to follow aiskillstore standards
- Understanding and working with aiskillstore's codebase structure
Install Guide
2 steps- 1
Skip this step if Ananke is already installed.
- 2
Skill Snapshot
Auto scan of skill assets. Informational only.
Valid SKILL.md
Checks against SKILL.md specification
Source & Community
Skill Stats
SKILL.md 270 Lines
Total Files 1
Total Size 0 B
License NOASSERTION
---
name: feature-file
description: Manage features.yml for tracking requirements and progress; use proactively ONLY when features.yml already exists, or invoke manually to create one; complements TodoWrite for persistent project state.
---
# Feature File Management
Manage `features.yml` - a waterfall-style planning document combining structured requirements tracking with incremental development.
## Quick Reference
```yaml
feature: "Feature Name"
phase: Requirements | Design | Implementation | Testing | Complete
version: 1
changelog: |
## [1]
### Added
- Initial feature
decisions:
- Decision rationale
known-issues:
- Known bug or limitation
requirements:
req-id:
description: "When X, the system SHALL Y"
status: Not-Started | In-Progress | Needs-Work | Complete
tested-by: [test-id]
test-cases:
test-id:
name: "test_function_name"
file: "tests/test_file.py"
description: "Given X, when Y, then Z"
passing: true | false
type: unit | [integration, rainy-day] # optional, string or list
---
# Next feature...
```
See `references/schema.md` for complete field documentation.
## Proactive Usage
This skill should be used automatically when features.yml exists.
### Before Starting Implementation
1. Check if `features.yml` exists in project root
2. If missing: do not use this skill proactively (stop here)
3. **Plan the work in features.yml before writing code:**
- Add/update the feature with all requirements extracted from the user's request
- Add anticipated test cases to `test-cases` (with `passing: false`)
- Document design decisions in `decisions` if non-trivial choices are involved
4. Set the first requirement to `status: In-Progress`
### During Implementation
- Update `status` to `Complete` as requirements are finished
- Add test cases to `test-cases` when writing tests
- Update `passing` field after running tests
- Add discovered issues to `known-issues`
### After Completing Work
- Verify all implemented requirements are marked `Complete`
- Run `./scripts/feature-status.py --validate` to check consistency
- Commit features.yml changes with the implementation
### Relationship with TodoWrite
| Tool | Purpose | Persistence |
|------|---------|-------------|
| TodoWrite | Immediate session actions | Ephemeral |
| features.yml | Requirements and progress | Persistent (in repo) |
Use both: TodoWrite for what to do now, features.yml for durable project state.
## Phase Transitions
| From | To | Conditions |
|------|----|------------|
| Requirements | Design | All requirements have descriptions |
| Design | Implementation | `decisions` field exists (use `[]` if none needed) |
| Implementation | Testing | All requirements `In-Progress` or `Complete` |
| Testing | Complete | All requirements `Complete` AND all tests `passing: true` |
Scripts validate these rules and report errors.
## Workflows
### Agent Workflow (Condensed)
1. `ls features.yml` → exists? Read it : Create it
2. **Plan first**: Add feature, requirements, test-cases, decisions
3. Set first requirement `status: In-Progress`
4. Implement, then set `status: Complete`
5. Run tests, update `passing` status
6. `./scripts/feature-status.py --validate`
7. Commit with implementation changes
### Creating a New Feature File
1. Create `features.yml` with first feature:
```yaml
feature: "Feature Name"
phase: Requirements
version: 1
changelog: |
## [1]
### Added
- Initial planning
requirements:
req-1:
description: "Requirement description using EARS syntax"
status: Not-Started
```
2. Run `./scripts/feature-status.py` to validate structure
**Minimal start** (for quick bootstrapping during implementation):
```yaml
feature: "Feature Name"
phase: Implementation
version: 1
changelog: |
## [1]
### Added
- Initial implementation
requirements:
req-1:
description: "Requirement from user request"
status: In-Progress
```
### Building from Existing Codebase
1. Identify logical feature boundaries in the code
2. For each feature:
- Create feature document, set `phase` based on current maturity
- Extract requirements from code behavior, comments, documentation
- Discover existing tests and add to `test-cases`
- Link tests to requirements via `tested-by`
- Set `status` based on implementation state and test coverage
3. Run `./scripts/feature-status.py --validate` to check consistency
4. Run `./scripts/extract-work.py` to see gaps
### Development Workflow (Incremental Progress)
Work on ONE requirement at a time:
1. Run `./scripts/extract-work.py` to see incomplete requirements
2. Pick highest priority requirement, update `status: In-Progress`
3. Implement the requirement
4. Write/update tests, add to `test-cases` with `passing: false`
5. Run tests, update `passing: true` when passing
6. Update requirement `status: Complete`
7. Run `./scripts/feature-status.py` to check phase advancement eligibility
8. Repeat
### Version Management
1. Run `./scripts/check-version.py` to check for needed bumps
2. If bump recommended:
- Increment `version` field
- Add new changelog section:
```yaml
changelog: |
## [2]
### Added
- New capability
## [1]
...
```
- Commit the update
## Scripts
All scripts read from `features.yml` in current directory. Scripts are executable and use inline dependencies via `uv run --script`.
### feature-status.py
Overview of all features with progress and test status (with breakdown by type if defined).
```bash
./scripts/feature-status.py # Plain text output
./scripts/feature-status.py --format markdown # Markdown table
./scripts/feature-status.py --validate # Exit 1 if validation errors
```
### extract-work.py
List requirements needing work (status != Complete).
```bash
./scripts/extract-work.py # All incomplete
./scripts/extract-work.py --phase Implementation
./scripts/extract-work.py --status In-Progress
./scripts/extract-work.py --format markdown
```
### extract-issues.py
List known issues across all features.
```bash
./scripts/extract-issues.py
./scripts/extract-issues.py --format json
```
### check-version.py
Check git history to see if versions need bumping.
```bash
./scripts/check-version.py
```
Compares when feature sections were last modified vs when `version` was last set.
## Best Practices
- **One requirement at a time**: Complete and verify before starting next
- **Update status immediately**: Keep file in sync with actual state
- **Document decisions**: Capture rationale in `decisions` before implementation
- **Track known issues**: Document bugs and limitations in `known-issues`
- **Bump version on requirement changes**: Any add, modify, or remove
- **Use EARS syntax** for requirements: "When X, the system SHALL Y"
- **Use Given/When/Then** for test descriptions
## Change Management
All requirement changes require a version bump. This ensures traceability and clear history.
### Adding Requirements to Existing Feature
1. Add requirement with `status: Not-Started`
2. Increment `version` field
3. Add changelog entry under `### Added`
4. If feature is past Design phase, consider whether new requirement needs design review
### Modifying Existing Requirements
1. Document rationale for the change
2. Update requirement `description`
3. Update `status`:
- If was `Complete`: set to `Needs-Work`
- Otherwise: keep current status
4. Review affected test cases in `tested-by` - update or mark as needing revision
5. Increment `version` field
6. Add changelog entry under `### Changed`
### Deprecating/Removing Requirements
1. Document rationale
2. Either:
- Remove requirement entirely, OR
- Move to `known-issues` as historical note (e.g., "req-x removed: no longer needed")
3. Remove or update associated test cases
4. Increment `version` field
5. Add changelog entry under `### Removed`
### Version Bump Triggers
Always bump version when:
- Adding, modifying, or removing requirements
- Shipping a milestone
- Significant scope changes
- Phase transitions to `Complete`
Name Size