{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "autocode-features-v1", "title": "Autocode Features Schema", "description": "Schema for FEATURES.json - Multi-feature project tracking for agent-first engineering workflows", "type": "object", "required": ["$schema", "project", "description", "created", "updated", "features"], "properties": { "$schema": { "type": "string", "description": "Relative path to this schema file (e.g., './schemas/autocode-features-v1.schema.json')" }, "project": { "type": "string", "description": "Project name", "minLength": 1 }, "description": { "type": "string", "description": "High-level project description", "minLength": 1 }, "created": { "type": "string", "format": "date-time", "description": "ISO 8601 timestamp when FEATURES.json was created" }, "updated": { "type": "string", "format": "date-time", "description": "ISO 8601 timestamp of last update" }, "features": { "type": "array", "description": "List of features in this project", "items": { "$ref": "#/definitions/feature" } } }, "additionalProperties": true, "definitions": { "feature": { "type": "object", "required": ["id", "name", "description", "complexity", "verification_mode", "status", "priority"], "properties": { "id": { "type": "string", "pattern": "^F\\d{3}$", "description": "Feature ID (e.g., F001, F042)" }, "name": { "type": "string", "description": "Short feature name", "minLength": 1 }, "description": { "type": "string", "description": "Detailed feature description", "minLength": 1 }, "complexity": { "type": "string", "enum": ["simple", "standard", "complex"], "description": "Feature complexity level. Determined by predictability, not just size: simple = known files, existing pattern, no new interfaces; standard = some unknowns, 4-6 files; complex = significant unknowns, 6+ files. Simple features get an inline_spec planning hint." }, "verification_mode": { "type": "string", "enum": ["mvp", "standard", "production"], "description": "Verification rigor level" }, "status": { "type": "string", "enum": [ "not_started", "planning", "verification_planning", "ready", "in_progress", "verifying", "complete", "blocked", "paused" ], "description": "Current feature status" }, "priority": { "type": "integer", "minimum": 1, "description": "Feature priority (lower number = higher priority)" }, "dependencies": { "type": "array", "description": "List of feature IDs this feature depends on", "items": { "type": "string", "pattern": "^F\\d{3}$" }, "default": [] }, "docs": { "type": "object", "description": "Links to durable planning docs that inform this feature slice", "properties": { "delegation_brief": { "type": ["string", "null"], "description": "Path to Delegation Brief (recommended): docs/delegation-briefs/.md" }, "discovery_json": { "type": ["string", "null"], "description": "Path to discovery JSON (taste/system boundary): docs/discovery/.json" }, "discovery_md": { "type": ["string", "null"], "description": "Path to discovery markdown: docs/discovery/.md" }, "delivery_spec": { "type": ["string", "null"], "description": "Path to delivery spec: docs/delivery-specs/.md" }, "design_doc": { "type": ["string", "null"], "description": "Path to design doc/ADR: docs/design-docs/.md" } }, "additionalProperties": true }, "progress": { "type": "object", "description": "Implementation and verification progress tracking", "required": ["implementation_steps", "verification_tests"], "properties": { "implementation_steps": { "type": "object", "required": ["total", "completed"], "properties": { "total": { "type": "integer", "minimum": 0 }, "completed": { "type": "integer", "minimum": 0 } } }, "verification_tests": { "type": "object", "required": ["total", "passed"], "properties": { "total": { "type": "integer", "minimum": 0 }, "passed": { "type": "integer", "minimum": 0 } } } } }, "specs": { "type": "object", "description": "Paths to implementation and verification spec files", "properties": { "implementation": { "type": ["string", "null"], "description": "Path to implementation spec (e.g., specs/F001-IMPLEMENTATION_SPEC.md)" }, "verification": { "type": ["string", "null"], "description": "Path to verification spec (e.g., specs/F001-VERIFICATION_SPEC.md)" }, "review": { "type": ["string", "null"], "description": "Path to spec review report (optional)" } } }, "inline_spec": { "type": "object", "description": "Planning-phase hint for simple features. Provides file paths for early /parallel-plan overlap analysis and pre-seeds context for the implementation planner. Not an execution plan — a lightweight spec via autocode-implementation-planner is still required before /autocode-next-step.", "properties": { "files": { "type": "array", "description": "File paths this feature will touch. Used by /parallel-plan for overlap analysis (Source 2) and by the implementation planner as pre-seeded entry points.", "items": { "type": "string" } }, "description": { "type": "string", "description": "Brief description of the change. Used by the implementation planner as the feature description when none is provided by the user." }, "verification": { "type": "string", "description": "How to verify this feature works (e.g., 'Visual inspection', 'Manual review'). Informational — the implementation planner generates a proper VERIFICATION_SPEC.md." } } }, "timestamps": { "type": "object", "description": "Feature lifecycle timestamps", "properties": { "planned": { "type": ["string", "null"], "format": "date-time" }, "verification_planned": { "type": ["string", "null"], "format": "date-time" }, "started": { "type": ["string", "null"], "format": "date-time" }, "completed": { "type": ["string", "null"], "format": "date-time" } } }, "verification_evidence": { "type": ["object", "null"], "description": "Evidence that verification passed", "properties": { "mode": { "type": "string", "enum": ["mvp", "standard", "production", "manual"] }, "tests_run": { "type": "integer", "minimum": 0 }, "tests_passed": { "type": "integer", "minimum": 0 }, "timestamp": { "type": "string", "format": "date-time" }, "command": { "type": "string" }, "verifier_result": { "type": "string", "enum": ["approved", "rejected", "needs_revision"] }, "notes": { "type": "string" } } }, "user_interview": { "type": "object", "description": "User interview responses for discovery phase", "properties": { "conducted": { "type": "string", "format": "date-time" }, "skipped": { "type": "boolean" }, "skip_reason": { "type": ["string", "null"] }, "value": { "type": "object", "properties": { "question": { "type": "string" }, "response": { "type": "string" } } }, "experience": { "type": "object", "properties": { "question": { "type": "string" }, "delights": { "type": "array", "items": { "type": "string" } }, "frustrations": { "type": "array", "items": { "type": "string" } } } }, "maturity": { "type": "object", "properties": { "question": { "type": "string" }, "response": { "type": "string" }, "rationale": { "type": "string" } } } } }, "user_value": { "type": ["object", "null"], "description": "User-facing value proposition", "properties": { "summary": { "type": "string" }, "how_to_access": { "type": "string" }, "demo_url": { "type": ["string", "null"] }, "demo_command": { "type": ["string", "null"] } } }, "demo": { "type": ["object", "null"], "description": "Executable demo metadata and proof-boundary status. Used by /feature-demo to distinguish what was verified in the demo run vs what still needs user verification.", "properties": { "path": { "type": ["string", "null"], "description": "Path to generated demo markdown (e.g., specs/F001-DEMO.md)" }, "generated_at": { "type": ["string", "null"], "format": "date-time", "description": "When the demo document was last generated" }, "mode": { "type": "string", "enum": [ "local_cli", "interactive_ui", "artifact_build", "infra_release", "manual_external" ], "description": "Primary demo surface. local_cli = direct local command; interactive_ui = local server/browser flow; artifact_build = local artifact/build proof; infra_release = release/CI/CD with local proxy proof + external checks; manual_external = mostly user-run/manual verification" }, "status": { "type": "string", "enum": ["generated", "partial", "manual_only", "failed"], "description": "Outcome of the most recent demo generation attempt" }, "requires_user_verification": { "type": "boolean", "description": "Whether the feature still needs user-run verification outside the demo run" }, "verification_surfaces": { "type": "array", "description": "Named proof surfaces the demo should cover or explicitly hand off (e.g., local_build, github_actions, pypi, clean_machine_upgrade)", "items": { "type": "string" } }, "evidence_refs": { "type": "array", "description": "Paths or doc refs pointing to prior verification evidence the demo may cite as already verified", "items": { "type": "string" } }, "note": { "type": "string", "description": "Optional concise note explaining partial/manual proof boundaries" } } } }, "additionalProperties": true } } }