Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions docs-cms/adr/adr-001-pydantic-schema-validation.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
created: '2025-10-26'
created: 2025-10-26T02:35:12Z
deciders: Engineering Team
doc_uuid: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d
id: adr-001
Expand All @@ -11,7 +11,6 @@ tags:
- schema
- validation
title: Use Pydantic for Frontmatter Schema Validation
updated: 2026-01-26
---

# ADR-001: Use Pydantic for Frontmatter Schema Validation
Expand All @@ -31,9 +30,7 @@ Different doc types (ADR, RFC, Memo) need different required fields. Pydantic gi
```python
class ADRFrontmatter(BaseModel):
status: Literal["Proposed", "Accepted", "Deprecated", "Superseded"]
created: 2025-10-26
updated: 2026-01-26
date: datetime.date
created: datetime.datetime # ISO 8601 format
deciders: str = Field(min_length=1)

@field_validator("id")
Expand Down
3 changes: 1 addition & 2 deletions docs-cms/adr/adr-002-click-cli-framework.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
created: '2025-10-26'
created: 2025-10-26T02:35:12Z
deciders: Engineering Team
doc_uuid: b2c3d4e5-f6a7-4b6c-9d0e-1f2a3b4c5d6e
id: adr-002
Expand All @@ -11,7 +11,6 @@ tags:
- click
- command-line
title: Use Click for CLI Framework
updated: 2026-01-26
---

# ADR-002: Use Click for CLI Framework
Expand Down
3 changes: 1 addition & 2 deletions docs-cms/adr/adr-003-pytest-tmp-path-testing.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
created: '2025-10-26'
created: 2025-10-26T02:35:12Z
deciders: Engineering Team
doc_uuid: a04e65be-7296-4051-8a64-98cca8abcdb0
id: adr-003
Expand All @@ -11,7 +11,6 @@ tags:
- testing
- tmp-path
title: Use pytest with tmp_path for Testing
updated: 2026-01-26
---

# ADR-003: Use pytest with tmp_path for Testing
Expand Down
3 changes: 1 addition & 2 deletions docs-cms/prd/prd-001-validation-framework.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
author: Engineering Team
created: '2025-10-26'
created: 2025-10-26T02:35:12Z
doc_uuid: e5f6a7b8-c9d0-4e9f-2a3b-4c5d6e7f8a9b
id: prd-001
project_id: docuchango
Expand All @@ -11,7 +11,6 @@ tags:
- product
- validation
title: 'Docuchango: Documentation Validation Tool'
updated: 2026-01-26
---

# PRD-001: Docuchango
Expand Down
1 change: 0 additions & 1 deletion docs-cms/rfcs/rfc-001-document-template-system.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ tags:
- standards
- templates
title: Document Template System
updated: 2025-01-26
---

# RFC-001: Document Template System
Expand Down
13 changes: 4 additions & 9 deletions docuchango/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,11 +191,9 @@ class ADRFrontmatter(BaseModel):
- project_id: Project identifier from docs-project.yaml (e.g., "my-project")
- doc_uuid: Unique identifier for backend tracking (UUID v4 format)

DERIVED FIELDS (computed from git history):
- updated: Last modification date, derived from git commit history

DEPRECATED FIELDS (supported for backwards compatibility):
- date: Legacy field, use 'created' instead. Will be auto-migrated.
- updated: No longer stored. Derive from git history with: git log -1 --format=%aI <file>
"""

title: str = Field(
Expand Down Expand Up @@ -283,8 +281,7 @@ class RFCFrontmatter(BaseModel):
- project_id: Project identifier from docs-project.yaml (e.g., "my-project")
- doc_uuid: Unique identifier for backend tracking (UUID v4 format)

DERIVED FIELDS (computed from git history):
- updated: Last modification date, derived from git commit history
NOTE: The 'updated' field is no longer stored. Derive from git: git log -1 --format=%aI <file>
"""

title: str = Field(
Expand Down Expand Up @@ -369,8 +366,7 @@ class MemoFrontmatter(BaseModel):
- project_id: Project identifier from docs-project.yaml (e.g., "my-project")
- doc_uuid: Unique identifier for backend tracking (UUID v4 format)

DERIVED FIELDS (computed from git history):
- updated: Last modification date, derived from git commit history
NOTE: The 'updated' field is no longer stored. Derive from git: git log -1 --format=%aI <file>
"""

title: str = Field(
Expand Down Expand Up @@ -453,8 +449,7 @@ class PRDFrontmatter(BaseModel):
- project_id: Project identifier from docs-project.yaml (e.g., "my-project")
- doc_uuid: Unique identifier for backend tracking (UUID v4 format)

DERIVED FIELDS (computed from git history):
- updated: Last modification date, derived from git commit history
NOTE: The 'updated' field is no longer stored. Derive from git: git log -1 --format=%aI <file>
"""

title: str = Field(
Expand Down
1 change: 0 additions & 1 deletion docuchango/templates/adr-000-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
title: Title Goes Here
status: Proposed
created: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))"
updated: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))"
deciders: Engineering Team # team or person who made the decision
tags: [architecture, design]
id: adr-000 # lowercase adr-XXX format matching filename
Expand Down
1 change: 0 additions & 1 deletion docuchango/templates/memo-000-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
title: Title Goes Here
author: Engineering Team # git config user.name
created: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))"
updated: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))"
tags: [memo, technical]
id: memo-000 # lowercase memo-XXX format matching filename
project_id: my-project # from docs-project.yaml
Expand Down
1 change: 0 additions & 1 deletion docuchango/templates/prd-000-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ title: Title Goes Here
status: Draft
author: Product Team # git config user.name
created: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))"
updated: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))"
target_release: v1.0.0
tags: [feature, product]
id: prd-000 # lowercase prd-XXX format matching filename
Expand Down
1 change: 0 additions & 1 deletion docuchango/templates/rfc-000-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ title: Title Goes Here
status: Draft
author: Engineering Team # git config user.name
created: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))"
updated: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))"
tags: [rfc, design]
id: rfc-000 # lowercase rfc-XXX format matching filename
project_id: my-project # from docs-project.yaml
Expand Down
2 changes: 0 additions & 2 deletions examples/docs-cms/fix_frontmatter.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ title: Automated Documentation Generation from Code
status: Draft
author: Claude Code Agent
created: 2025-10-27
updated: 2025-10-27
tags: [rfc, automation, documentation, tooling]
project_id: example-project
doc_uuid: 4a5b6c7d-8e9f-4012-8345-6789abcdef01
Expand All @@ -56,7 +55,6 @@ id: memo-001
title: docs-cms System Launch Status
author: Project Team
created: 2025-10-27
updated: 2025-10-27
tags: [memo, status-update, launch]
project_id: example-project
doc_uuid: 4b5c6d7e-8f90-4123-8456-789abcdef012
Expand Down
14 changes: 8 additions & 6 deletions examples/docs-cms/memos/memo-001-docs-cms-launch.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
---
id: memo-001
title: docs-cms System Launch Status
author: Project Team
created: 2025-10-27
updated: 2025-10-27
tags: [memo, status-update, launch]
project_id: example-project
doc_uuid: 4b5c6d7e-8f90-4123-8456-789abcdef012
---
id: memo-001
project_id: example-project
tags:
- memo
- status-update
- launch
title: docs-cms System Launch Status
---
17 changes: 10 additions & 7 deletions examples/docs-cms/rfcs/rfc-001-automated-doc-generation.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
---
id: rfc-001
title: Automated Documentation Generation from Code
status: Draft
author: Claude Code Agent
created: 2025-10-27
updated: 2025-10-27
tags: [rfc, automation, documentation, tooling]
project_id: example-project
doc_uuid: 4a5b6c7d-8e9f-4012-8345-6789abcdef01
---
id: rfc-001
project_id: example-project
status: Draft
tags:
- rfc
- automation
- documentation
- tooling
title: Automated Documentation Generation from Code
---
1 change: 0 additions & 1 deletion examples/docs-cms/templates/adr-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ id: adr-NNN
title: Brief decision title
status: Proposed
created: YYYY-MM-DD
updated: YYYY-MM-DD
deciders: Engineering Team
tags: [architecture, decision]
project_id: your-project-id
Expand Down
1 change: 0 additions & 1 deletion examples/docs-cms/templates/memo-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
id: memo-NNN
title: Memo title
created: YYYY-MM-DD
updated: YYYY-MM-DD
author: Your Name
tags: [memo]
project_id: your-project-id
Expand Down
1 change: 0 additions & 1 deletion examples/docs-cms/templates/rfc-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ id: rfc-NNN
title: Proposal title
status: Draft
created: YYYY-MM-DD
updated: YYYY-MM-DD
author: Your Name
tags: [rfc, proposal]
project_id: your-project-id
Expand Down
4 changes: 1 addition & 3 deletions templates/adr-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ slug: adr-XXX-brief-description # URL-friendly slug (lowercase-with-dashes)
title: "ADR-XXX: Decision Title" # Must start with "ADR-XXX:" where XXX is 3-digit number
status: Proposed # Valid values: Proposed, Accepted, Deprecated, Superseded, Implemented
created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date ADR was first created, DO NOT CHANGE after initial creation
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps
updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes
# Auto-updated with: docuchango fix timestamps
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps
author: Your Name # Person or team who wrote this ADR (e.g., "Jacob Repp", "Platform Team")
# Generate: git config user.name
deciders: Your Name # Team or person who made the decision (e.g., "Core Team", "Platform Team", "John Smith")
Expand Down
4 changes: 1 addition & 3 deletions templates/frd-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ slug: frd-XXX-feature-name # URL-friendly slug (lowercase-with-dashes)
title: "FRD-XXX: Feature Name" # Must start with "FRD-XXX:" where XXX is 3-digit number
status: Draft # Valid values: Draft, In Review, Approved, In Progress, Completed, Cancelled
created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date FRD was first created, DO NOT CHANGE after initial creation
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps
updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes
# Auto-updated with: docuchango fix timestamps
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps
author: Product Manager Name # Person or team who wrote this FRD (e.g., "Jane Smith", "Product Team")
# Generate: git config user.name
tags: ["feature", "requirements"] # List of lowercase-with-dashes tags (e.g., ["user-interface", "backend"])
Expand Down
4 changes: 1 addition & 3 deletions templates/memo-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ slug: memo-XXX-brief-description # URL-friendly slug (lowercase-with-dashes)
title: "Memo: Subject Title" # Clear, descriptive subject line
status: Draft # Valid values: Draft, Published, Archived
created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date memo was first created, DO NOT CHANGE after initial creation
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps
updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes
# Auto-updated with: docuchango fix timestamps
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps
author: Your Name # Person who wrote this memo (e.g., "Jacob Repp", "Product Team")
# Generate: git config user.name
tags: ["memo", "communication"] # List of lowercase-with-dashes tags (e.g., ["quarterly-review", "announcement"])
Expand Down
4 changes: 1 addition & 3 deletions templates/prd-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ slug: prd-XXX-product-name # URL-friendly slug (lowercase-with-dashes)
title: "PRD-XXX: Product Name" # Must start with "PRD-XXX:" where XXX is 3-digit number
status: Draft # Valid values: Draft, In Review, Approved, In Progress, Completed, Cancelled
created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date PRD was first created, DO NOT CHANGE after initial creation
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps
updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes
# Auto-updated with: docuchango fix timestamps
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps
author: Product Manager Name # Person or team who wrote this PRD (e.g., "Jane Smith", "Product Team")
# Generate: git config user.name
tags: ["product", "requirements", "feature"] # List of lowercase-with-dashes tags (e.g., ["user-experience", "mobile"])
Expand Down
4 changes: 1 addition & 3 deletions templates/prdfaq-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ slug: prdfaq-XXX-product-name # URL-friendly slug (lowercase-with-dashes)
title: "PRDFAQ-XXX: Product Name" # Must start with "PRDFAQ-XXX:" where XXX is 3-digit number
status: Draft # Valid values: Draft, In Review, Approved, In Progress, Completed, Cancelled
created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date PRDFAQ was first created, DO NOT CHANGE after initial creation
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps
updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes
# Auto-updated with: docuchango fix timestamps
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps
author: Product Manager Name # Person or team who wrote this PRDFAQ (e.g., "Jane Smith", "Product Team")
# Generate: git config user.name
tags: ["product", "launch", "prdfaq"] # List of lowercase-with-dashes tags (e.g., ["customer-facing", "strategic"])
Expand Down
4 changes: 1 addition & 3 deletions templates/rfc-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ slug: rfc-XXX-brief-description # URL-friendly slug (lowercase-with-dashes)
title: "RFC-XXX: Technical Proposal Title" # Must start with "RFC-XXX:" where XXX is 3-digit number
status: Draft # Valid values: Draft, In Review, Accepted, Rejected, Implemented
created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date RFC was first created, DO NOT CHANGE after initial creation
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps
updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes
# Auto-updated with: docuchango fix timestamps
# Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps
author: Your Name # Person or team who wrote this RFC (e.g., "Jacob Repp", "Platform Team")
# Generate: git config user.name
tags: ["architecture", "api", "backend"] # List of lowercase-with-dashes tags (e.g., ["performance", "security"])
Expand Down